WordCount统计词频
MapReduce实现
WordCount.java源码
1 | import java.io.IOException; |
编译
1 | hadoop com.sun.tools.javac.Main WordCount.java |
创建DFS
在hdfs上的用户目录下创建输入/输出文件的文件夹.
1 | hadoop fs -mkdir -p /user/{whoami}/wordcount/input |
下本书
1 | mkdir -p ~/tmp/book/ |
将书放到HDFS上
1 | hadoop fs -put ~/tmp/book/*.txt /user/${whoami}/wordcount/input |
执行MapReduce
1 | hadoop jar wc.jar WordCount /user/${whoami}/wordcount/input /user/${whoami}/wordcount/output |
查看解析内容
1 | hadoop fs -cat /user/${whoami}/wordcount/output/part-r-00000 |
HadoopStreaming实现
Hadoop是使用Java语言编写的,所以最直接的方式的就是使用Java语言来实现Mapper和Reducer,然后配置MapReduce Job,提交到集群计算环境来完成计算.
hadoop也为其它语言,如C++、Shell、Python、 Ruby、PHP、Perl等提供了支持,这个工具就是Hadoop Streaming.
wordcount的python实现
mapper.py源码
1 | #!/usr/bin/env python |
reducer.py
1 | #!/usr/bin/env python |
运行
可以写个sh脚本运行
1 | hadoop jar $STREAM \ |
Spark实现
运行spark的python交互式控制台,pyspark.
1 | hadoop@4532e4bdaa51:~$ pyspark |
使用textFile加载文本到RDD,进行’wordcount’.
1 | >>> text = sc.textFile("hdfs://localhost:9000/user/${whoami}/wordcount/input") |
调用saveAsTextFile,分布式作业开始…
1 | counts.saveAsTextFile("hdfs://localhost:9000/wordcount/spark_out") |
可以在工作台输出目录里查看
1 | hadoop fs -cat hdfs://localhost:9000/wordcount/spark_out/part-00000 |