目的:

不用任何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 运行(三)的更多相关文章

  1. [b0012] Hadoop 版hello word mapreduce wordcount 运行(二)

    目的: 学习Hadoop mapreduce 开发环境eclipse windows下的搭建 环境: Winows 7 64 eclipse 直接连接hadoop运行的环境已经搭建好,结果输出到ecl ...

  2. [b0004] Hadoop 版hello word mapreduce wordcount 运行

    目的: 初步感受一下hadoop mapreduce 环境: hadoop 2.6.4 1 准备输入文件 paper.txt 内容一般为英文文章,随便弄点什么进去 hadoop@ssmaster:~$ ...

  3. Hadoop版Helloworld之wordcount运行示例

    1.编写一个统计单词数量的java程序,并命名为wordcount.java,代码如下: import java.io.IOException; import java.util.StringToke ...

  4. Hadoop集群WordCount运行详解(转)

    原文链接:Hadoop集群(第6期)_WordCount运行详解 1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对 ...

  5. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  6. Hadoop学习历程(四、运行一个真正的MapReduce程序)

    上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...

  7. (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

    配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...

  8. hadoop笔记之MapReduce的运行流程

    MapReduce的运行流程 MapReduce的运行流程 基本概念: Job&Task:要完成一个作业(Job),就要分成很多个Task,Task又分为MapTask和ReduceTask ...

  9. Hadoop(六)MapReduce的入门与运行原理

    一 MapReduce入门 1.1 MapReduce定义 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架: Mapreduce核心功能是将用 ...

随机推荐

  1. BayaiM__Oracle ASM操作管理

    BayaiM__Oracle ASM操作管理   BayaiM__Oracle ASM操作管理                                                      ...

  2. emacs 帮助相关命令

    emacs 帮助相关命令 如下表: No. 键盘操作 键盘操作对应的函数 回答的问题 01 ctrl-h c describe-key-briefly 这个按键组合将运行哪个函数 02 ctrl-h ...

  3. fiddler设置https抓包

    代理端口设置:127.0.0.1:8888 https抓包设置 模拟post请求: http://xxx.xxxx.com/portal/login.htm Cookie: xxxx account= ...

  4. [C4] 前馈神经网络(Feedforward Neural Network)

    前馈神经网络(Feedforward Neural Network - BP) 常见的前馈神经网络 感知器网络 感知器(又叫感知机)是最简单的前馈网络,它主要用于模式分类,也可用在基于模式分类的学习控 ...

  5. CF757F Team Rocket Rises Again

    题意 建出最短路图(DAG)之后就跟这题一样了. code: #include<bits/stdc++.h> using namespace std; #define int long l ...

  6. Paper | Compression artifacts reduction by a deep convolutional network

    目录 1. 故事 2. 方法 3. 实验 这是继SRCNN(超分辨)之后,作者将CNN的战火又烧到了去压缩失真上.我们看看这篇文章有什么至今仍有启发的故事. 贡献: ARCNN. 讨论了low-lev ...

  7. mysql不是内部或外部命令--windows环境下报错的解决

    安装Mysql后,当我们在cmd中敲入mysql时会出现‘Mysql’不是内部或外部命令,也不是可运行的程序或其处理文件. 处理: 我的电脑右键属性>高级系统设置>高级>环境变量&g ...

  8. linux中dd命令详解

    本文转自:https://www.cnblogs.com/yuanqiangfei/p/9138625.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. ...

  9. 按照官网的升级完socket.io报错Manager is being released。

    查阅了很多资料和英文官网自己也提出了一些问题,估计官网以前有该类的问题历史,懒得回复. 终于功夫不负有心人原因竟然是:你的manager被释放了. you need to make sure the ...

  10. redis命令之 ----key(键)

    DEL DEL key [key ...] 删除给定的一个或多个 key . 不存在的 key 会被忽略. DUMP DUMP key 序列化给定 key ,并返回被序列化的值,使用 RESTORE  ...