博客
关于我
MapReduce程序(一)——wordCount
阅读量:799 次
发布时间:2023-02-07

本文共 3713 字,大约阅读时间需要 12 分钟。

Hadoop MapReduce WordCount程序开发与运行

本文将详细介绍基于Hadoop MapReduce的WordCount程序的开发与运行过程,包括程序设计、打包运行以及在Hadoop集群上运行的实际操作步骤。

1. MapReduce之WordCount的计算模型

1.1 WordCount的Map过程

在MapReduce的WordCount程序中,Map阶段的主要任务是将输入的文本文件按行分割,并将每行文本拆分成单词。具体来说,TokenizerMapper类通过StringTokenizer将每行文本按空格或其他分隔符分割成单词,并将每个单词及其计数(默认为1)作为Map任务的输出。

此外,Map任务会对输出的键值对进行排序,并执行Combine过程,将相同单词的计数值累加。这样可以确保Combine任务能够接收到有序且连续的键值对,从而提高效率。

1.2 WordCount的Reduce过程

Reduce阶段的主要任务是对Map阶段输出的有序键值对进行处理。IntSumReducer类会接收所有以相同单词为键的计数值,并将它们相加,得到该单词在整个文本中的总出现次数。

Reduce任务的输出即为最终的WordCount结果,键为单词,值为单词出现的总次数。

2. 打包运行WordCount程序

2.1 下载所需的驱动包

为了能够运行WordCount程序,需要下载并添加以下Hadoop相关的JAR包:

  • hadoop-common-2.6.0.jar
  • hadoop-mapreduce-client-core-2.6.0.jar
  • hadoop-test-1.2.1.jar

2.2 创建新的工程

  • 在Eclipse中创建名为WordCount的Java项目。
  • 在项目属性的Java Build Path中添加上述下载的JAR包。
  • 新增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;public class WordCount {    public static class TokenizerMapper extends Mapper
    { private IntWritable one = new IntWritable(1); private Text word = new Text(); @Override 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> { private IntWritable result = new IntWritable(); @Override public void reduce(Text key, Iterable
    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(); Job job = Job.getInstance(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(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }}

    2.3 打包源文件

  • 在Eclipse中选择文件,右键单击并导出为JAR文件,选择WordCount项目作为导出的基础,设置输出路径和文件名。
  • 打包完成后,会在指定路径生成WordCount.jar文件。
  • 2.4 启动HDFS服务

  • 打开终端,进入/usr/local/Cellar/hadoop/2.6.0/sbin目录。
  • 执行以下命令启动HDFS服务:
    start-dfs.sh
  • 检查是否启动成功,执行jps查看进程。
  • 2.5 将文件上传到HDFS

  • 创建HDFS上的输入和输出文件夹:
    hdfs dfs -mkdir /userhdfs dfs -mkdir /user/input
  • 将本地文件上传到HDFS:
    hdfs dfs -put /Users/你的路径/test*.html /user/input
  • 2.6 运行JAR文件

  • 创建工作目录:
    mkdir WorkSpace
  • WordCount.jar复制到工作目录:
    cp /你的路径/WordCount.jar ./WorkSpace
  • 运行JAR文件:
    hadoop jar WorkSpace/WordCount.jar WordCount /user/input /user/output
  • 3. 查看运行结果

  • 检查输出文件:
    hdfs dfs -ls /user/output
  • 查看具体内容:
    hdfs dfs -cat /user/output/part-r-00000
  • 4. 常见问题

    • 如果程序运行失败,需检查日志文件:
      hadoop job -debug
    • 确保输入文件格式正确,且HDFS集群运行正常。

    5. 参考文献

    你可能感兴趣的文章
    Object.keys()的详解和用法
    查看>>
    objectForKey与valueForKey在NSDictionary中的差异
    查看>>
    Objective - C 小谈:消息机制的原理与使用
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-Cfor循环实现Factorial阶乘算法 (附完整源码)
    查看>>
    Objective-C——判断对象等同性
    查看>>
    objective-c中的内存管理
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>