Hadoop MapReduce示例程序WordCount.java手动编译运行解析

WordCount.java

vi WordCount.java

import java.io.IOException;
import java.util.StringTokenizer;  

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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;  

public class WordCount {  

  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{  

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

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }  

  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();  

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

  public static void main(String[] args) throws Exception {
    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(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    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);
  }
}

编译

建立保存生成的编译后的class文件的文件夹wordcount_classes

mkdir ~/wordcount_classes

需要指定编译依赖的jar包,中间用冒号隔开

javac -classpath /usr/lib/hadoop-0.20/hadoop-core-0.20.2-cdh3u6.jar:/usr/lib/hadoop-0.20/lib/commons-cli-1.2.jar -d wordcount_classes WordCount.java

打包

jar -cvf WordCount.jar -C wordcount_classes/ .

运行

hadoop jar ~/WordCount.jar WordCount input output

input对应hdfs://user/root/input文件夹,output是结果输出的文件夹,必须是原来不存在的,否则将运行不成功,output将生成在/user/root/ouput位置。

结果

root@bjidss46:~# hadoop jar WordCount.jar WordCount input output
13/11/20 16:10:07 INFO input.FileInputFormat: Total input paths to process : 1
13/11/20 16:10:07 WARN snappy.LoadSnappy: Snappy native library is available
13/11/20 16:10:07 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/11/20 16:10:07 INFO snappy.LoadSnappy: Snappy native library loaded
13/11/20 16:10:07 INFO mapred.JobClient: Running job: job_201311201528_0008
13/11/20 16:10:08 INFO mapred.JobClient:  map 0% reduce 0%
13/11/20 16:10:12 INFO mapred.JobClient:  map 100% reduce 0%
13/11/20 16:10:16 INFO mapred.JobClient:  map 100% reduce 100%
13/11/20 16:10:16 INFO mapred.JobClient: Job complete: job_201311201528_0008
13/11/20 16:10:16 INFO mapred.JobClient: Counters: 26
13/11/20 16:10:16 INFO mapred.JobClient:   Job Counters
13/11/20 16:10:16 INFO mapred.JobClient:     Launched reduce tasks=1
13/11/20 16:10:16 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=4473
13/11/20 16:10:16 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/11/20 16:10:16 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/11/20 16:10:16 INFO mapred.JobClient:     Launched map tasks=1
13/11/20 16:10:16 INFO mapred.JobClient:     Data-local map tasks=1
13/11/20 16:10:16 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=3523
13/11/20 16:10:16 INFO mapred.JobClient:   FileSystemCounters
13/11/20 16:10:16 INFO mapred.JobClient:     FILE_BYTES_READ=57
13/11/20 16:10:16 INFO mapred.JobClient:     HDFS_BYTES_READ=138
13/11/20 16:10:16 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=105460
13/11/20 16:10:16 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=35
13/11/20 16:10:16 INFO mapred.JobClient:   Map-Reduce Framework
13/11/20 16:10:16 INFO mapred.JobClient:     Map input records=1
13/11/20 16:10:16 INFO mapred.JobClient:     Reduce shuffle bytes=57
13/11/20 16:10:16 INFO mapred.JobClient:     Spilled Records=8
13/11/20 16:10:16 INFO mapred.JobClient:     Map output bytes=43
13/11/20 16:10:16 INFO mapred.JobClient:     CPU time spent (ms)=1530
13/11/20 16:10:16 INFO mapred.JobClient:     Total committed heap usage (bytes)=504758272
13/11/20 16:10:16 INFO mapred.JobClient:     Combine input records=4
13/11/20 16:10:16 INFO mapred.JobClient:     SPLIT_RAW_BYTES=111
13/11/20 16:10:16 INFO mapred.JobClient:     Reduce input records=4
13/11/20 16:10:16 INFO mapred.JobClient:     Reduce input groups=4
13/11/20 16:10:16 INFO mapred.JobClient:     Combine output records=4
13/11/20 16:10:16 INFO mapred.JobClient:     Physical memory (bytes) snapshot=334163968
13/11/20 16:10:16 INFO mapred.JobClient:     Reduce output records=4
13/11/20 16:10:16 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=2914021376
13/11/20 16:10:16 INFO mapred.JobClient:     Map output records=4

总结

之所以使用原始的javac方式编译执行是为了更了解mapreduce的流程,使用eclipse的时候导出jar请不要将依赖的诸多jar包一起打包,只需要hadoop-core-0.20.2-cdh3u6.jar和/usr/lib/hadoop-0.20/lib/commons-cli-1.2.jar即可。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop
, 11
, 10
, snappy
, mapred
, hadoop eclipse jar
, java 解析 word
, hadoop编译
, 16
info
mapreduce代码示例、mapreduce示例、hadoop mapreduce、hadoop mapreduce原理、hadoop mapreduce实例,以便于您获取更多的相关知识。

