Hadoop之HDFS基础知识
一、HDFS概叙
1.HDFS是一个分布式文件系统,通过目录树来定位文件
2.HDFS优缺点
- 优点:高容错性、适合处理大数据、可以构建在廉价的机器上,通过多副本机制,提高可靠性
- 缺点:不适合低延迟数据的访问、无法对大量小文件进行存储、不支持并发写入,文件随机修改
3.HDFS组成架构
- namenode:
- 是一个主管者,管理HDFS的名称空间
- 配置副本策略
- 管理数据块的映射信息
- 处理客户端的请求
- datanode
- 是一个slave,namenode下达命令,datanode负责实施
- 存储实际的数据
- 执行数据块的读写操作
- secondarynamenode
- 并不是namenode的热备,当namenode挂掉后,不能马上替换namenode并提供服务
- 辅助namenode进行fsimage和edits的定期合并操作,并推送给namenode
- 紧急情况下,可以辅助恢复namenode
4.HDFS的文件块大小
- HDFS中的文件是按照数据块形式存储的,hadoop2.x中默认块大小是128M
- 数据块大小不能设置太大,也不能设置太小
- 太小会导致寻址时间大于传输时间
- 太小会导致传输时间大于寻址时间
- 以上都不符合数据块的设计原则,最佳状态是数据块的寻址时间是数据传输时间的1%
二、HDFS的数据流
-
HDFS写数据流程(略)
-
HDFS读数据流程(略)
-
网络拓扑-节点距离计算
节点距离:两个节点到达最近的共同祖先的距离总和。
-
机架感知(副本存储节点选择)
- 第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个
- 第二个副本和第一个副本位于相同机架,随机节点
- 第三个副本位于不同机架,随机节点
三、NameNode和SecondaryNameNode
-
NN和2NN工作机制(略)
-
CheckPoint时间设置
-
默认的情况下,SecondaryNameNode每隔一小时执行一次。
-
默认的情况下,一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。
-
hdfs-site.xml设置参数(下面参数都是默认的,需要自己更改):
<property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> <description>SecondaryNameNode每隔一小时执行一次</description> </property> <property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> <description>操作动作次数</description> </property> <property> <name>dfs.namenode.checkpoint.check.period</name> <value>60</value> <description> 1分钟检查一次操作次数</description> </property >
-
-
NameNode故障处理
-
方法一:将2NN上数据拷贝到NN的存储元数据的目录下,然后重启下NameNode
scp -r kgg@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
-
方法二:使用-importcheckpoint选项启动NN守护进程,从而将2NN中数据拷贝到NN的存储元数据的目录中
-
修改hdfs-site.xml
<property> <name>dfs.namenode.checkpoint.period</name> <value>120</value> </property>
-
如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
[kgg@hadoop101 dfs]$ scp -r kgg@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./ [kgg@hadoop101 namesecondary]$ rm -rf in_use.lock [kgg@hadoop101 dfs]$ pwd /opt/module/hadoop-2.7.2/data/tmp/dfs [kgg@hadoop101 dfs]$ ls data name namesecondary
-
导入检查点数据(等待一会ctrl+c结束掉)
hdfs namenode -importCheckpoint
-
启动NameNode
hadoop-daemon.sh start namenode
-
-
-
安全模式
- NN启动后,会加载Fsimage和edits到内存中,然后NN会监控DN,这个过程一直处于安全模式,NN的文件系统对外都是只读模式;
- DN启动后,NN会保存DN的所有块信息,在安全模式下,然后DN会向NN发送最新的块列表信息,NN了解到足够多的块位置信息后,可以高效运行文件系统;
- 如果满足“最小副本条件“,NN会在30秒后退出安全系统;最小副本条件就是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
-
NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性
-
具体配置在hdfs-site.xml文件中增加如下内容
<property> <name>dfs.namenode.name.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value> </property>
-
四、DataNode
-
DataNode工作机制(略)
-
数据完整性
- 每次读取数据块时,DN会对该数据块进行checkSum检查,
- 如果检查出来的结果和第一次写入的结果不一致,说明该块以损坏
- 客户端会向其他DN下载
- DN在其文件创建后周期性的检查checkSum
-
掉线时限参数设置
-
DN挂掉后,NN不会第一时间判断该DN不能用,要经过一段时间再判断,这个时间叫做超时时间
-
HDFS的默认超时时间是10分30秒
-
计算公式是:TimeOut=dfs.namenode.heartbeat.recheck-interval * 2+dfs.heartbeat.interval * 10
-
具体配置修改hdfs-site.xml 配置文件(下面参数为默认,需自己更改):
<property> <name>dfs.namenode.heartbeat.recheck-interval</name> <value>300000</value> <description>该参数单位为毫秒</description> </property> <property> <name> dfs.heartbeat.interval </name> <value>3</value> <description>该参数单位为秒</description> </property>
-
-
服役新数据节点
-
直接添加,注意修改IP地址和主机名称
-
如果数据不均衡,可以用命令实现集群的再平衡
start-balancer.sh
-
-
退役旧数据节点(在hdfs-site.xml中配置)
-
白名单退役(dfs.hosts)
<property> <name>dfs.hosts</name> <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value> </property>
-
黑名单退役(dfs.hosts.exclude)
<property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value> </property>
-
两种方式都需要刷新NameNode和ResourceManager节点:
hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
-
如果数据不均衡,可以用命令实现集群的再平衡
start-balancer.sh
-
最后注意:不允许白名单和黑名单中同时出现同一个主机名称
-
-
DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本
<property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value> </property>
五、HDFS 2.X新特性
-
集群间数据拷贝
-
scp实现两个远程主机之间的文件复制
scp -r hello.txt root@hadoop103:/user/kgg/hello.txt // 推 push scp -r root@hadoop103:/user/kgg/hello.txt hello.txt // 拉 pull scp -r root@hadoop103:/user/kgg/hello.txt root@hadoop104:/user/kgg //是通过本地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。
-
采用distcp命令实现两个Hadoop集群之间的递归数据复制
bin/hadoop distcp hdfs://haoop102:9000/user/kgg/hello.txt hdfs://hadoop103:9000/user/kgg/hello.txt
-
-
Hadoop存档
-
Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop存档文件对内还是一个一个独立文件,对NameNode而言却是一个整体,减少了NameNode的内存。
bin/hadoop archive -archiveName input.har –p /user/kgg/input /user/kgg/output //把/user/kgg/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/kgg/output路径下 hadoop fs -lsr /user/kgg/output/input.har hadoop fs -lsr har:///user/kgg/output/input.har //查看归档 hadoop fs -cp har:/// user/kgg/output/input.har/* /user/kgg //解归档文件
-
六、Hadoop HA高可用
- HDFS-HA
- HDFS-HA是通过双NameNode消除单点故障
- Yarn-HA
- Yarn-HA是通过双ResourceManager消除单点故障