首页 文章 精选 留言 我的

精选列表

搜索[hadoop],共8432篇文章
优秀的个人博客,低调大师

[Hadoop]MapReduce多路径输入与多个输入

1. 多路径输入 FileInputFormat是所有使用文件作为其数据源的 InputFormat 实现的基类,它的主要作用是指出作业的输入文件位置。因为作业的输入被设定为一组路径, 这对指定作业输入提供了很强的灵活性。FileInputFormat 提供了四种静态方法来设定 Job 的输入路径: public static void addInputPath(Job job,Path path); public static void addInputPaths(Job job,String commaSeparatedPaths); public static void setInputPaths(Job job,Path... inputPaths); public static void setInputPaths(Job job,String commaSeparatedPaths);  1.1addInputPath 使用FileInputFormat.addInputPath方法,只能指定一个路径。如果想使用该方法实现多路径输入,需要多次调用来加载不同的路径: FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-27/")); FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-28/")); FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-29/")); 1.2 addInputPaths 使用FileInputFormat.addInputPaths方法,可以指定多个路径。如果想使用该方法实现多路径输入,只需调用一次即可,多个路径字符串之间用逗号分隔开: 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.3setInputPaths setInputPaths()方法一次设定完整的路径列表,替换前面调用中在 Job 上所设置的所有路径(覆盖): 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提供了两种用于多个输入的方法: public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass); public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass,Class<? extends Mapper> mapperClass); 下面两个方法的的区别在于针对不同输入路径文件,是否可以指定不同Mapper进行处理。 前者不需要指定Mapper,所以所有文件都通过一个Mapper进行处理: MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class); MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class); 后者可以针对不同输入路径指定不同的Mapper,故可以指定不同Mapper处理不同类型的文件: MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class, TrainOrderMap.class); 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产生的。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册