简单的MapReduce程序(Hadoop2.2.0)

hadoop2.7运行python编写的wordcount的MapReduce程序 前言 一般来说,在学习某个新技术之前,都会写一个Hello World!的小程序,这个程序简单但是包含了一个程序所必须具备的一切。MapReduce程序也有自己的Hello World,那即是Word Count。 在学习用python编写word count的过程中,遇到了许多坑,网上许多教程都过时了或者版本不对,许多基于python的word count教程都是转载自或者翻译自这片文章ht... 阅读详情

继上篇文章: 配置Hadoop开发环境(Eclipse) http://blog.youkuaiyun.com/zythy/article/details/17397153

我们以简化版的气温统计为例,演示如何开发一个MapReduce程序。

 

Eclipse中新建一个MapReduce项目,命名为MaxTemperature。

源代码文件

新建以下3个类文件,代码依次如下:

MaxTemperatureDriver.java

package com.oss.maxtemperature;

 

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.conf.Configured;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

importorg.apache.hadoop.mapreduce.Job;

importorg.apache.hadoop.util.Tool;

importorg.apache.hadoop.util.ToolRunner;

 

public class MaxTemperatureDriver extends Configuredimplements Tool {

 

         @SuppressWarnings("deprecation")

         @Override

         public int run(String[] args) throwsException {                  

                   if (args.length != 2){

                            System.err.printf("Usage: %s <input><output>",getClass().getSimpleName());

                            ToolRunner.printGenericCommandUsage(System.err);

                            return -1;                  

                   }                  

                   Configuration conf =getConf();                

                   Job job = newJob(getConf());

                   job.setJobName("Max Temperature");                  

                   job.setJarByClass(getClass());

                   FileInputFormat.addInputPath(job,new Path(args[0]));

                   FileOutputFormat.setOutputPath(job,new Path(args[1]));                  

                   job.setMapperClass(MaxTemperatureMapper.class);

                   job.setReducerClass(MaxTemperatureReducer.class);                  

                   job.setOutputKeyClass(Text.class);

                   job.setOutputValueClass(IntWritable.class);                  

                   return job.waitForCompletion(true)?0:1;                  

         }

        

         public static void main(String[] args)throws Exception{

                   int exitcode = ToolRunner.run(new MaxTemperatureDriver(), args);

                   System.exit(exitcode);                  

         }   

}

 

MaxTemperatureMapper.java

packagecom.oss.maxtemperature; 

importjava.io.IOException; 

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.LongWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Mapper;

 

public class MaxTemperatureMapper extends Mapper<LongWritable, Text,Text, IntWritable> { 

         @Override

         public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{                                    

                   String line =value.toString();                               

                   try {

                            String year =line.substring(0,4);

                            int airTemperature = Integer.parseInt(line.substring(5));            

                            context.write(new Text(year),new IntWritable(airTemperature));                           

                   } catch (Exception e) {

                            System.out.print("Error in line:" + line);

                   }                                  

         }        

}

MaxTemperatureReducer.java

packagecom.oss.maxtemperature; 

importjava.io.IOException; 

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Reducer;

 

public class MaxTemperatureReducer extendsReducer<Text,IntWritable,Text,IntWritable> {        

         @Override

         public void reduce(Text key, Iterable<IntWritable> values, Context context)throws IOException, InterruptedException        {

                   int maxValue = Integer.MIN_VALUE;                  

                   for(IntWritable value: values){

                            maxValue = Math.max(maxValue,value.get());                

                   }        

                   context.write(key, new IntWritable(maxValue));                 

         } 

}

 

导出为.Jar文件

将项目导出为jar文件,注意选择MaxTemperatureDriver作为包含main的类。

运行MapReduce程序

请确保Hadoop相关服务已经启动。

准备数据文件:

我们假设在hdfs://localhost:9000/input目录下有4个数据文件,如下图:


其中,文件的内容格式如下:

1990 21

1990 18

1991 21

1992 30

1990 21

说明:一个文件包含多行数据,前4位为年份,第5位为空格,第6位起为对应的温度。

 

进入Hadoop安装目录下的bin目录,执行以下命令:

./hadoopjar ~/hadoop_jar/maxtemperature.jar hdfs://localhost:9000/input hdfs://localhost:9000/output/temperature

注意:

以上命令请在一行输入。

请确保jar文件路径正确。

 

通过命令行或者UI接口查看job的工作进度,如下图所示,job已成功完成。

 

最终结果如下图:

 

发生错误怎么办?

有时候,你会发现job被提交后一直处于pending状态。此时,应该检查所有的hadoop服务是否正常工作。运行jps命令查看hadoop相关服务,如下图:


请确保Namenode,DataNode,ResourceManager,NodeManager正常启动。如果发现有服务未启动,应该尝试重新启动服务,或者查看对应的log文件。比如某些配置错误会导致NodeManager服务在有job提交后因为发生异常而停止服务。

