hadoop 分片与分块

参考:http://blog.csdn.net/dr_guo/article/details/51150278

hadoop 分片与分块_第1张图片
Paste_Image.png

重点概念:

输入分片(Input Split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),
每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组。

场景具体分析:

由于 app click show的日志都是 1M 15M的小文件,在hadoop框架中对小文件做了优化,将多个数据合并成一个分片split ,交给mapper处理。
导致,mapper中 inputSplit.getPath()获取的是多个文件的列表。而 实时ctr代码中,直接取列表的第1个,来做判断,所以出错。

方案:

将hadoop默认的优化,进行自定义处理,即在job run之前添加 job.setInputFormatClass(TextInputFormat.class);
这样,每个小文件,将作为一个独立的分片split, 对应一个独立的 mapper ,你再用inputSplit.getPath()就能得到唯一确定的路径了

就解决了”click 、show错当成对方“ 的情况。

你可能感兴趣的:(hadoop 分片与分块)