hadoop 分片与分块

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

《hadoop 分片与分块》 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错当成对方“ 的情况。

    原文作者:活着活法
    原文地址: https://www.jianshu.com/p/57781f8130d0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