3、MR开发入门

1、预先准备2个文件file1.txt和file2.txt。文件内容为网页上摘下,不具有代表性,只为举例。

file1.txt内容为:

With this setup, whenever you change the content of ambari-web files on the host machine, brunch will pick up changes in the background and update. Because of the symbolic link, the changes are automatically picked up by Ambari Server. All you have to do is hit refresh on the browser to see the frontend code changes reflected.
Not seeing code changes as expected? If you have run the maven command to build Ambari previously, you will see files called app.js.gz and vendor.js.gz under the public folder. You need to delete these files for the frontend code changes to be effective, as the app.js.gz and vendor.js.gz files take precedence over app.js and vendor.js, respectively.

file2.txt内容为:

Apache Eagle (incubating) is a highly extensible, scalable monitoring and alerting platform, designed with its flexible application framework and proven big data technologies, such as Kafka, Spark and Storm. It ships a rich set of applications for big data platform monitoring, service health check, JMX metrics, daemon logs, audit logs and yarn applications. External Eagle developers can define applications to monitoring their NoSQLs or Web Servers, and publish to Eagle application repository at your own discretion. It also provides the state-of-art alert engine to report security breaches, service failures, and application anomalies, highly customizable by the alert policy definition.

并将它们传到hdfs中。

hadoop fs -put ~/file* /user/input/

2、使用Eclipse创建一个Java工程

3、导入Hadoop的Jar文件:

将集群中HADOOP_HOME/share/hadoop/目录下的jar包down下来,放到项目新建文件来个lib中,然后把lib目录下的Jar包加入到classpath中。

4、导入Hadoop的配置文件:

将HADOOP_HOME/etc/hadoop/目录下的core-site.xml、hdfs-site.xml、mapper-site.xml、yarn-site.xml文件down下,放到src目录下。

5、MR代码实现

1)、WordMapper类实现

WordMapper.java

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f76cb }
span.s1 { color: #931a68 }
span.s2 { color: #0326cc }
span.s3 { color: #000000 }
span.s4 { color: #9293af }
span.s5 { color: #7e504f }
span.Apple-tab-span { white-space: pre }

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

public class WordMapper extends Mapper<Object, Text, Text, IntWritable> {

private final static IntWritable one=new IntWritable(1);

private Text word=new Text();

/**

* 把字符串解析成Key-Value形式,发给Reduce来统计

* key 每行文件的偏移量

* value 每行文件的内容

* context map的上下文

*/

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

StringTokenizer st=new StringTokenizer(value.toString());

while(st.hasMoreTokens()){

word.set(st.nextToken());

context.write(word, one);

}

}

}

2)、WordReducer类实现

WordReducer.java

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f76cb }
span.s1 { color: #931a68 }
span.s2 { color: #0326cc }
span.s3 { color: #000000 }
span.s4 { color: #9293af }
span.s5 { color: #7e504f }
span.Apple-tab-span { white-space: pre }

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

public class WordReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

private IntWritable result=new IntWritable();

/**

* 获取map方法的Key-Value结果,相同的Key发送到同一个reduce里处理,

* 然后迭代Key,把Value相加,结果写到HDFS

* key  map端输出的key

* values  map端输出的集合

* context  reduce端的上下文

*/

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);

}

}

3)、WordMain驱动类实现:

WordMain.java

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f76cb }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #3933ff }
span.s1 { color: #931a68 }
span.s2 { color: #91afcb }
span.s3 { text-decoration: underline }
span.s4 { color: #7e504f }
span.s5 { color: #0326cc }
span.s6 { color: #000000 }
span.s7 { text-decoration: underline line-through }
span.s8 { text-decoration: underline; color: #7e504f }
span.s9 { text-decoration: underline; color: #3933ff }
span.s10 { color: #4e9072 }
span.s11 { text-decoration: underline; color: #4e9072 }
span.Apple-tab-span { white-space: pre }

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

/**

* 驱动类,用来启动了个MR作业

* @author liudebin

*

*/

public class WordMain {

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

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(WordMain.class);//主类

job.setMapperClass(WordMapper.class);//Mapper

job.setCombinerClass(WordReducer.class);//作业合成类

job.setReducerClass(WordReducer.class);//Reducer

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);//等待完成退出

}

}

6、打包、部署和运行

在集群中的Master节点部署打包后的JAR文件,Hadoop会自己把任务传送到各个Slave

1)、打包JAR文件,将项目export成Jar文件。注意,不要export  lib目录下的文件,因为集群环境已经有这些文件。

2)、将打包好的文件上传到集群的Master节点,并运行如下命令:

hadoop jar wordcount.jar com.upit.mr.op.WordMain /user/input/file* /user/output

注意:如果想要在Eclipse下直接运行程序,需要在Eclipse中添加hadoop的插件,并配置。

时间: 2024-10-12 16:17:29

3、MR开发入门的相关文章

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

ArcGIS API for Silverlight开发入门准备

原文:ArcGIS API for Silverlight开发入门准备 微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich Internet Application). ArcGIS API for Silverlight 能够让的Silverlight应用程序具有集成ArcGIS Server.ESRI MapIt和Bing Maps服务的能力.利用 ArcGIS Server 和Bing Maps资源,比如说Maps.Loca

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

Android Wear 开发入门

大家好,我是陆嘉杰,我是一名Android开发者.我想和大家进行一些技术交流,希望越来越多的人能和我成为好朋友. 大家都知道,智能手表是下一个开发的风口,而这方面的技术又属于前沿,所以和大家分享下Android Wear的开发流程. 首先,我推荐大家使用Android Studio来进行Wear的开发,这也是谷歌推荐的,本次讲授过程也将以Android Studio作为开发集成环境进行. 下面我们来创建Android Wear项目. 请注意,Android Wear项目中同时包含mobile和w

UWP开发入门(一)——SplitView

接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先SplitView是Win10 UWP新增的控件,以前虽然可以通过DockPanel模拟出类似的效果,但又哪里及得上M$原生支持的SplitView快捷方便呢. 至于为什么说SplitView适合顶层导航,可以参考目前尚为数不多的UWP APP,比如微博.QQ和网易等Win10 APP,基本都是通过S

安卓开发入门教程全-PopupWindow用法大全

都是一群技术宅,先给大家说一个严酷的现实吧,现在是6月份,多少人顶着大太阳在找工作,现在我们既然有不错的工作或者想通过安卓学好的,我都希望每一个人去实践,就像Android开发入门QQ群:175229978很多人一样,肯去敲代码,不嫌弃麻烦. 首先给大家介绍安卓PopupWindow,不要嫌弃我讲解的有些详细. Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于:AlertDialog的位置固定,而PopupWindow的位置可以随意AlertDial

Unity3D技术之本地客户端开发入门

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 本地客户端开发入门 本地客户端 (NaCl) 是 Google 提供的新技术,其允许您在 Web 页面嵌入本地可执行代码,以便您在无需安装插件的情况下部署性能非常强的 web 应用程序.目前,NaCl 仅支持在 Windows.Mac OS X 和 Linux(含可用的 Chrome 操作系统支

iOS开发入门教程_iOS开发视频教程

iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL)适合人群:初级课时数量:34课时用到技术:IOS,Object-C,OpenGL,XCode,Cocos 2D涉及项目:Cocos+2D.Game Kit蓝牙数据处理等咨询QQ:1840215592 iOS开发入门教程详细查看:http://www.ibeifeng.com/goods-471.html1.1.课程目标iOS开发入门教程内容的目标是初学者入门,让入门者提高,让所有人符合企业招聘的