1、元数据与数据分离
在HDFS 中存放数据时,文件本身的属性是存放在NameNode节点上,而文件所持有的数据是存放在DataNode节点上,这样可以对大量的数据进行一个统一的管理
2、master/salve架构(主从架构)
一个HDFS集群由一个NameNode节点和一定数目的DataNode节点组成
3、移动计算比移动数据更划算
这就涉及到hosts算法(即主机选择算法),文件是按照数据块的类型存储的,对数据进行处理时,是按照逻辑Split(片)的形式读取,首先说下文件切分算法(即文件是如何进行逻辑上的分片)
(1)文件切分算法
为了减少网络开销提高计算效率,一般将逻辑片的大小设定为和数据块的大小一致,这样就避免了数据的跨块读取,首先,将定义的最大值(即maxsize)和数据块的大小(blocksize)做对比,选取出最小值,再将该值与minsize(片的最小值,默认为1,可以通过配置参数mapred.min.split.size来进行设置)做对比,选取出最大值作为我们逻辑片的大小
这样就保证了当我们的文件大小大于数据块的大小,此时的逻辑片的大小就与数据块的大小一致,当文件的大小小于数据块的大小,逻辑片的大小就与文件的大小一致,以此来提高运算效率
原码分析:
(2)hosts算法
分片完成后,就开始hosts算法,确定每一个逻辑片的元数据,一般包括四部分<file,start,length,hosts>
file----------表示逻辑片存放在那些文件中
start--------表示逻辑片在文件中的起始位置
length------表示逻辑片的长度
hosts-------文件所在的节点信息
host选择遵循本地性,即将算法调度到要处理的数据所在的节点上,因为我们的数据并不是存放在一个节点上,我们需要从其它节点上读取信息,这就涉及到网络传输,为了减少网络开销,我们会选择存储数据最多的节点,将算法调度到该节点上,这样处理数据时就是以本地的模式进行,会提高运算效率,将其他存储少量信息的节点通过网络传输将数据传输过来,这样就能减少带宽,提高系统的吞吐量,因而说移动计算比移动数据更划算。