你的位置:首页 > 数据库

[数据库]MapReduce的初次尝试


====前提:

搭建好集群环境(zookeeper、hadoop、hbase)。

搭建方法这里就不进行介绍了,网上有很多博客在介绍这些。

  

====简单需求:

WordCount单词计数,号称Hadoop的HelloWorld。所以,我打算通过这个来初体验一下Hadoop。需求如下:

①、计算文件中出现每个单词的频数

②、输入结果按照字母顺序进行排序

 

====Map过程:

首先将文件进行切分成单词。将所有单词的项目都聚到一起。生成key-value的中间结果。

 

====Reduce过程

拿到之前Map的中间结果,进行合并(归约)。

 

====源代码

源代码来自慕课网,由于我自己学习需要,放到了我的Github空间上了。

https://github.com/quchunhui/WordCount

 

====上传Jar包

首先需要确认Linux集群运转是否正常。使用jps命令查看。确保hadoop相关进程的存在。

需要注意一点,不同版本的Hadoop的jps结果可能不一样。我在看慕课网的视频的时候,

发现人家里面还有TaskTracker和JobTracker呢,但是新版本的Hadoop就已经没有。

并不是集群环境的问题。具体什么是正确的,可以去查看官网的帮助文档。

 

①、在Master端的jps结果

 

②、在Slave端的jps结果

 

然后,将写完的代码达成jar包。由于我使用的是Mave环境,所以在Maven环境下使用mvn package进行打包即可。

 

====上传文件至hdfs文件目录

①、将上述步骤中生成的jar包上传到Linux服务器上。

我在HDOOP_HOME的根目录下创建了一个专门用于存放jar包的文件夹package。将生成的jar包上传到这里

/home/qch/software/hadoop-2.7.1/package

②、使用hadoop fs -put命令将数据源文件到hdfs文件目录

注意,这里是hdfs文件目录,并非是Linux系统上的某个文件夹。如果目录不存在,需要通过hadoop fs -mkdir命令自己手动去逐层创建。

我这里将上述3个文件上传到了hdfs文件目录[/user/root/wc_input]上了。

 

====程序运行

①、通过【hadoop jar <jar> [mainClass] args…】命令来运行程序。

命令:hadoop jar ../package/WordCount-1.0-SNAPSHOT.jar test.WordCount wc_input/file wc_output

 

②、运行成功之后,可以通过命令来查看hdfs上的生成结果是否正确。

 

====总结:

我犯的最小白的错误就是,不知道需要将文件上传到hdfs文件目录下面。希望以后加深对hdfs的了解。

这也就是我今天(2016/4/22。)的第一个mapreduce成果。

下一步需要真正去进行我的MapReduce工作了,需要考虑按照什么规则进行Map和Reduce。这才是重中之重。 

 

--END--