WordCount代码实现

翻译 2017年01月03日 16:40:17

实验目的

1、了解Mapreduce模型

2、了解Hadoop JAVA API的基本用法

3、了解数据分析的基本流程

实验环境

1、Linux Ubuntu 14.04

2、hadoop-2.6.0-cdh5.4.5

3、hadoop-2.6.0-eclipse-cdh5.4.5.jar

4、eclipse-java-juno-SR2-linux-gtk-x86_64

实验内容

1、现有一个搜索引擎,每天支撑大量的搜索服务。

2、用户使用搜索引擎,搜索数据时,搜索引擎会产生一条日志,记录用户的搜索信息。

3、现有搜索日志文件,放在/data/mydata/目录下,名为solog,格式如下:(时间、ip、屏幕宽度、屏幕高度、当前搜索词、上一次搜索词)

  1. 20161220155843  192.168.1.179   1366    768     Sqoop       HTML  
  2. 20161220155911  192.168.1.179   1366    768     SparkR      Sqoop  
  3. 20161220155914  192.168.1.155   1600    900     hadoop  
  4. 20161220155921  192.168.1.155   1600    900     hahahhaha   hadoop  
  5. 20161220155928  192.168.1.155   1600    900     sqoop       hahahhaha  

4、编写MapReduce程序,统计每个搜索词分别被搜索了多少次。(WordCount)

5、结果数据样式

  1. AI  2  
  2. AR  2  
  3. AWK 2  
  4. Apache  2  
  5. CSS 4  
  6. Cassandra   2  
  7. DataMining  7  
  8. Docker  2  
  9. ETL 4  
  10. Echarts 6  
  11. Flume   6  
  12. HDFS    6  

实验步骤

1、打开eclipse,新建项目

选择Map/Reduce Project

在弹出的窗口中,输入项目的名称为mapreducedemo,以及项目的存储目录为/data/myjava目录下

另外在此处还需要指定Hadoop的路径,点击“Configure Hadoop Install directory”,弹出窗口,选择hadoop程序的安装位置。操作完毕后点击Next

再点击Finish则创建项目完毕

2.下面右键mapreducedemo下src目录,新建package

弹出的窗体中,输入包名my.mr

在my.mr下新建一个执行wordcount的类,名为MyWordCount

3.搜索日志solog文件已放在/data/mydata/目录 下,请将/data/mydata/solog文件,上传到HDFS上/mydata/目录下。

如果hdfs上/mydata目录不存在的话,需要提前创建

  1. hadoop fs -mkdir /mydata  

上传文件

  1. hadoop fs -put /data/mydata/solog  /mydata/solog  

4、下面编写MapReduce代码,MapReduce代码基本结构,都比较类似,结构如下。

  1. package my.mr;  
  2. import java.io.IOException;  
  3. import org.apache.hadoop.io.IntWritable;  
  4. import org.apache.hadoop.io.Text;  
  5. import org.apache.hadoop.mapreduce.Mapper;  
  6. import org.apache.hadoop.mapreduce.Reducer;  
  7. public class MyWordCount {  
  8.     public static void main(String[] args) {  
  9.     }  
  10.     public static class doMapper extends Mapper<Object, Text, Text, IntWritable>{  
  11.       @Override  
  12.         protected void map(Object key, Text value, Context context)  
  13.                         throws IOException, InterruptedException {  
  14.         }  
  15.     }  
  16.     public static class doReducer extends Reducer<Text,IntWritable, Text, IntWritable>{  
  17.         @Override  
  18.         protected void reduce(Text key, Iterable<IntWritable> values, Context context)  
  19.     throws IOException, InterruptedException {  
  20.             }  
  21.         }  
  22.     }  

main函数,是MapReduce进行任务处理的入口。

doMapper类,自定义的Map类

doReducer类,自定义的Reduce类

