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/*  

可以看到具体的输出结果

相关文章推荐

java代码实现发送邮件

java代码实现发送邮件

BP单隐层神经网络 代码实现 以及 详细步骤

BP神经网络的详细步骤以及代码

哈夫曼树的代码实现

定义 哈夫曼树,又称最优树,是一类带权路径长度最短的树。 树的带权路径长度,是树中所有叶子 节点的带权路径长度之和。通常记做WPL=W1*L1+W2*L2+...+Wn*Ln。 例如: 节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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