数据块
hdfs上的文件被切分为多个块(block),每个block的大小默认为128M,小于一个block大小的文件不会占据整个块的空间,每个block会保存多个副本以实现容错,默认副本数为3,对特殊文件可以在上传时指定副本的个数:hadoop fs -D dfs.replication=4 -put 1.txt /tmp/。
副本的存放机制:第1个副本存放在运行客户端的节点上,第2个副本存放在与第一个不同且随机选择的机架上的一个节点上,第3个副本存放在与第二个副本相同机架的不同节点上。
hdfs中的块比磁盘块大很多是为了最小化寻址开销,块足够大时,从磁盘传输数据的时间会明显大于定为这个块开始位置所需要的时间,因而传输一个由多个块组成的文件的时间取决于磁盘的传输速率。较大block的好处:block尺寸较大时,文件的block个数就会比较小,从而namenode需要记录的每个文件中各个块所在的数据节点信息就会比较小,而这些信息是保存在namenode的内存中的。block太大的缺点:MapReduce中一个map任务通常只处理一个块的数据,块太大任务数就会太少会降低作业的运行速度。
namenode和datanode
hdfs集群由一个namenode(管理节点)和多个datanode(工作节点)组成。namenode管理文件系统的命名空间,维护文件系统数以及树内所有的文件和目录,这些信息以两个文件的形式永久保存在本地磁盘上: