[b0013] Hadoop 版hello word mapreduce wordcount 运行(三)
目的:
不用任何IDE,直接在linux 下输入代码、调试执行
环境:
Linux Ubuntu
Hadoop 2.6.4
相关:
[b0012] Hadoop 版hello word mapreduce wordcount 运行(二)
最佳:
简单方式:
在当前目录创建类文件,添加后面的内容,但是不包括第一行package
编译:
- javac WordCount.java
打包
- jar -cvf WordCount.jar ./WordCount*.class
执行
- hadoop jar WordCount.jar WordCount /input /output
这种方式不能加package,如果加了package,即使最后一步这样也测试不通过 hadoop jar WordCount.jar 包路径.WordCount /input /output
加package的只能用本文后面的方法
1、准备程序
linux 新建工程文件夹
word, word/src, word/classes
在src下 新建类文件 WordCount.java,添加如下代码,注意第一行的包名,后面用到
- package hadoop.mapr;
- import java.io.IOException;
- import java.util.*;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.conf.*;
- import org.apache.hadoop.io.*;
- import org.apache.hadoop.mapreduce.*;
- import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
- import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
- import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
- import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
- /**
- * 描述:WordCount explains by xxm
- * @author xxm
- */
- public class WordCount {
- /**
- * Map类:自己定义map方法
- */
- public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
- /**
- * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类
- * 都能够被串行化从而便于在分布式环境中进行数据交换,可以将它们分别视为long,int,String 的替代品。
- */
- private final static IntWritable one = new IntWritable(1);
- private Text word = new Text();
- /**
- * Mapper类中的map方法:
- * protected void map(KEYIN key, VALUEIN value, Context context)
- * 映射一个单个的输入k/v对到一个中间的k/v对
- * Context类:收集Mapper输出的<k,v>对。
- */
- public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
- String line = value.toString();
- StringTokenizer tokenizer = new StringTokenizer(line);
- while (tokenizer.hasMoreTokens()) {
- word.set(tokenizer.nextToken());
- context.write(word, one);
- }
- }
- }
- /**
- * Reduce类:自己定义reduce方法
- */
- public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
- /**
- * Reducer类中的reduce方法:
- * protected void reduce(KEYIN key, Interable<VALUEIN> value, Context context)
- * 映射一个单个的输入k/v对到一个中间的k/v对
- * Context类:收集Reducer输出的<k,v>对。
- */
- public void reduce(Text key, Iterable<IntWritable> values, Context context)
- throws IOException, InterruptedException {
- int sum = 0;
- for (IntWritable val : values) {
- sum += val.get();
- }
- context.write(key, new IntWritable(sum));
- }
- }
- /**
- * main主函数
- */
- public static void main(String[] args) throws Exception {
- Configuration conf = new Configuration();//创建一个配置对象,用来实现所有配置
- // conf.set("fs.defaultFS", "hdfs://ssmaster:9000/");
- Job job = new Job(conf, "wordcount");//新建一个job,并定义名称
- job.setOutputKeyClass(Text.class);//为job的输出数据设置Key类
- job.setOutputValueClass(IntWritable.class);//为job输出设置value类
- job.setMapperClass(Map.class); //为job设置Mapper类
- job.setReducerClass(Reduce.class);//为job设置Reduce类
- job.setJarByClass(WordCount.class);
- job.setInputFormatClass(TextInputFormat.class);//为map-reduce任务设置InputFormat实现类
- job.setOutputFormatClass(TextOutputFormat.class);//为map-reduce任务设置OutputFormat实现类
- FileInputFormat.addInputPath(job, new Path(args[0]));//为map-reduce job设置输入路径
- FileOutputFormat.setOutputPath(job, new Path(args[1]));//为map-reduce job设置输出路径
- job.waitForCompletion(true); //运行一个job,并等待其结束
- }
- }
2 编译、打包 Hadoop MapReduce 程序
2.1 我们将 Hadoop 的 classhpath 信息添加到 CLASSPATH 变量中,在 /etc/profile 中增加 hadoop classpath的类包,source /etc/profile 生效
- export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
2.2 切换到word目录,执行命令编译
- javac -d classes src/*.java
- -classpath,设置源代码里使用的各种类库所在的路径,多个路径用
":"
隔开。 - -d,设置编译后的 class 文件保存的路径。
- src/*.java,待编译的源文件。
备注:如果没有配置hadoop classpath路径,执行方式 javac -classpath 依赖hadoop包.jar -d classes src/*.java
执行结果:在classes文件夹 创建 hadoop/mapr,这是类的包名,产生的类有
- hadoop@ssmaster:~/java_program/word$ ls classes/hadoop/mapr/
- WordCount.class WordCount$Map.class WordCount$Reduce.class
2.3 将类文件夹classes打包到word目录
- jar -cvf WordCount.jar classes
- hadoop@ssmaster:~/java_program/word$ ls
- classes src WordCount.jar
3 执行
启动hadoop,准备/input,确保没有/output
执行命令,由于类中有包名,这里要加上
hadoop jar WordCount.jar hadoop.mapr.WordCount /input /output
会启动成功。 但是我的这里有什么异常,导致Hadoop集群退出 [遗留:运维重大问题]
总结:
hadoop mapreduce,hdfs的开发环境基本了解差不多
后续:
重点学习hdfs,mapreduce的任务编程
参考:
[b0013] Hadoop 版hello word mapreduce wordcount 运行(三)的更多相关文章
- [b0012] Hadoop 版hello word mapreduce wordcount 运行(二)
目的: 学习Hadoop mapreduce 开发环境eclipse windows下的搭建 环境: Winows 7 64 eclipse 直接连接hadoop运行的环境已经搭建好,结果输出到ecl ...
- [b0004] Hadoop 版hello word mapreduce wordcount 运行
目的: 初步感受一下hadoop mapreduce 环境: hadoop 2.6.4 1 准备输入文件 paper.txt 内容一般为英文文章,随便弄点什么进去 hadoop@ssmaster:~$ ...
- Hadoop版Helloworld之wordcount运行示例
1.编写一个统计单词数量的java程序,并命名为wordcount.java,代码如下: import java.io.IOException; import java.util.StringToke ...
- Hadoop集群WordCount运行详解(转)
原文链接:Hadoop集群(第6期)_WordCount运行详解 1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对 ...
- hadoop 2.7.3本地环境运行官方wordcount
hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...
- Hadoop学习历程(四、运行一个真正的MapReduce程序)
上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...
- (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一. 需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...
- hadoop笔记之MapReduce的运行流程
MapReduce的运行流程 MapReduce的运行流程 基本概念: Job&Task:要完成一个作业(Job),就要分成很多个Task,Task又分为MapTask和ReduceTask ...
- Hadoop(六)MapReduce的入门与运行原理
一 MapReduce入门 1.1 MapReduce定义 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架: Mapreduce核心功能是将用 ...
随机推荐
- MongoDB安装调试
1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该 ...
- [视频教程] 基于redis的消息队列实现与思考
使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它.在公司项目中正好有个场景使用到了消息队列,因此就来说一下流程.在web界面上有个功能是群发邮 ...
- openresty配置
目录 环境 wsl安装 openresty安装 openssl版本问题 Lua模块安装 openresty使用 nginx常用命令 nginx.conf 配置 lua 的一些坑 OpenResty缓存 ...
- react解析markdown文件
当当当又get到了一个新技能,使用react-markdown来直接解析markdown文件(咳咳,小菜鸟的自娱自乐) 项目中遇到了一个API的那种展示方式,类似于入门手册啥的那种,如果是一个个调用接 ...
- 1.Python爬虫入门_urllib
#2019-11-22 import urllib.request #Pthon自带的网络连接库 import gzip #解压缩库 #程序入口 if __name__=='__main__': #u ...
- 字符设备驱动程序之poll机制(韦大仙)
明确为什么要引用poll机制? while(1) { read(fd,&key_val,1);//如果没有按键按下,它会一直在等待.现在想做这么一件事情:如果5s后,没有按键按下,它就会返回. ...
- leetcode 树类问题
208. Implement Trie (Prefix Tree) 子节点个数对应的是数组
- luoguP5227 [AHOI2013]连通图(线性基做法)
题意 神仙哈希做法. 随便找个生成树,给每个非树边赋一个值,树边的值为所有覆盖它的边的值得异或和. 删去边集使得图不联通当且即当边集存在一个子集异或和为0,可以用线性基. 证明的话好像画个图挺显然的 ...
- Jike_Time-决策树
根节点 非叶子节点(决策点) 叶子节点(决策结果) 分支 熵代表混乱程度 信息增益 构造树的基本想法是随着树深度的增加.节点的熵迅速地降低.熵降低的速度越快越好,这样我们有望得到一颗高度最矮的决策树 ...
- 考试总结T2(接上次整的T1)
首先说一句,树的每个元素的名称的问题,(那个叫jie点的东西) 具体是节点还是结点...baidu百科写的是结点... 本文章将不考虑到底这俩字怎么写...所以两种都可能出现 T2描述: 扶苏翻遍了歌 ...