#hadoop1.x是默认每个块大小64GB,而hadoop2.x默认每个块大小128GB。系统默认3个快。定义(1);block;
HDFS存储数据在DataNode节点,block就是DataNode里存储数据的一个一个单位。当我们把文件上传到HDFS时,文件会被分块,这个是真实物理上的定义。因为,读磁盘需要时间,随机读会造成查找目录的时间比真正读出磁盘内容的时间占比过大。读取当前数据时候,很大可能会读取前后附近的数据。所以直接读出一大片数据,一整块数据读到内存里只要查找目录一次,还高效。而且大文件数据可能一个地方放不下,需要被拆开放多个电脑存储。所以block的的出现是很有现实意义的。 大数据培训
定义(2);split;
Split是逻辑意义上的定义。split是把block切分而成的虚拟上的的定义,是MapReduce里的概念。输入分片(Input Split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组。通常一个split就是一个block这样做的好处是使得Map可以在存储有当前数据的节点上运行本地的任务,而不需要通过网络进行跨节点的任务调度。
总结
1. split是MapReduce里的切片的概念,split是虚拟切片 ;而block是hdfs中切块的大小,block是物理切块;
2. split大小在默认下和block切块大小一致,是为了MapReduce处理的时候减少由于split和block之间大小不一致,可能会延迟网络之间的传输。
为了避免对文件、块、片理解有误区,解释一下三者关系
1、一个文件从本地被上传到HDFS时,会进行分块,块大小默认是64M,同时会产生副本数保存在其他datanode上,默认副本数是3个,课通过配置文件修改
2、要进行分片时,先把块从分布式文件系统中取出,调用getSplits(),通过分片算法对块进行分片,片的单位大小就是块的大小,hadoop默认128M
3、block是在物理内存上进行存储的,是真实存储在hdfs上的
4、split 是在虚拟上的存储,是在逻辑上的分片,减少块的数量,便于后续读取
5、一个split只能属于一个文件,但是一个文件会被切成很多片
6、一个split可能包含多个block,但一个block不一定只属于一个split。比如:split1完全包含block1,部分包含block2,;block2一部分属于split1,一部分属于split2.