源代码

包含4个数据文件。

下载地址:http://download.youkuaiyun.com/detail/zythy/6735883


Hadoop2.6.0子项目hadoop-mapreduce-examples的简单介绍 学习Hadoop的同学们,一定知道如果运行Hadoop自带的各种例子。hadoop-mapreduce-examples项目中还提供了这些例子,本文就其中例子的执行方式进行分析。看看它能否让我们学习mapreduce编程变得更加容易。 阅读详情

相关推荐

告别手动翻页!用幻影联动+DLL调用,5分钟搞定通达信分时指标自动选股

本文详细介绍了如何利用幻影联动软件结合DLL调用技术,实现通达信分时指标的自动化选股。通过改造指标代码和配置幻影联动任务,用户可以在5分钟内完成从信号检测到自动报警的全流程,大幅提升短周期交易的效率和准确性。

weixin_42561040的博客 764

MapReduce详解

第1章 MapReduce入门 1.1 MapReduce定义 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。 Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。 1.2MapReduce优缺点 1.2.1 优点 1.MapReduce易于编......

优质后端技术知识记录 1万+

腾讯云TDSQL MySQL版 - 开发指南兼容性

语言结构 分布式实例支持所有 MySQL 使用的文字格式,包括: String Literals Numeric Literals Date and Time Literals Hexadecimal Literals Bit-Value Literals Boolean Literals NULL Values String Literals String Literals 是一个 bytes 或者 characters 的序列,两端被单引号'或者双引号"包围,TDSQL MySQL版

weixin_43872058的博客 909

MapReduce编程

一、MapReduce编程规范 MapReduce的开发一共又八个步骤,其中Map阶段分为2个步骤,Shuffle阶段4个步骤,Reduce阶段分为2个步骤。 1.1 步骤流程 Map阶段2个步骤 设置InputFormat类,将数据切分为key-value(k1和v1)对,输入到第二步; 自定义Map逻辑,将第一步的结果转换为另外的Key-Value(k2和v2)对,输出结果。 Shuffle阶段的4个步骤 对输出的Key-Value进行分区; 对不同分区的数据按照相同的Key排序; (可选)对

HeiSeXingYe的博客 3932

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用 最近在Pattern Recognition投出了一个文章,纯纯属于是第一次投稿,感觉自己写了一坨屎,事实是这确实也是一坨屎,现在是投了之后在等待一个拒稿的状态。 但是还是记录一下一些流程 1. 下载模板 在出版商Elsevier的栏目里有对于稿件的结构要求,也提供了Latex模板。同时,也给作者提供了Guides, 可以仔细阅读。下面这个连接咱们可以下载到Guides以及看到一些文章的要求。 https://ww

weixin_44153180的博客 3万+

华为防火墙USG6000V---内网访问外网---外网访问内网服务器(NAT服务器)示例配置

华为防火墙USG6000V示例配置,展示了访问防火墙、内网服务器、外网和外网访问内网服务器(NAT服务器)的配置。

lehe99的专栏 2万+

MapReduce工作流程原理,MapReduce程序运行模式

MapReduce工作流程原理 Map的输出 是key,value的 list Reduce的输入是key。value的list MapReduce核心思想 分而治之,先分后和(只有一个模型) Map负责数据拆分 map: [k1,v1] → [(k2,v2)] Reduce负责数据合并 reduce: [k2, {v2,…}] → [k3, v3] Mapreduce的输入是一个目录,那么...

7954

【无标题】EXCEL实现刷题

运用Excel开发的刷题工具,具有普遍实用性,可将WORD的试题自动导入并实现刷题。

weixin_44081794的博客 2971

Hadoop-MapReduce介绍和入门案例(超级详细)

07.6 HDFS其它功能论述.noteN.1 MapReduce定义1)Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析应用”的核心框架。 2)Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop集群上。3)MapReduce将计算过程分为两个阶段:Map和Reduce(1)Map阶段并行处理输入数据 (对数据进行切块)。(2)Reduce阶段对Map结果进行汇总(对数据进行合并)N

互联网知识分享 2203

kemeas算法继续优化——elkan kmeas算法

题记:又是凌晨3点的夜 elkan kmeans算法 在我的上一篇博客《kmeans算法性能改进_kmeans++算法+kmeans++优化算法+距离计算优化》中,在一般kmeans算法的基础上,添加了对于初始条件和距离计算更上的一些优化技巧。这篇博客聊一聊elkan算法,其实也是对于kmeans运行速度的优化算法。主要作用与kmeans的距离计算过程。 原理 假如我们已经知道任意两个样本之间的距离,再假设我们已经知道了样本1与聚类中心1之间的距离,根据三角性两边之和大于第三边,c+d>a,所以如果

铁血军的小博客 7065

华为OD机试双机位A卷 - 小明减肥 (C++ & Python & JAVA & JS & GO)

华为OD机试2025双机位A卷 小明减肥,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 706

