MapReduce中如何处理跨行的Block和InputSplit
1 提出问题 Map最小输入数据单元是InputSplit。比如对于那么对于一个记录行形式的文本大于128M时,HDFS将会分成多块存储(block),同时分片并非到每行行尾。这样就会产生两个问题: 1、Hadoop的一个Block默认是128M,那么对于一个记录行形式的文本,会不会造成一行记录被分到两个Block当中? 2、在把文件从Block中读取出来进行切分时,会不会造成一行记录被分成两个InputSplit,如果被分成两个InputSplit,这样一个InputSplit里面就有一行不完整的数据,那么处理这个InputSplit的Map会不会得出不正确的结果? 对于上面的两个问题,必须明确两个概念:Block和InputSplit: 1、Block是HDFS存储文件的单位(默认是128M) 2、InputSplit是MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,每个InputSplit并没有对文件实际的切割,只是记录了要处理的数据的位置(包括文件的path和hosts)和长度(由start和length决定)因此以行记录形式的文本,可能存在一行记录被划分到...