HDFS2.0架构图
image.png

其他

小文件合并
hadoop fs -cat hdfs://path/*.txt | hadoop fs -appendToFile - hdfs://newpath/hdfs.txt

block

文件上传前需要分块,这个块就是block,一般为128MB。因为块太小:寻址时间占比过高。块太大:Map任务数太少,作业执行速度变慢。它是最大的一个单位。
block id
BP-1034052771-172.16.212.130-1405595752491:blk_1075892982_2152381
block 长度
Block 副本数

packet

packet是第二大的单位,它是client端向DataNode,或DataNode的PipLine之间传数据的基本单位,默认64KB。

chunk

chunk是最小的单位,它是client向DataNode,或DataNode的PipLine之间进行数据校验的基本单位,默认512Byte,因为用作校验,故每个chunk需要带有4Byte的校验位。所以实际每个chunk写入packet的大小为516Byte。由此可见真实数据与校验值数据的比值约为128 : 1。(即64*1024 / 512)

机架感知(Rack-aware)

默认不开启。机架感知脚本接收IP返回RackID(例如Rack1)

  1. <property>
  2. <name>topology.script.file.name</name>
  3. <value>/path/to/script</value>
  4. </property>

机器硬盘不够用HDFS会进入安全模式

*Federation

HDFS Federation采用了经典的Client Side Mount Table。
解决NameNode单点问题的水平横向扩展方案。
目的突破NameNode内存瓶颈。每个NameNode管理名字空间的一部分。例如(甲NameNode管理/foo,乙管理/bar)。

Namenode维护一个namespace volume(命名空间卷)里面包含命名空间元数据和Block Pool两部分。
namespace volume彼此独立,Datanode要向所有Namenode注册。

Federation将多个Namespace合并为一个视图,用户可通过viewfs访问。

DataNode会有多个Block Pool
概念

Block Pool

Cluster ID

NameNode格式化(formated)会创建新的Cluster ID

Quorum Journal Manager

NFS不能保证只有一个Namenode写,所以推荐使用QJM。

安全模式

保护NameNode而不是DataNode

ViewFS

管理多个 namespace
访问/foo/bar
会读core-site.xml等于访问hdfs://nnhost:9000/foo/bar

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://nnhost:9000</value>
  4. </property

多个集群,每个集群有多个NN每个NN有自己的NS。
ViewFS实现了所有HDFS的接口,用户使用起来完全透明。

  1. <property>
  2. <name>fs.default.name</name>
  3. <value>viewfs://clusterX</value>
  4. </property>