【Hadoop】MapReduce详解

MapReduce详解MapReduce介绍MapReduce的基本编程模型MapReduce的计算过程1. Map阶段可以概括为5个步骤:2. Reduce节点也可以分为5个步骤:设置ReduceTask并行度(个数)关于分片(Split)关于ShuffleMap端的shuffleReduce端的ShuffleShuffle流程详解补充问题:MapReduce分区相关问题理解1.Partition的原理和作用2.Partition的使用3.分组的概念和使用分组排序的步骤4.Combiner的使用概念实现步

小哲的博客 9443

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 394

编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行

经过几天的折腾,终于配置好了Hadoop2.2.0(如何配置在Linux平台部署Hadoop请参见本博客《在Fedora上部署Hadoop2.2.0伪分布式平台》),今天主要来说说怎么在Hadoop2.2.0伪分布式上面运行我们写好的Mapreduce程序。先给出这个程序所依赖的Maven包:01020304050607080910111213141516171819202122

过往记忆大数据 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java mapreduce程序_编写简单的MapReduce程序(Hadoop2.2.0)

我们以简化版的气温统计为例,演示如何开发一个MapReduce程序。Eclipse中新建一个MapReduce项目,命名为MaxTemperature。源代码文件新建以下3个类文件,代码依次如下:MaxTemperatureDriver.javapackage com.oss.maxtemperature;importorg.apache.hadoop.conf.Configuration;imp...

weixin_39687881的博客 289

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

编写简单的MapReduce程序(Hadoop2.2.0)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34186128的博客 301

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hadoop-2.3.0学习(4)——第一个简单的mapreduce程序

要学习的第一个MapReduce当然是wordcount

welcome to my life 666

创建MapReduce程序,并在hadoop集群中运行

关键词: MapReduce, hadoop 2.6.0, intellij IDEA, Maven 1、在intellij IDEA下创建maven项目 2、引入hadoop相关jar包                     2.6.0

那些事 1521

Hadoop2.6.0: Intellij idea 结合Maven本地运行MapReduce程序 (无需搭载Hadoop和HDFS环境)

环境 JDK 1.8 Intellij Idea 2018.1 Hadoop 2.6.0 (本地未安装Hadoop) maven 3.5.4 创建word count项目 在idea 中新建maven java项目(配置maven jdk略) 配置pom依赖 pom.xml文件 <properties> <proje...

qq_654603797 756

MRunit 测试MapReduce 程序

使用MRunit 测试 MapReduce ,就比如我们写java 程序是的junit单元测试,其实,mrunit 和标准的junit框架一起使用,可以将mapreduce作业的测试作为正常开发环境的一部分运行。 准备测试的包:mrunit-1.1.0-hadoop2.jar ,下载地址;https://repository.apache.org/content/repositories/rele...

秋月丹青的博客 396

Apache Hadoop 0.23 MapReduce 2.0 (MRv2 or YARN) 介绍

管理和任务的调度与监视。这个想法创建一个全局的资源管理(global ResourceManager (RM))和为每个应用创建一个应用管理(ApplicationMaster (AM))。一个应用可以使一个MR jobs的经典场景或者是一串连续的jobs。   ResourceManager 和每个slave节点的NodeManager (NM)构成一个资源估算框架。ResourceManager 对在系统中所有应用的资源分配拥有最终的最高级别仲裁权。   实际上每个应用的ApplicationM

卤蛋爱编程 146

《深入理解Hadoop(原书第2版)》——3.3一个MapReduce程序的组成

本节书摘来自华章计算机《深入理解Hadoop(原书第2版)》一书中的第3章,第3.3节,作者 [美]萨米尔·瓦德卡(Sameer Wadkar),马杜·西德林埃(Madhu Siddalingaiah),杰森·文纳(Jason Venner),译 于博,冯傲风,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.3一个MapReduce程序的组成...

weixin_34205826的博客 149

【Hadoop入门学习系列之五】MapReduce 2.0编程实战

一.MapReduce2.0编程模型关于MR编程模型请参考上一篇:【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型二.MapReduce2.0编程接口三种编程方式Java(最原始的方式) Java编程接口组成; 旧API所在java包:org.apache.hadoop.mapred 新API所在java包 :org.apache.hadoop.map

生命奇迹泉的专栏 2428

Hadoop2.0 Mapreduce实例WordCount体验

在Hadoop2.0中MapReduce程序的都需要继承org.apache.hadoop.mapreduce.Mapper 和 org.apache.hadoop.mapreduce.Reducer这两个基础类,来定制自己的mapreduce功能,源码中主要的函数如下 Mapper.java public void run(Context context) throws IOExceptio

水上骑兵 8200
上一篇: 配置Hadoop开发环境(Eclipse)
下一篇: Hadoop 2.2.0词频统计(实现自定义的Partitioner和Combiner)
serven-star
博客等级 码龄19年 92粉丝 38原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值