您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页08 hadoop完全分布式安装第八步:MapReduce查行数

08 hadoop完全分布式安装第八步:MapReduce查行数

来源:抵帆知识网
实验八MapReduce查行数

一、实验题目

开发MapReduce程序

二、实验要求

对于各种形式的文本分析而言,LineCount应用程序是一个不可或缺的统计工具。 想分析文本,我们必须知道文本中的行数、字数和单词数。 此外,这些参数的出现频率也有助于我们对数(值)进行分类。

本次实验练习中,我们将借助Eclipse集成开发环境(IDE)编写MapReduce程序,以统计给定文本文件的行数。

三、操作步骤

1.在Ubuntu上安装Eclipse、Hadoop和JDK(虚拟机里已经安装了这些环境); 2.打开Eclipse,创建一个新的Java Project;

3.选择“Configure Build Path”,选择Library标签,Add External JARs; 4.选择Apache/Hadoop 1.0.4文件夹,选择下列jar文件: commons-collections-3.2.1.jar commons-confi guration-1.6.jar commons-httpclient-3.0.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar commons-logging-api-1.0.4.jar jackson-core-asl-1.8.8.jar jackson-mapper-asl-1.8.8.jar log4j-1.2.15.jar Hadoop-core-1.0.4.jar

5.创建“com.trendwise.java”包,并在包中创建“LineCount”类(可使用附件文件);

6.将LineCount项目导出为Jar文件;

7.启动Hadoop,复制loaddata1文件到“/home/wcbdd/Desktop/loaddata1”; 8.访问localhost:50070,利用文件选择器选择选择loaddata1; 9.运行MapReduce程序,“bin/hadoop jar /home/wcbdd/linecount.jar com.trendwise.java.linecount /LOAD /home/wcbdd/workspace/BIGmb”; 10.打开浏览器查看LineCount结果; 11.复制结果到本地文件output.txt;

四、实验结果

首先,建立一个Java Project。在建立时,要将默认的Java1.7改为Java1.6.

新建Java Class,并且添加jar。需要将Hadoop文件夹下的以及lib文件夹下的所有jar均添加进去。

输入代码:

[java] view plain copy

1. //This wraps the modules into a single programpackage com.trendwise.java; //

Package name

2. import java.io.IOException; 3. import java.util.Iterator; 4. import org.apache.hadoop.fs.Path; 5. import org.apache.hadoop.io.IntWritable; 6. import org.apache.hadoop.io.LongWritable; 7. import org.apache.hadoop.io.Text;

8. import org.apache.hadoop.mapred.FileInputFormat; 9. import org.apache.hadoop.mapred.FileOutputFormat; 10. import org.apache.hadoop.mapred.JobClient; 11. import org.apache.hadoop.mapred.JobConf; 12. import org.apache.hadoop.mapred.MapReduceBase;

13. import org.apache.hadoop.mapred.Mapper;

14. import org.apache.hadoop.mapred.OutputCollector; 15. import org.apache.hadoop.mapred.Reducer; 16. import org.apache.hadoop.mapred.Reporter; 17. import org.apache.hadoop.mapred.TextInputFormat; 18. import org.apache.hadoop.mapred.TextOutputFormat; 19. public class LineCount {

20. public static class Map extends MapReduceBase implements Mapperable, Text, Text, IntWritable> {

21. private final static IntWritable obj = new IntWritable(1); 22. private Text words = new Text(\"Total Lines\");

23. public void map(LongWritable key, Text value, OutputCollectorIntWritable> output,

24. Reporter reporter) throws IOException { 25. output.collect(words, obj); 26. } 27. } 28.

29. public static class Reduce extends MapReduceBase implements 30. Reducer {

31. public void reduce(Text key, Iterator values, 32. OutputCollector output, Reporter reporter) 33. throws IOException { 34. int sum1 = 0;

35. while (values.hasNext()) { 36. sum1 += values.next().get(); 37. }

38. output.collect(key, new IntWritable(sum1)); 39. } 40. } 41.

42. public static void main(String[] args) throws Exception { 43. JobConf config = new JobConf(LineCount.class); 44. config.setJobName(\"LineCount\"); 45. config.setOutputKeyClass(Text.class);

46. config.setOutputValueClass(IntWritable.class); 47. config.setMapperClass(Map.class); 48. config.setCombinerClass(Reduce.class); 49. config.setReducerClass(Reduce.class);

50. config.setInputFormat(TextInputFormat.class); 51. config.setOutputFormat(TextOutputFormat.class);

52. FileInputFormat.setInputPaths(config, new Path(args[0])); 53. FileOutputFormat.setOutputPath(config, new Path(args[1])); . JobClient.runJob(config);

55. } 56. }

上述代码,map部分负责从原始数据中提取感兴趣的内容,在本例中,也就是行数。 reduce部分不择将map获取的数据进行整合,也就是求出中行数,并且输出。 main部分起到drive的作用。

编写完代码后,将其导出为jar文件,方便运行使用。

将文件从本地拷贝到HDFS中:

由于hadoop在安全模式下是不能创建文件夹的,因此需要将安全模式关闭。 可以看到关闭后,文件成功拷贝到HDFS中了。 接下来就是启动hadoop,运行MapReduce程序了。

打开浏览器,查看LineCount的运行结果

将文件从hdfs中导出

查看output1.text

可以看到结果和浏览器中查看的结果是一致的。

需要注意的是,文档中给的很多路径是错误的,包括LineCount小写了,以及导出文件时,路径给的是源文件的路径,而不是处理之后的路径等。

总结下就是,文档可以帮助我们快速入门,但是过于依靠文档,会频繁出错,还是需要加深自己对这个实验过程的理解。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务