13-hadoop-入门程序
通过之前的操作,
http://www.cnblogs.com/wenbronk/p/6636926.html
http://www.cnblogs.com/wenbronk/p/6659481.html
hadoop-HA的集群已经搭建完成了, 需要写个小程序来认识下hadoop了
统计文本文件中, 每个单词出现的次数
1, Eclipse下新建Java-project
2, 新建lib文件, 导入jar包, 并buildpath
hadoop-2.5.\share\hadoop\common 所有jar,
hadoop-2.5.\share\hadoop\common\lib 所有jar, hadoop-2.5.\share\hadoop\hdfs 所有jar
hadoop-2.5.\share\hadoop\mapreduce 所有jar
hadoop-2.5.\share\hadoop\yarn 所有jar
3, Mapper类: WordCountMapper.java
package com.wenbronk.mapreduce; import java.io.IOException; import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; /**
* 测试mapreduce, 计算单词出现的次数
* @author wenbronk
* KEYIN: split的键, 行坐在的下标
* VALUEIN: split的值, 行值
* KEYOUT: 需求, 输出给reduce
* VALUEOUT: 需求, 输出给reduce
*/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { /**
* 重写map方法, 循环调用
* 从split中读取一行调用一次, 以行所在下标为key, 行内容为value
*/
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException { // text 转string, toString(), 使用空格分隔为单词数组
String[] words = StringUtils.split(value.toString(), ' ');
for (String word : words) {
// 键值对输出, 输出给reduce
context.write(new Text(word), new IntWritable());
} } }
4, Reduce类, WordCountReduce.java
package com.wenbronk.mapreduce; import java.io.IOException; import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; /**
* shuffling 后传给 reduce
* @author wenbronk
* KEYIN: mapper的输出
* VALUEIN: mapper的输出
*/
public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{ /**
* 循环调用
* 每组调用一次, key相同, value可能多个, 使用迭代器
*/
@Override
protected void reduce(Text arg0, Iterable<IntWritable> arg1,
Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
// 对值进行累加
int sum = ;
// 使用迭代器
for (IntWritable value : arg1) {
sum += value.get();
}
// 使用context输出
context.write(arg0 , new IntWritable(sum));
} }
5, 然后是具体的执行类: RunMapReduce.java
package com.wenbronk.mapreduce; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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; /**
* 执行mapreduce
* 统计单词出新的次数
* @author wenbr
*
*/
public class RunMapReduce { public static void main(String[] args) throws Exception {
// 初始化时加载src或classpath下所有的hadoop配置文件
Configuration configuration = new Configuration(); // 得到执行的任务
Job job = Job.getInstance(config); // 入口类
job.setJarByClass(RunMapReduce.class); // job名字
job.setJobName("wordCount"); // job执行是map执行的类
job.setMapperClass(WordCountMapper.class); // job执行的reduce类
job.setReducerClass(WordCountReduce.class); // job输出的键类型
job.setMapOutputKeyClass(Text.class); // job输出的value类型
job.setMapOutputValueClass(IntWritable.class); //**** 使用插件上传data.txt到hdfs/root/usr/data.txt // 使用文件
FileInputFormat.addInputPath(job, new Path("/root/usr/")); // 使用一个不存在的目录进行
Path path = new Path("/root/usr/output");
// 如果存在删除
FileSystem fs = FileSystem.get(configuration);
if (fs.exists(path)) {
fs.delete(path, true);
} // 输出
FileOutputFormat.setOutputPath(job, path); boolean forCompletion = job.waitForCompletion(true); if (forCompletion) {
System.out.println("success");
}
} }
所有的类编写好了, 接下来是上传文件
6, 使用eclipse插件上传data.txt到hadoop目录 /usr/data.txt
我是用的插件为:
7, 运行
这儿使用直接发布到服务器运行的方式
eclipse打包项目成jar包(只需要源码即可), 然后上传到服务器目录下, 使用hadoop命令执行
格式: hadoop jar jar路径 类全限定名
hadoop jar wc.jar com.wenbronk.mapreduce.RunMapReduce
之后在hadoop的目录下就可以看到统计后输出的文件了
13-hadoop-入门程序的更多相关文章
- Hadoop入门程序WordCount的执行过程
首先编写WordCount.java源文件,分别通过map和reduce方法统计文本中每个单词出现的次数,然后按照字母的顺序排列输出, Map过程首先是多个map并行提取多个句子里面的单词然后分别列出 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- 使用Python实现Hadoop MapReduce程序
转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...
- 采用ToolRunner执行Hadoop基本面分析程序
为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...
- Maven01——简介、安装配置、入门程序、项目构建和依赖管理
1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse maven量级 1.2 Maven好处 同 ...
- 大数据:Hadoop入门
大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...
随机推荐
- hdu 5045 N个人做M道题的正确率
http://acm.hdu.edu.cn/showproblem.php?pid=5045 给出N个人做M道题的正确率,每道题只能由一个人做出,并且当所有人都做出来且仅做出一道题时,做过题的人才可以 ...
- GoF设计模式学习-单例模式
1.目的 控制实例的个数,类设计者应该保证只有一个实例,不能将此责任[只有一个实例]强制交给类使用者. 2.整体实现 1.单线程单例模式的实现. using System; using System. ...
- Android-Java-Thread start run的区别
Thread start(Thread子类.start(); 这样属于开启新的线程,不属于方法调用) Thread.currentThread().getName(); 获取当前正在运行的线程执行路径 ...
- Jesery客户端工具类
public class JerseyClientUtil { public static<T> T sendMsg(String url,Object object,Class<T ...
- 如何连接MSSQLSERVER2014(其他版本数据库大体相同)
购买了服务器后我在上面安装了SqlServer2014,但是程序中总是远程连接不上,特此记录一下: 一.一些基本设置如下链接: 转载自:https://blog.sun0816.com/20381.h ...
- MessageBox实现自动延时关闭
1,首先新建一个winform窗体:MessageForm,设置StartPosition属性为Manual,Location属性值-500, -500 主要是为了让MessageForm窗体不显示在 ...
- 初识GitHub与Git
在初次接触GitHub的时候,英语渣渣本渣真是深感无奈啊..... ORZ 在好友的帮助下,也算是初步入门了吧. 谨以此文作为初级使用手册记录,希望能帮助到你. 一.首先要申请一个GitHub账户 二 ...
- C# 动态生成Html地图文件
public void GPSModel(string x, string y, string ss)//动态地图文件 { if (x.Contains("-") &&am ...
- disruptor调优方法
翻译自disruptor在github上的文档,https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started Basic Tuning ...
- ASP.NET Core获取客户端IP地址
1.在ConfigureServices注入IHttpContextAccessor // ASP.NET Core 2.1的注入方式 //services.AddHttpContextAccesso ...