概述

引入YARN作为通用资源调度平台后。Hadoop得以支持多种计算框架,如MapReduce、Spark、Storm等。

MRv1是Hadoop1中的MapReduce,MRv2是Hadoop2中的MapReduce。以下是MRv1和MRv2之间的一些基本变化:

  1. MRv1包含三个部分:执行时环境(jobtracker和tasktracker)、编程模型(MapReduce)、数据处理引擎(Map任务和Reduce任务)
  2. MRv2中,重用了MRv1中的编程模型和数据处理引擎。可是执行时环境被重构了。

    jobtracker被拆分成了通用的资源调度平台YARN和负责各个计算框架的任务调度模型AM。

  3. MRv1中任务是执行在Map slot和Reduce slot中的。计算节点上的Map slot资源和Reduce slot资源不能重用。

    而MRv2中任务是执行在container中的,map任务结束后。对应container结束,空暇出来的资源能够让reduce使用。

MRv2參数配置

MRv2上的參数能够參考官方文档进行配置,可是在mapred-site.xml中有一个參数须要注意:mapreduce.job.user.classpath.first。本文推荐将其配置成true。

假设不配置该參数的话。在运行jar程序的时候,系统会优先选择Hadoop框架中已经存在的java类而不是用户指定包中自己编写的java类

新旧API

  1. MapReduce新旧API是指org.apache.hadoop.mapred包(旧包)和org.apache.hadoop.mapreduce包(新包)。
  2. 这两个包是指MapReduce的编程API发生了变化。旧包中的Map和Reduce是通过接口实现的。而新包中的Map和Reduce是通过继承实现的。这两个包在MRv1中就存在了。
  3. MRv2中mapred包的API基本没发生变化,曾经通过MRv1编译过的程序基本能够又一次执行。可是mapreduce包的API发生了变化。通过MRv1编译过的程序须要又一次编译,甚至须要改动代码才干执行
  4. 推荐使用新API进行编程

MapReduce包wordcount事例

public class WordCount {

  public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text(); public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
//context.nextKeyValue()
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
} public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
} public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
} Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

參考文献

  1. http://book.51cto.com/art/201312/422025.htm
  2. http://hadoop.apache.org/docs/r2.4.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduce_Compatibility_Hadoop1_Hadoop2.html

MRv1到MRv2的更多相关文章

  1. Migrating from MapReduce 1 (MRv1) to MapReduce 2 (MRv2, YARN)...

    This is a guide to migrating from Apache MapReduce 1 (MRv1) to the Next Generation MapReduce (MRv2 o ...

  2. <YARN><MRv2><Spark on YARN>

    MRv1 VS MRv2 MRv1: - JobTracker: 资源管理 & 作业控制- 每个作业由一个JobInProgress控制,每个任务由一个TaskInProgress控制.由于每 ...

  3. Hadoop 2.0中单点故障解决方案总结

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  4. Hadoop发行版本介绍

    前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...

  5. hadoop下跑mapreduce程序报错

    mapreduce真的是门学问,遇到的问题逼着我把它从MRv1摸索到MRv2,从年前就牵挂在心里,连过年回家的旅途上都是心情凝重,今天终于在eclipse控制台看到了job completed suc ...

  6. Cloudera Manager Free Edition 4.1 和CDH 4.1.2 简易安装教学

    转载:http://fenriswolf.me/2012/12/06/cloudera-manager-free-edition-4-1-和-cdh-4-1-2-简易安装教学/ 安装及管理一个大的Ha ...

  7. Hadoop2.0中单点故障解决方案分析

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  8. Hadoop2.0中单点故障解决方案总结---老董

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  9. 《深入理解Spark-核心思想与源码分析》(二)第二章Spark设计理念和基本架构

    若夫乘天地之正,而御六气之辩解,以游无穷者,彼且恶乎待哉? ——<庄子.逍遥游> 翻译:至于遵循宇宙万物的规律,把握“六气”的变化,遨游于无穷无尽的境域,他还仰赖什么呢! 2.1 初始Sp ...

随机推荐

  1. [Apple开发者帐户帮助]三、创建证书(8)撤销证书

    您可以根据证书类型和角色撤消证书.有关详细信息,请转到撤消权限. 要了解撤销证书时会发生什么,请转到Apple Developer支持中的证书. 所需角色:帐户持有人或管理员. 在“ 证书”,“标识符 ...

  2. dijkstra的stl实现(最近觉得挺方便的

    dijkstra的stl实现(最近觉得挺方便的 stl可作为跳板 --- Rujia liu struct node { int dis, id; node(int dis = 0, int id = ...

  3. python大杂铺

      python中continue,break,return三者之间的区别 return 会直接令函数返回,所有该函数体内的代码都不再执行了,所以该函数体内的循环也不可能再继续运行. break:跳出 ...

  4. go-swagger的简单使用

    一.下载go-swagger go-swagger 官方下载 根据不同个的操作系统选择对应的 二.添加环境变量 2.1 window swagger_windows_amd64.exe 将swagge ...

  5. Mysql 时间、字符串、时间戳互转

    时间转字符串 select date_format(now(),'%Y-%m-%d'); 时间转时间戳 select UNIX_TIMESTAMP(now()); 时间戳转时间 ) :: 时间戳转字符 ...

  6. WPF TextBox 仅允许输入数字

    因为在 IValueConverter 实现中,当文本不能转换为目标类型时返回 DependencyProperty.UnsetValue ,Validation.GetHasError 返回 tru ...

  7. 努比亚 Z17 mini s (Nubia NX589J) 解锁BootLoader 并刷入recovery ROOT

    首先下载好工具链接:链接:https://pan.baidu.com/s/1gher4T9 密码:rypn 备用下载链接:https://pan.baidu.com/s/1nxdzt9Z 本篇教程教你 ...

  8. php加密方法有哪些

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw_output -- 如果可 ...

  9. 查看SqlServer连接所使用的端口号

    最近一个项目里用到了一个插件,在配置时发现连接数据库使用的是JDBC,输入URL时用到了端口号.印象中在使用Sqlserver时貌似没有提到端口号,在网上查阅了一下,记录下来省的忘了 方法是通过内置的 ...

  10. Verification之PSL之use

    1 Where can PSL be used? • Documentation – Requirements – RTL Designs • Controllers – Memories, FIFO ...