1.什么是blockapp
块是以 block size 进行划分数据。 所以,若是群集中的 block size 为 128 MB,则数据集的每一个块将为 128 MB,除非最后一个块小于block size(文件大小不能被 block size 彻底整除)。例以下图中文件大小为513MB,513%128=1,最后一个块(e)小于block size,大小为1MB。 所以,块是以 block size 的硬切割,而且块甚至能够在逻辑记录结束以前结束(blocks can end even before a logical record ends)。ide
假设咱们的集群中block size 是128 MB,每一个逻辑记录大约100 MB(假设为巨大的记录)。因此第一个记录将彻底在一个块中,由于记录大小为100 MB小于块大小128 MB。可是,第二个记录不能彻底在一个块中,所以第二条记录将出如今两个块中,从块1开始,在块2中结束oop
2.什么是inputSplitorm
若是分配一个Mapper给块1,在这种状况下,Mapper不能处理第二条记录,由于块1中没有完整第二条记录。由于HDFS不知道文件块中的内容,它不知道记录会何时可能溢出到另外一个块(because HDFS has no conception of what’s inside the file blocks, it can’t gauge when a record might spill over into another block)。InputSplit这是解决这种跨越块边界的那些记录问题,Hadoop使用逻辑表示存储在文件块中的数据,称为输入拆分(InputSplit)。blog
当MapReduce做业客户端计算InputSplit时,它会计算出块中第一个完整记录的开始位置和最后一个记录的结束位置。在最后一个记录不完整的状况下,InputSplit 包括下一个块的位置信息和完成该记录所需的数据的字节偏移(In cases where the last record in a block is incomplete, the input split includes location information for the next block and the byte offset of the data needed to complete the record)。下图显示了数据块和InputSplit之间的关系:input
块是磁盘中的数据存储的物理块,其中InputSplit不是物理数据块。 它是一个Java类,指向块中的开始和结束位置。 所以,当Mapper尝试读取数据时,它清楚地知道从何处开始读取以及在哪里中止读取。 InputSplit的开始位置能够在块中开始,在另外一个块中结束。InputSplit表明了逻辑记录边界,在MapReduce执行期间,Hadoop扫描块并建立InputSplits,而且每一个InputSplit将被分配给一个Mapper进行处理。it