- 1、启动hadoop集群
- 2、准备好数据并上传HDFS
- 3、map.py
- 4、red.py
- 5、用脚本一步到位
$HADOOP_HOME/sbin/start-all.sh2、准备好数据并上传HDFS
# 创建文件夹 hadoop fs -mkdir /test #上传数据到HDFS文件 hadoop fs -put 1.data /test/ hadoop fs -put The_Man_of_Property.txt /test/
3、map.py
vi map.py
import sys
import time
import re
p = re.compile(r'w+')
for line in sys.stdin:
ss = line.strip().split(' ')
for s in ss:
#time.sleep(1)
if len(p.findall(s)) < 1:
continue
s = p.findall(s)[0].lower()
if s.strip() != "":
print ("%st%s" % (s, 1))
cat 1.data | python map.py | head -15 运行map.py 得出头15条数据结果:map 切分单词完成,接下来用red统计单词次数。
4、red.py
import sys
current_word = None
sum = 0
for line in sys.stdin:
word, val = line.strip().split("t")
if current_word == None:
current_word = word
if current_word != word:
print("%st%s" % (current_word, sum))
current_word = word
sum = 0
sum += int(val)
print("%st%s" % (current_word, str(sum)))
cat 1.data | python map.py | sort -k1 | python red.py | tail -15 运行mapreducer程序,实现wordCount。输出最后15条数据。
5、用脚本一步到位
创建脚本 vi run.sh
HADOOP_CMD="/usr/local/src/hadoop-2.6.5/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.5/share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar"
INPUT_FILE_PATH="/test/1.data"
# INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
OUTPUT_PATH="/result_new"
$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
# step.1
$HADOOP_CMD jar $STREAM_JAR_PATH
-input $INPUT_FILE_PATH
-output $OUTPUT_PATH
-mapper "python map.py"
-reducer "python red.py"
-file ./map.py
-file ./red.py
运行脚本:sh -x run.sh ,正常运行会有 map与reduce 的进度。
最后,查看你的 OUTPUT_PATH 路径:例如: hadoop fs -cat /result_new/pa* | tail -15
一样的结果不同的实现方式。
这篇文章,只是写了,怎么做的过程代码,没有详细的解释代码的意思。
下面篇文章就有详细的解释,可以看下。
https://blog.csdn.net/weixin_44775255/article/details/120912957