完整代码如下:

  1. package my.mr;  
  2. import java.io.IOException;  
  3. import java.util.StringTokenizer;  
  4. import org.apache.hadoop.fs.Path;  
  5. import org.apache.hadoop.io.IntWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Job;  
  8. import org.apache.hadoop.mapreduce.Mapper;  
  9. import org.apache.hadoop.mapreduce.Reducer;  
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  12. public class MyWordCount {  
  13.     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {  
  14.         Job job = Job.getInstance();  
  15.         job.setJobName("MyWordCount");  
  16.         job.setJarByClass(MyWordCount.class);  
  17.         job.setMapperClass(doMapper.class);  
  18.         job.setReducerClass(doReducer.class);  
  19.         job.setOutputKeyClass(Text.class);  
  20.         job.setOutputValueClass(IntWritable.class);  
  21.         Path in = new Path("hdfs://localhost:9000/mydata/solog");  
  22.         Path out = new Path("hdfs://localhost:9000/myout/1");  
  23.         FileInputFormat.addInputPath(job, in);  
  24.         FileOutputFormat.setOutputPath(job, out);  
  25.         System.exit(job.waitForCompletion(true) ? 0 : 1);  
  26.     }  
  27.     public static class doMapper extends Mapper<Object, Text, Text, IntWritable>{  
  28.         public static final IntWritable one = new IntWritable(1);  
  29.         public static Text word = new Text();  
  30.         @Override  
  31.         protected void map(Object key, Text value, Context context)  
  32.                     throws IOException, InterruptedException {  
  33.             StringTokenizer tokenizer = new StringTokenizer(value.toString(), "\t");  
  34.             if (tokenizer.hasMoreTokens()) {  
  35.                 tokenizer.nextToken();  
  36.                 tokenizer.nextToken();  
  37.                 tokenizer.nextToken();  
  38.                 tokenizer.nextToken();  
  39.             }  
  40.             while (tokenizer.hasMoreTokens()) {  
  41.                 word.set(tokenizer.nextToken());  
  42.                 context.write(word, one);  
  43.             }  
  44.         }  
  45.     }  
  46.     public static class doReducer extends Reducer<Text, IntWritable, Text, IntWritable>{  
  47.         private IntWritable result = new IntWritable();  
  48.         @Override  
  49.         protected void reduce(Text key, Iterable<IntWritable> values, Context context)  
  50.     throws IOException, InterruptedException {  
  51.     int sum = 0;  
  52.     for (IntWritable value : values) {  
  53.     sum += value.get();  
  54.     }  
  55.     result.set(sum);  
  56.     context.write(key, result);  
  57.     }  
  58.     }  
  59.     }  

5、在WordCountText类文件中,右键并点击Run As =》 Run on Hadoop选项,将MapReduce任务提交到Hadoop集群中。

待执行完毕后,进入命令行模式下,查看HDFS目录结构变化

  1. hadoop fs -lsr /myout  

查看HDFS上,/myout/1目录下输出的内容

  1. hadoop fs -text /myout/1/*  

可以看到具体的输出结果

mapreduce(二):wordcount详解

package mapreduce; import java.io.FileInputStream; import java.io.IOException; import java.net.URI;...
  • u012592062
  • u012592062
  • 2016年06月30日 12:42
  • 404

Spark之WordCount(Java代码实现)

本地模式: `/** * WordCountLocal.java * com.majs.spark * Copyright (c) 2017, majiashu版权所有. * @au...
  • qq_38377523
  • qq_38377523
  • 2017年07月25日 21:17
  • 671

彻底解析wordCount原理

本期内容: 1. 从数据流动视角解密WordCount,即用Spark作单词计数统计,数据到底是怎么流动的。 2. 从RDD依赖关系的视角解密WordCount。Spark中的一切操作皆RDD,后...
  • a11a2233445566
  • a11a2233445566
  • 2017年01月18日 12:53
  • 197

hadoop自带wordcount代码详解

hadoop中自带wordcount代码详解wordcount代码详解package cn.chinahadoop;import java.io.IOException; import java.ut...
  • superman_xxx
  • superman_xxx
  • 2016年06月01日 05:25
  • 3368

WordCount源码剖析

为了把抽象问题转化成为具体问题,深入理解MapReduce的工作原理,因此,以WordCount为例,详细分析MapReduce是怎么来执行的,中间的执行经过了哪些步骤,每个步骤产生的结果是什么。简单...
  • recommender_system
  • recommender_system
  • 2014年12月19日 16:28
  • 3040

hadoop之WordCount代码编写

hadoop之WordCount代码编写 WCMapper.java package hadoop.mr; import java.io.IOException; import org.apa...
  • e421083458
  • e421083458
  • 2015年05月10日 20:35
  • 1364

第一个hadoop程序:WordCount

在windows8.1+eclipse编写hadoop程序,并尝试运行,步骤如下: 1.在Eclipse开发环境中创建JAVA工程 双击桌面上的Eclipse的快捷方式。首先选择菜单“Fi...
  • hexiaofen1996
  • hexiaofen1996
  • 2017年03月30日 19:26
  • 113

基于apache ambari 的大数据平台搭建并运行WordCount

操作系统:3个 rhel 6.4,内存2g,动态硬盘20g。 虚拟机软件:virtualBox 注意: 1、yum可能要重新安装,可百度解决 1、确保三个host能互相ping通 每...
  • baidu_35570545
  • baidu_35570545
  • 2017年05月14日 13:05
  • 366

hadoop 自带示例wordcount 详细运行步骤

因为机器学习,接触到了数据挖掘;因为数据挖掘,接触到了大数据;因为大数据,接触到了Hadoop。之前有过hadoop的简单了解,但都是基于别人提供的hadoop来学习和使用,虽然也很好用 ,终究不如自...
  • u010414589
  • u010414589
  • 2016年04月26日 21:20
  • 4906

Hadoop2.4.1中wordcount示例程序测试过程

hadoop fs 指令详见我的另一博文    http://blog.csdn.net/zheyejs/article/details/38656627
  • zheyejs
  • zheyejs
  • 2014年08月18日 10:45
  • 1707
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WordCount代码实现
举报原因:
原因补充:

(最多只允许输入30个字)