MapRed程序map个数控制分析

本文探讨了MapReduce程序中Map数量的控制,尤其是针对FileInputFormat和CompositeInputFormat两种主流输入格式的处理。MapReduce通常遵循一个文件Block对应一个Map的原则,而Hive的Textfile格式使用CompositeInputFormat,其split策略根据配置可在128M到256M之间调整。另一方面,TextInputFormat等文本格式则依据不同规则进行文件切分。
摘要由CSDN通过智能技术生成
前言:

        我们在线上跑的MapRed程序和Hive程序,Map数到底怎么控制?这个问题一直比较模糊,这次有机会深入代码里面去看,才了解到其实MapReduce针对不同输入格式有不同的判断文件大小的规则以及文件切片和合并的方式。下面就来具体了解一下FileInputFormat和CompositeInputFormat两种主流输入格式的处理细节。

首先在这里提一下MapReduce框架是默认一个文件Block对应一个Map的输入的,所以在这个背景下才有不同的输入格式自己的有针对性的文件切分或合并方式。

 

CompositeInputFormat格式:

          这个是Hive读取所有Textfile格式的文件是用的默认输入格式:

void  createSplits(Map<String, Set<OneBlockInfo>> nodeToBlocks,
                      Map<OneBlockInfo, String[]> blockToNodes,
                      Map<String, List<OneBlockInfo>> rackToBlocks,
                      long  totLength,
                      long  maxSize,
                      long  minSizeNode,
                      long  minSizeRack,
                      List<InputSplit> splits                    
                     ) {
                     ...
                     // if the accumulated split size exceeds the maximum, then
                     // create this split.
                     //这里的判断条件表示文件分块是按maxSize来合并的
                     if  (maxSize !=  0  && curSplitSize >= maxSize) {
                     // create an input split and add it to the splits array
                     addCreatedSplit(splits, Collections.singleton(node), validBlocks);
                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值