时间: 2024-09-07 18:20:26

Hadoop MapReduce示例程序WordCount.java手动编译运行解析的相关文章

《R与Hadoop大数据分析实战》一2.4 编写Hadoop MapReduce示例程序

2.4 编写Hadoop MapReduce示例程序 现在要通过一个很简单且普通的单词统计(word count)来学习MapReduce.该例子的目标是统计每个单词在文章中出现的次数.这些文章作为MapReduce的输入文件. 在该例中,已经准备了一些文本文件,我们希望计算所有单词在这些文件中出现的频率.我们通过Hadoop MapReduce来进行设计. 本节中,将使用旧版API接口学习Hadoop MapReduce编程.假设读者已经配置了Hadoop的环境变量(请参考第1章的内容).同时

Hadoop MapReduce 官方教程 -- WordCount示例

Hadoop MapReduce 官方教程 -- WordCount示例: http://hadoop.apache.org/docs/r1.0.4/cn/mapred_tutorial.html#%E4%BE%8B%E5%AD%90%EF%BC%9AWordCount+v1.0

Hadoop MapReduce如何进行WordCount自主编译运行

上次我们已经搭建了Hadoop的伪分布式环境,并且运行了一下Hadoop自带的例子–WordCount程序,展现良好.但是大多数时候还是得自己写程序,编译,打包,然后运行的,所以做一次自编译打包运行的实验. 编辑程序 在Eclipse或者NetBeans中编辑WordCount.java程序,用IDE的好处就是我们可以更方便的选择各种依赖的jar包,并且它会帮我们编译好,我们只需要去workspace中拿出class文件打包就好了,或者直接打包就行.而不用在命令行输入很多依赖jar包去打包,这样

hadoop MapReduce示例

之前记录了hadoop的安装配置,今天记录以下hadoop+eclipse集成环境的配置,流程就不写了,主要记录一些问题. 1.首先要编译hadoop的eclipse插件,也可以直接到网上下hadoop-eclipse-plugin1.1.0.jar.然后将此包复制到eclipse的plugins文件夹下. 2.重启eclipse,选择Window->Preference->Hadoop Map/Reduce,填写你的hadoop安装目录. 3.配置Map/Reduce Location,Wi

如何保护Java程序 防止Java反编译

Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名.方法名等.因此,Java中间代码的反编译就变得非常容易.目前市场上有许多免费的.商用的反编译软件,都能够生成高质量的反编译后的源代码.所以,对开发人员来说,如何保护Java程序就变成了一个非常重要的挑战.本文首先讨论了保护Java程序的基本方法,然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序,分

《R与Hadoop大数据分析实战》一第2章 编写Hadoop MapReduce程序

第2章 编写Hadoop MapReduce程序 在第1章中,我们学习了如何搭建R和Hadoop开发环境.既然我们对大数据分析感兴趣,接下来就学习如何使用Hadoop MapReduce进行大数据处理.在本章中,我们要讨论MapReduce的基础概念,为何它是不可或缺的,以及如何在Apache Hadoop上进行MapReduce编程等内容.本章节将会涉及如下内容:MapReduce基础概念Hadoop MapReduce技术Hadoop MapReduce原理编写Hadoop MapReduc

一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序

一:序列化概念 序列化(Serialization)是指把结构化对象转化为字节流.反序列化(Deserialization)是序列化的逆过程.即把字节流转回结构化对象.Java序列化(java.io.Serializable) 二:Hadoop序列化的特点 (1):序列化格式特点: 紧凑:高效使用存储空间. 快速:读写数据的额外开销小. 可扩展:可透明地读取老格式的数据. 互操作:支持多语言的交互. (2):Hadoop的序列化格式:Writable接口 三:Hadoop序列化的作用: (1):

hadoop mapreduce 在编写好的程序下 运行程序出现错误,求错误所在

问题描述 hadoop mapreduce 在编写好的程序下 运行程序出现错误,求错误所在 15/09/01 10:05:06 INFO mapred.JobClient: map 0% reduce 0% 15/09/01 10:05:22 INFO mapred.JobClient: Task Id : attempt_201509011003_0001_m_000002_0, Status : FAILED java.util.NoSuchElementException at java.

《Hadoop MapReduce实战手册》一导读

前 言 Hadoop MapReduce实战手册 本书目标是帮助读者学会处理大型的复杂数据集.本书虽从简单的例子开始,但仍然可以看到深入的内容.这是一本简单的一站式指南,传授如何完成复杂的事情.它以一种简单而直接的方式呈现了90个攻略,给出了一步步的指导和真实环境的应用示例. 本产品包括在Apache软件基金会(http://www.apache.org/)开发的软件. 本书涵盖的内容 第1章解释了如何以单点模式以及集群模式安装和运行Hadoop. 第2章介绍了一套高级的HDFS操作,在处理大规