1. 多路径输入

FileInputFormat是所有使用文件作为其数据源的 InputFormat 实现的基类,它的主要作用是指出作业的输入文件位置。因为作业的输入被设定为一组路径, 这对指定作业输入提供了很强的灵活性。FileInputFormat 提供了四种静态方法来设定 Job 的输入路径:

  1. public static void addInputPath(Job job,Path path);
  2. public static void addInputPaths(Job job,String commaSeparatedPaths);
  3. public static void setInputPaths(Job job,Path... inputPaths);
  4. public static void setInputPaths(Job job,String commaSeparatedPaths);



1.1 addInputPath

使用FileInputFormat.addInputPath方法,只能指定一个路径。如果想使用该方法实现多路径输入,需要多次调用来加载不同的路径:

  1. FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-27/"));
  2. FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-28/"));
  3. FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-29/"));
1.2 addInputPaths

使用FileInputFormat.addInputPaths方法,可以指定多个路径。如果想使用该方法实现多路径输入,只需调用一次即可,多个路径字符串之间用逗号分隔开:

  1. FileInputFormat.addInputPaths(job, "result/search/train/pv_log/2016-04-27/,result/search/train/pv_log/2016-04-28/,result/search/train/pv_log/2016-04-29/");
1.3 setInputPaths

setInputPaths()方法一次设定完整的路径列表,替换前面调用中在 Job 上所设置的所有路径(覆盖):

  1. FileInputFormat.setInputPaths(job, "result/search/train/pv_log/2016-04-27/,result/search/train/pv_log/2016-04-28/,result/search/train/pv_log/2016-04-29/");
2. 多个输入

虽然一个MapReduce作业的输入可能包含多个输入文件,但所有的文件都由同一个InputFormat和同一个Mapper来处理,例如上面多路径输入。然而,数据格式往往会随着时间而改变,或者,有些数据源会提供相同的数据,但是格式不同,因此我们必须用不同的mapper来处理不同的数据。

这些问题可以用MultipleInputs类来解决,它允许为每条输入路径指定InputFormat 和 Mapper。MultipleInputs提供了两种用于多个输入的方法:

  1. public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass);
  2. public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass,Class<? extends Mapper> mapperClass);

下面两个方法的的区别在于针对不同输入路径文件,是否可以指定不同Mapper进行处理。

前者不需要指定Mapper,所以所有文件都通过一个Mapper进行处理:

  1. MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class);  
  2. MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class);  

后者可以针对不同输入路径指定不同的Mapper,故可以指定不同Mapper处理不同类型的文件:

  1. MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class,  TrainOrderMap.class);  
  2. MultipleInputs.addInputPath(job, new Path("result/search/flight/log/day=20161129"), TextInputFormat.class,  FlightOrderMap.class);  

这段代码取代了FileInputFormat.addInputPath() 和 job.setMapperClass() 的常规调用。由于火车票和机票订单数据都是文本文件,所以对两者使用TextInputFormat的数据类型。但这两个数据源的行格式不同,所以我们使用两个不一样的Mapper。TrainOrderMapper 读取火车票订单的输入数据并计算订单信息,FlightOrderMapper 读取飞机票订单的输入数据并计算订单信息。重要的是两个Mapper 输出类型一样,因此,reducer看到聚合后的map输出,并不知道这些输入是由不同的Mapper产生的。

[Hadoop]MapReduce多路径输入与多个输入相关推荐

  1. Hadoop 4、Hadoop MapReduce的工作原理

    一.MapReduce的概念 MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框就是mapreduce,两者缺一不可,也就是 ...

  2. hadoop MapReduce实例解析

    1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...

  3. Hadoop MapReduce程序的模板框架

    这里放了两个Hadoop MapReduce程序的模板框架,包括一些基本的包import语句.Mapper基类.Reducer基类.map()方法.reduce()方法,后面还有一些作业job的驱动程 ...

  4. Hadoop MapReduce V2——找出每个月气温最高的2天

    项目目录 MyTQ package com.henu.tq; import java.io.IOException; import org.apache.hadoop.conf.Configurati ...

  5. Hadoop MapReduce编程 API入门系列之wordcount版本2(六)

    这篇博客,给大家,体会不一样的版本编程. 代码 1 package zhouls.bigdata.myMapReduce.wordcount4; 2 3 import java.io.IOExcept ...

  6. java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  7. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  8. Hadoop MapReduce(WordCount) Java编程

    编写WordCount程序数据如下: hello beijing hello shanghai hello chongqing hello tianjin hello guangzhou hello ...

  9. MapReduce 示例:减少 Hadoop MapReduce 中的侧连接

    摘要:在排序和reducer 阶段,reduce 侧连接过程会产生巨大的网络I/O 流量,在这个阶段,相同键的值被聚集在一起. 本文分享自华为云社区<MapReduce 示例:减少 Hadoop ...

最新文章

  1. 按属性对自定义对象的ArrayList进行排序
  2. Silverlight中调用WebService-发送邮件测试实例
  3. /etc/passwd 与 /etc/shadow文件的区别
  4. CPU读/写一个存储单元
  5. PythonAM3_统计量分析
  6. memcache使用方法测试 # 转自 简单--生活 #
  7. 六月计划#2A(6.10-6.16)
  8. CSS篇 Process Document第7章 Technical Report Development Process翻译
  9. dnf红眼补丁在哪下载_dnf补丁下载到哪里
  10. Wap模拟器,用电脑浏览器浏览手机wap网站
  11. 3dmax:3dmax三维建模中常用的材质、贴图、渲染设置之详细攻略
  12. 使用SAXReader读取xml文件时的路径问题
  13. Could not resolve subtype of [simple type, class org.apereo.cas.services.Reg...
  14. Mybatis+Servlet+jsp
  15. 苹果手机白屏_为什么安卓用久了会卡顿,苹果用久了会闪退?看完长知识了
  16. R语言如何做独立样本t检验
  17. 苹果手机怎么在照片上添加文字_手机美图秀秀怎么给图片添加文字
  18. Shell实例:for循环语句实现求奇数和与偶数和——实验+解析,超详细!!!
  19. 操作系统原理课程设计任务书
  20. 前端一些好用的小小工具【免费的素材、颜色网站】,持续更新中…

热门文章

  1. Maven中maven-source-plugin,maven-javadoc-plugin插件的使用:
  2. mysql_real_escape_string 报错_addslashes与mysql_real_escape_string的区别
  3. notepad++ 文本文件内容丢失恢复
  4. redis——命令请求的执行过程
  5. python回归分析实验_python线性回归实验
  6. 密码学专题 非对称加密算法指令概述 DSA算法指令
  7. clion中链接openssl库
  8. 深入理解Solidity 三
  9. 流媒体数据代理----Anychat
  10. 集合源码阅读:LinkedList