Hadoop-HDFS知识点汇总

编程语言 来源:weixin_36607803 25℃ 0评论
LINUX命令汇总:
ipconfig  ----查看ip
service network restart   ----重新启动网络
setup  ----setup是一个设置公用程序,提供图形界面的操作方式。在setup中可设置7类的选项:
   1.登陆认证方式 
   2.键盘组态设置 
   3.鼠标组态设置 
   4.开机时所要启动的系统服务 
   5.声卡组态设置 
   6.时区设置
   7.X Windows组态设置
netstat -nltp  ----查看监听端口等??
find /etc/ -name ssh  ----查找etc目录下的名字为ssh的文件
vi /etc/ssh----打开etc下的ssh文件
cd /etc  ----进入etc目录下
ll  ----ll会列出该文件下的所有文件信息,包括隐藏的文件
ls -l  ----只列出显式文件,说明这两个命令还是不等同的! 
su  ----切换到root用户

:q  -----退出
:q!  ----强制退出
:wq  ----保存并退出


exit  ----退出
scp /etc/hosts hdp-node01:/etc/  -----远程拷贝命,scp 可以在 2个 linux 主机间复制文件
rm -rf /*  ----删除根目录下的所有文件
vi /etc/inittab  ----修改linux的启动模式,
GG  ----到文件末尾
gg  ----到文件开头
mkdir /usr/java   ----新建目录
pwd   ----列出当前目录
ll   ----列出当前目录中的
解压命令:
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
mv /usr/local/hadoop-1.2.1 /usr/loca/hadoop  ----重命名
netstat -nltp     ----查看端口占用情况


HDFS命令汇总
hadoop-dameon.sh start namenode  ----启动namenode
hadoop-dameon.sh start datanode  ----启动datanode
hdfs dfsadmin -report  ---dfs的管理命令,查看hdfs的状态
hadoop fs -mkdir /aaa  ----在hadoop的hdfs系统的根目录下创建aaa
hadoop fs -ls /  ----在hadoop的hdfs系统的查看根目录文件列表
hadoop fs -put test.txt /   ----将本地文件上传到hdfs中的根目录下
hadoop fs -cat /test.txt    ----查看文件内容






知识点汇总:
SSH是一种服务协议,叫做安全外壳协议,专门用来为UNIX类系统做远程登陆服务用的协议
注:以下配置环境的主机名和ip对应的名字都是hadoop-node-0X-server  ,  用户名都是hadoop-node-01
内网域名映射配置:
配置SRCT中的主机名/域名(hostname):              ----------------即在客户端这边给服务端机器的IP起一个域名
C:\Windows\System32\drivers\etc\hosts中的新加例如:
192.168.33.128      hadoop-node-01
192.168.33.129      hadoop-node-02
192.168.33.130      hadoop-node-03


修改服务端主机名:                                -----------------即在服务端这边给服务端机器的IP起一个域名
1. 分别进入三台虚拟机的root权限执行:
vi /etc/sysconfig/network
修改HOSTNAME=hadoop-node-01-server(HOSTNAME=hadoop-node-02-server  HOSTNAME=hadoop-node-03-server)
注意!!!
为避免不必要的麻烦,此处的主机名最好和ip地址映射的那个名字一致,yarn跑mapreduce时出错的教训!!!!!!!
(另:上面是永久修改了主机名,若要临时在本次回话中修改:执行hostname hadoop-node-01-server,然后执行hostname查看修改后的主机名)~~~
2. 分别进入三台虚拟机的root权限执行:
vi /etc/hosts
新加:192.168.33.128   hadoop-node-01-server   
 192.168.33.129   hadoop-node-02-server
 192.168.33.130   hadoop-node-03-server
(此处完成第一台机器的配置后,可用远程拷贝命令完成hadoop-node02和hadoop-node03其他机器的配置:
root权限下执行:scp /etc/hosts hadoop-node-02-server:/etc/       和     scp /etc/hosts hadoop-node-03-server:/etc/  
或 scp /etc/hosts root@hadoop-node-02-server:/etc/  和     scp /etc/hosts root@hadoop-node-03-server:/etc/
若不加root@即是值当前用户)




管理员授权普通用户(root的所有权限)的配置(sudo):
以root身份执行:vi /etc/sudoers 
找到该文件中的: root  ALL =(ALL)  ALL ,再下面新加hadoop-node-01  ALL =(ALL)  ALL
保存时使用强制保存命令::wq!


修改linux的启动模式:
以hadoop-node-01-server身份运行  sudo vi /etc/inittab,
找到id:5:initdefault,修改为id:3:initdefault,(3是无图形化界面启动模式),保存退出(:wq)
再用scp命令方式修改两外两台机器的该配置文件:
sudo scp /etc/inittab root@hadoop-node-02-server:/etc/ 和  sudo scp /etc/inittab root@hadoop-node-03-server:/etc/
(由于上面已经授权了hadoop-node-01所有root的权限,故此处可在hadoop-node-01身份下使用sudo方式运行)
执行reboot重启即可看出效果了~~~
若想回到图像化操作界面,使用命令startx




配置防火墙(关闭):
service iptables stop    ----关闭防火墙
service iptables status  ----查看防火墙状态
chkconfig iptables on   ----开启防火墙,开启后会随着系统启动而启动
chkconfig iptables off  ----关闭防火墙,关闭后不会随着系统启动而启动
chkconfig iptables list
chkconfig iptables --list




linux安装配置jdk
官网下载linux环境的jdk安装包,如:jdk-7u79-linux-i586.rpm
将该安装文件从windows(客户端)发送到linux(服务端):
1.在SCRT中登录服务器状态下按ALT+P进入到SFTP工具,执行put G:/jdk-7u79-linux-i586.rpm上传文件,默认上传到了linux的  /home/用户目录  下
2.root身份执行 mkdir /usr/java 新建一个安装目录
3.root身份执行rpm -ivh jdk-7u79-linux-i586.rpm --prefix /usr/java 将安装到新建的 /usr/java 下 
配置jdk环境变量:
1. root身份执行 vi /etc/profile
2.按i编辑该文件:在文件最后添加如下配置:
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
3.应该把 jdk的安装目录和 /etc/profile复制到集群其他机器,并且在每一台机器上执行命令:source /etc/profile 来让环境变量生效
4.执行 java -version 查看是否安装成功


安装Hadoop
    将hadoop压缩包从windows(客户端)发送到linux(服务端):
    1.在SCRT中登录服务器状态下按ALT+P进入到SFTP工具,执行put G:/hadoop-2.7.1.tar.gz上传文件,默认上传到了linux的  /home/用户目录  下
    2.执行命令  tar zxvf hadoop-2.7.1.tar.gz  解压缩到当前文件夹下
    配置hadoop环境变量
    1. root身份执行 vi /etc/profile
2.按i编辑该文件:在文件最后添加如下配置:
      export HADOOP_HOME=/home/hadoop-node-01/hadoop-2.7.1
  export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.执行  source /etc/profile  使其生效,执行  hadoop version  查看版本
修改4个配置文件
1.进入到hadoop的文件目录中的hadoop-env.sh文件
vi /home/hadoop-node-01/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
修改 export JAVA_HOME=/usr/java/jdk1.7.0_79
2.进入到hadoop的文件目录中的core-site.xml文件
fs.defaultFS    指定hadoop所使用的文件系统
hadoop.tmp.dir  指定各节点上的hadoop进程所在的本地工作目录


fs.defaultFS
hdfs://hadoop-node-01-server:9000               ------------namenode的主机域名和端口(所有机器一致)


hadoop.tmp.dir
/home/hadoop-node-01/hadoop-2.7.1/hadoopdata


3.进入到hadoop的文件目录中的mapred-site.xml文件


mapreduce.framework.name
yarn


4.进入到hadoop的文件目录中的yarn-site.xml文件


yarn.resourcemanager.hostname
hadoop-node-01-server                           ------------namenode的主机域名(所有机器一致)


yarn.nodemanager.aux-services
mapreduce_shuffle


5.进入到hadoop的文件目录中的hdfs-site.xml文件


dfs.replication
2


(6.可选:
如果要让namenode单独配置一个工作目录,在hdfs-site.xml :
dfs.namenode.name.dir
/mnt/driver-meta/,nfs://
如果要让datanode单独配置一个工作目录,在hdfs-site.xml :
dfs.datanode.data.dir
/mnt/driver-data-a/,/mnt/driver-data-b/,/mnt/driver-data-c/
如果要让secondary namenode 在指定的机器上启动,则配置:
dfs.namenode.secondary.http-address
hadoop-server02:50090
)


启动hadoop
首先,格式化nameonde     
${HADOOP_HOME}/bin/hadoop namenode -format
手动一台一台地启动:
在相应服务器上启动hdfs的相关进程 :
启动namenode进程——  hadoop-daemon.sh start namenode
启动datanode进程——  hadoop-daemon.sh start datanode
然后,验证hdfs的服务是否能正常提供:
$HADOOP_HOME/bin/hdfs dfsadmin -report  查看hdfs集群的统计信息
Shell脚本批量启动方式:
在任意一台服务器上执行命令:
启动hdfs服务:$HADOOP_HOME/sbin/start-dfs.sh
启动yarn服务:$HADOOP_HOME/sbin/start-yarn.sh
或者:直接启动hdfs+yarn服务: $HADOOP_HOME/sbin/start-all.sh




datanode无法启动原因及其解决办法:
DataNode的Cluster ID与NameNode的Cluster ID不一致造成的
修改这两个Cluster ID一致即可,可以将NameNode的ID修改成DataNode的ID,NameNode个数有限,DataNode数量较多,修改NameNode端工作少很多。




ssh免密码登录(在本机进入到其他机器的的命令行的无密码进入~~~,因为机器之间通信不知道你所设置的密码是多少):
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例
背景:搭建Hadoop环境需要设置无密码登陆,所谓无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录。
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法.该工具做linux系统的远程管理是非常安全的。telnet,因为其不安全性,
在linux系统中被搁置使用了。
  " 公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)。
然后把公钥放到服务器上(~/.ssh/authorized_keys) 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.
如果匹配成功就可以登录了。
具体步骤不再赘述,问度娘~~~




Hdsf代码部分:详见eclipse代码


hdfs源码:
java基础补充:DUBBO框架 ----一种RPC框架,实现controller层和service层之间远程过程调用的分布式框架
hadoop中也有这种RPC框架,就叫RPC~~~


HDFS总结:
特性:
容量可以线性扩展
数据存储高可靠
分布式运算处理很方便
数据访问延迟较大,不支持数据的修改操作
适合一次写入多次读取的应用场景






可以用netstat -anp |grep myport看本机要启动的服务是否启动到位,经常遇到的情况是地址绑定到ipv6上了,
这里两种思路:
一是彻底禁用ipv6,而是在hadoop-evn.sh中添加"export HADOOP_OPTS="-Djava.net.preferlIPv4Stack=true"让java程序使用ipv4


1.jdk
2.关闭IPV6
打开/etc/sysctl.conf,添加如下信息
#disable ipv6 
net.ipv6.conf.all.disable_ipv6 = 1 
net.ipv6.conf.default.disable_ipv6 = 1 
net.ipv6.conf.lo.disable_ipv6 = 1


You have to reboot your machine in order to make the changes take effect.
用这个命令查看是否成功,为1是禁用了
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6




HDFS原理补充:
NameNode(NN代指)中存储的HDFS中文件的元信息,从大的方面可以分为3个部分整个文件系统的目录树、文件名与blockid的映射关系、blockid所在的DN信息。其中 前两项是永久存在NN中的(image文件),第三项是DN启动时向NN汇报生成的,这样能够简化NN的存储逻辑,并且大大减小image文件的大小。


关于SecondNamenode:
先抛开SecondNamenode不说,先介绍下Namenode中与检查点相关的两个文件,以及他们之间的关系。
fsimage文件与edits文件是Namenode结点上的核心文件。
Namenode中仅仅存储目录树信息,而关于BLOCK的位置信息则是从各个Datanode上传到Namenode上的。
Namenode的目录树信息就是物理的存储在fsimage这个文件中的,当Namenode启动的时候会首先读取fsimage这个文件,将目录树信息装载到内存中。
而edits存储的是日志信息,在Namenode启动后所有对目录结构的增加,删除,修改等操作都会记录到edits文件中,并不会同步的记录在fsimage中。
而当Namenode结点关闭的时候,也不会将fsimage与edits文件进行合并,这个合并的过程实际上是发生在Namenode启动的过程中。
也就是说,当Namenode启动的时候,首先装载fsimage文件,然后在应用edits文件,最后还会将最新的目录树信息更新到新的fsimage文件中,
然后启用新的edits文件。
整个流程是没有问题的,但是有个小瑕疵,就是如果Namenode在启动后发生的改变过多,会导致edits文件变得非常大,大得程度与Namenode的更新频率有关系。
那么在下一次Namenode启动的过程中,读取了fsimage文件后,会应用这个无比大的edits文件,导致启动时间变长,并且不可能控,可能需要启动几个小时也说不定。
Namenode的edits文件过大的问题,也就是SecondeNamenode要解决的主要问题。
SecondNamenode会按照一定规则被唤醒,然后进行fsimage文件与edits文件的合并,防止edits文件过大,导致Namenode启动时间过长。