HDFS
HDFS分布式部署
一个NameNode,一个SecondaryNameNode,多个DataNode
NameNode作用:
- 管理文件系统的命名空间以及快的元数据信息,以两种文件(fsimage和editlog)永久存储在磁盘中。
fsimage文件包含文件系统中所有目录和文件inode的序列化信息;editlog文件存储用户的操作行为。 - 通过心跳机制,每隔一段固定的时间,从DataNode上获得文件块的位置信息并记录在内存当中。
- 相应客户端发过来的请求。
DataNode作用:
- 以块的形式存储数据。
- 通过心跳机制,每隔固定的时间向nameNode汇报自己节点上块的位置信息。
SecondaryNameNode作用:
创建检查点,合并fsimage和editlog文件。默认每隔一小时,或者编辑日志大小达到100万个事务。
HDFS配置调优
- NameNode内存大小的设定,默认是1000M,设置参数是HADOOP_NAMENODE_OPTS
- 缓冲区大小,Hadoop默认使用一个4kB的缓冲区辅助IO操作,可扩大一些使读写操作更快。参数设置core-site.xml文件的io.file.buffeder.size。
- HDFS块大小,默认128M,设置这个参数需要考虑具体业务数据量大小,磁盘存储设备的传输速率,网络带宽。目的是最小化寻址开销,使寻址时间仅占传输时间的1%。
HDFS优缺点
优点:可存储超大文件;流式数据访问(一次写入,多次读取);商用硬件(成本低,不需高可靠)
缺点:低时间延迟的数据访问;大量小文件(NameNode大小会成为瓶颈,每个文件的元信息大约占150字节);不支持多用户写入,任意修改文件
HDFS读写流程
HDFS文件副本机制
第一个副本放在运行客户端的节点上;
第二个副本放在与第一个副本不同且随机的另外一个机架节点上;
第三个副本放在与第二个副本同一个机架不同的节点上。
HDFS高可用机制
当活动的NN失效,备用的NN接管它的任务,并开始服务于来自客户端的请求。
群体日志管理器QJM
自动容灾(使用Zookeeper)
HDFS的安全模式
安全模式下,HDFS对客户端是只读的。
在NN启动时,首先将fsimage载入内存,并执行edits中各项操作,最后创建一个新的fsimage和空的editlog。这个过程HDFS运行在安全模式下。
Hadoop集群扩容
添加节点:
- 将新节点的网络地址添加到include文件中。
- 运行以下命令,将审核过的一系列DataNode集合更新至NameNode中:
%hdfs dfsadmin -refreshNodes
- 运行以下命令,将审核过的一系列DataNode集合更新至资源管理器中:
%yarn rmadmin -refreshNodes
- 以新节点更新slaves文件。这样的话,Hadoop控制脚本会将新节点包括在未来操作中。
- 启动新的DataNode和节点管理器。
删除节点:
- 将待解除节点的网络地址添加到exclude文件中,不更新include文件。
- 运行以下命令,将审核过的一系列DataNode集合更新至NameNode中:
%hdfs dfsadmin -refreshNodes
- 运行以下命令,将审核过的一系列DataNode集合更新至资源管理器中:
%yarn rmadmin -refreshNodes
- 转到网页界面,查看待解除datanode的管理状态是否变成“正在解除”,因为此时相关的datanode正在被解除过程中。这些datanode会把它们的块复制到其他datanode中。
- 当所有datanode的状态变成解除完毕时,表明所有块复制完毕。关闭已经解除的节点,
- 从include文件移除这些节点,并运行:
%hdfs dfsadmin -refreshNodes
%yarn rmadmin -refreshNodes
- 从slaves文件中移除节点。