hadoop2.5.2学习10--MR之统计每月最高三个温度02

1、InputFromat

inputFormat 负责创建inputSplit并且将他们拆分成键值对(records)
有两个方法:

  • getSplits
  • createRecordReader

通过调用getSplits来进行分片,然后将它们发送到Application Master.
Map通过调用InputFormat的createRecordReader方法来获取RecordReader对象, RecordReader就相当于record的迭代器,map任务使用此生成的键值对,然后传递给map()。
查看Mapper的run()可以看到map的整个完成流程:

  • 首先执行set(),
  • 然后调用context的nextKeyValue(), 为mapper提供键值对.
  • 通过context,键值对从RecordReader取出后传递给map();当reader读到stream的结尾,netKeyValue()返回fals, map结束。
  • 调用cleanup()

  /**
   * Expert users can override this method for more complete control over the
   * execution of the Mapper.
   * @param context
   * @throws IOException
   */
  public void run(Context context) throws IOException, InterruptedException {
    setup(context);
    try {
      while (context.nextKeyValue()) {
        map(context.getCurrentKey(), context.getCurrentValue(), context);
      }
    } finally {
      cleanup(context);
    }
  }

Mapper的run()方法是公共的,可以由用户定制。MultithreadedMapper是一个多线程并发运行多个mapper的实现(mapreduce.mapper.multithreadedmapper.threads可以设置线程数量)。对于大多数的数据处理任务来说,默认的执行机制没有优势。但是对于因为需要链接外部服务器而造成单个记录处理时间较长的mapper来说,它允许多个mapper在同一个JVM下尽量避免竞争方式执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值