$HADOOP_HOME/sbin/start-all.sh
# 创建文件夹
hadoop fs -mkdir /test
#上传数据到HDFS文件
hadoop fs -put 1.data /test/
hadoop fs -put The_Man_of_Property.txt /test/
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 ("%s\t%s" % (s, 1))
cat 1.data | python map.py | head -15
运行map.py 得出头15条数据结果:map 切分单词完成,接下来用red统计单词次数。
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("%s\t%s" % (current_word, sum))
current_word = word
sum = 0
sum += int(val)
print("%s\t%s" % (current_word, str(sum)))
cat 1.data | python map.py | sort -k1 | python red.py | tail -15
运行mapreducer程序,实现wordCount。输出最后15条数据。
创建脚本 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
开发者涨薪指南
48位大咖的思考法则、工作方式、逻辑体系
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44775255/article/details/125163049
内容来源于网络,如有侵权,请联系作者删除!