//创建配置文件

Configuration conf = new Configuration();

//通过反射获取一个job对象
Job job = Job.getInstance(conf);
//指定本程序的jar包所在的本地路径
job.setJarByClass();
//指定mapper业务类和reducer业务类
job.setMapperClass();
job.setReducerClass();

//指定mapper输出数据的kv类型
job.setMapOutputKeyClass();
job.setMapOutputValueClass();

//指定最终输出的数据的kv类型
job.setOutputKeyClass();
job.setOutputValueClass();

FileInputFormat.setInputPaths(job, new Path("file:///wordcount/gpinput"));
FileOutputFormat.setOutputPath(job, new Path("file:///wordcount/gpoutput"));

自定义输出文件类,和输入文件类

//在此设置自定义的Groupingcomparator类  分组的类
job.setGroupingComparatorClass(ItemidGroupingComparator.class);

//利用reduce端的GroupingComparator来实现将一组bean看成相同的key   reducer业务类开始之前会对数据进行分组,

默认相同的key会合并,所有的values用迭代器来合并。可以指定为自己写的方法来分组

public class ItemidGroupingComparator extends WritableComparator {
//传入作为key的bean的class类型,以及制定需要让框架做反射获取实例对象
protected ItemidGroupingComparator() {
super(OrderBean.class, true);
}
@Override
public int compare(WritableComparable a, WritableComparable b) {
OrderBean abean = (OrderBean) a;
OrderBean bbean = (OrderBean) b;

//比较两个bean时,指定只比较bean中的orderid
return abean.getItemid().compareTo(bbean.getItemid());
}
}

//在此设置自定义的partitioner类 ,

1、mapper业务类在调用OutPutCollector像环形缓冲区写数据

2、环形缓冲区中的数据通过spiller将数据  分组(HashPartitionet)、排序(key.compareTo)、可能会有Combiner(作用:合并相同的key,)

3、输出的数据就是分组之后的有序数据

4、因此可以自定义方法进行分组和排序
job.setPartitionerClass(ItemIdPartitioner.class);

//指定分组

public class ItemIdPartitioner extends Partitioner<OrderBean, NullWritable>{

@Override
public int getPartition(OrderBean bean, NullWritable value, int numReduceTasks) {
//相同id的订单bean,会发往相同的partition
//而且,产生的分区数,是会跟用户设置的reduce task数保持一致
return (bean.getItemid().hashCode() & Integer.MAX_VALUE) % numReduceTasks;

}

}

//指定排序   继承WritableComparable类,并重写compareTo方法

public class OrderBean implements WritableComparable<OrderBean>

@Override
public int compareTo(OrderBean o) {
int cmp = this.itemid.compareTo(o.getItemid());
if (cmp == 0) {
cmp = -this.amount.compareTo(o.getAmount());
}
return cmp;
}

//指定reduce task的数量
job.setNumReduceTasks(2);
//提交job类
job.waitForCompletion(true);

转载于:https://www.cnblogs.com/lp0636/p/8855006.html

(三)MapReducer运行流程相关推荐

  1. python程序调用函数的过程_Python_自定义函数_使用_运行流程

    定义函数会创建一个函数类的对象,有type函数. >>> type(print_new) 调用新函数的语法和调用内置函数是一样的,直接打印函数名: >>> prin ...

  2. 爬虫学习笔记(六)——Scrapy框架(一):安装、运行流程及简单使用

    文章目录 一.简介 二.安装(Windows) 三.运行流程 3.1.数据流 3.2.组件介绍 3.3.简单使用 3.3.1.项目命令 3.3.2.shell 交互式平台 四.小案例:爬取豆瓣电影 4 ...

  3. Spark SQL之queryExecution运行流程解析Logical Plan(三)

    1.整体运行流程 使用下列代码对SparkSQL流程进行分析,让大家明白LogicalPlan的几种状态,理解SparkSQL整体执行流程 // sc is an existing SparkCont ...

  4. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  5. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  6. python基础爬虫的框架以及详细的运行流程

    网络爬虫是什么? 网络爬虫就是:请求网站并提取数据的自动化程序 网络爬虫能做什么? 网络爬虫被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和 ...

  7. SpringMVC运行流程分析

    一.运行流程图 下面是 SpringMVC 运行流程的分析图,包括了拦截器的调用过程,目标资源的处理以及异常处理. 二.运行流程中的相关组件 在上面的流程图中有几个比较重要的组件,下面大概描述一下其对 ...

  8. Lerna 运行流程剖析

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. python编程模式是什么_python 开发的三种运行模式详细介绍

    Python 三种运行模式 Python作为一门脚本语言,使用的范围很广.有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程.不管怎么说,怎么使用python既取决于 ...

最新文章

  1. 第六十二节,html分组元素
  2. 美国人与欧洲人为什么都吃转基因食品?
  3. linux计划任务30秒,Linux 计划任务(at batch crontab anacron)
  4. 最新有道翻译接口JS逆向分析
  5. Mongo之架构部署(Replica Sets+Sharding)
  6. 3.Event Loop
  7. 递推算法之平面分割问题总结
  8. C#技术分享【PDF转换成图片——10种方案】(2013-07-25重新整理)
  9. 【C语言】头文件书写方法与规范、code::black中如何创建并编写头文件(一看就会)
  10. hive实现两列数据合并成一列
  11. 迷宫(Maze)项目实现
  12. Scheme语言入门
  13. 让 ChatGPT 如虎添翼 2.0
  14. 一个参数 nls_date_language
  15. 广发卡自动分期,提额就是养卡的过程
  16. 乾宏教育海南省中高级工程师职称评审
  17. 在Linux服务器上安装SQL Server
  18. python list元素类型_阿博的Python之路-详解List数据类型
  19. java jsp开发的电子商务系统代码下载
  20. Go语言无孔不入的2016:跻身主流编程语言、国内大热、极速提升、尖端应用……

热门文章

  1. centos7 安装 openssl和openssl升级
  2. 单片机c语言期末考试题(a)的答案,单片机C语言期末考试题(A).doc
  3. 人工智能运行环境linux,Intel OpenVINO 人工智能推论环境搭建 (Linux) 第一章
  4. python subprocess pipe_python类库31[进程subprocess与管道pipe]
  5. linux重启mysql一直_linux正确重启MySQL的方法
  6. mysql中游标能不能更新数据库_MySQL与MariaDB中游标的使用
  7. python是动态_Python中的对象和动态性 [菜鸟的理解,高手莫入]
  8. ios charts显示固定个数_上次挂在了百度iOS二面不服气, 三月之期已到,这次终于拿下offer!...
  9. php用vscode开发,VSCode PHP开发
  10. jpa 人大金仓数据库方言_KingBaseV8人大金仓数据库 | 大小写敏感问题