写在前面的话
Hdfs采用分布式架构,为上层的应用和用户提供可扩展、高吞吐、高可靠的数据存储服务。在整个Hadoop生态系统中,hdfs处于最底层,也是最无可替代的一个基础设施。从2008年hadoop-0.10.1版本开始到现在的hadoop-3.0.0-beta1,hdfs已经走过了近10个年头,其架构和功能特性也发生了巨大的变化。特别是hdfs3.0.0系列,和hdfs2.x相比,增加了基于纠删码(erasure encoding)的容错方式,与传统的副本方式相比,在同等可用性的情况下, 能大幅节省一半以上的空间,这也是自hdfs诞生近这十年来,数据可靠性机制上的一个重大变化(之前一直都是副本容错方式)。此外hdfs3.0.0还增加了其它的一些特性,例如在Namenode HA中支持3个Namenode,可以容忍2个Namenode失效,而hdfs2.x只能容忍1个Namenode失效。
本文以连载的方式,在“大数据学习网”上记录自己使用hadoop-3.0.0-beta1的hdfs的点点滴滴,包括从零开始搭建分布式hdfs3.0,如何动态扩展hdfs节点、如何使用hdfs3.0的纠删码容错等等。不当之处,请大家发邮件aishuc@126com给艾叔,谢谢!
本节我们将演示如何使用hdfs3.0的纠删码功能,纠删码是hdfs3.0新加入的功能,之前的hdfs都是采用副本方式容错,默认情况下,一个文件有3个副本,可以容忍任意2个副本(datanode)不可用,这样提高了数据的可用性,但也带来了2倍的冗余开销。例如3TB的空间,只能存储1TB的有效数据。而纠删码则可以在同等可用性的情况下,节省更多的空间,以rs-6-3-1024K这种纠删码策略为例子,6份原始数据,编码后生成3份校验数据,一共9份数据,只要最终有6份数据存在,就可以得到原始数据,它可以容忍任意3份数据不可用,而冗余的空间只有原始空间的0.5倍,只有副本方式的1/4,因此,可以大大节约成本。
由于编码出来的数据,要分布到多台datanode上,例如rs-6-3-1024K,就需要至少6+3=9台datanode,我们目前只有2个datanode,因此还需要扩充7个datanode。下面的的操作就是,先扩充datanode,然后演示如何进行纠删码操作。
6.1 复制datanode节点、并动态加入
由于纠删码要用到多个节点,我们复制dn1,构建10个datanode,分布从dn2~dn9,每个datanode的内存配置为256MB。IP地址从192.168.182.13~192.168.182.20。
A. 每个datanode上要做的事情:
1. 修改虚拟机名、主机名
2. 修改网络配置
3. 添加hosts解析
4. 清除datanode存储目录下的文件
5. 虚拟机内存调整位256MB
注意:打开虚拟机时,一定要选择“I copied it”
B. 在nn1上要做的事情