常用Linux命令:
查看当前目录下的文件—— ls
创建目录—— mkdir 目录名
创建或更新文件 —— touch 文件名
删除文件或目录—— rm -rf 文件名 强制删除文件或目录
显示文件内容—— cat 文件名
添加文件权限—— chmod chmod +x 文件名称
下载Python3
yum install python3
如果报错则执行AB命令后重新执行下载命令
输入完成回车,回车询问(y/n)一定要输入y
Hadoop MapReduce各阶段执行过程以及Python代码实现简单的WordCount程序
Python代码实现MapReduce的WordCount实例
A、切换下载数据源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
B、清除数据
yum clean all
yum makecache
yum -y update
首先介绍一个叫做Hadoop Streaming的工具,它能够帮助用户创建一类特殊的map/reduce作业,这些特殊的作业是由一些可执行文件或脚本文件充当mapper或者reducer。可以不用下载例如:



在HDFS创建目录并上传文件
hdfs dfs -mkdir -p /web/nginx/log
hdfs dfs -put access. log /web/nginx/log/


$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper mapper.py \
-reducer reducer.py

以下内容是代码示例:
新建文件夹WordCountTask(在root下新建),并在该文件夹下新建文本文档word.txt,输入以下内容:
Hello World
Hello Hadoop
Hello MapReduce

在WordCountTask文件夹下分别创建mapper.py和reducer.py两个文件:
mapper.py
#!/usr/bin/python3
import sys
for line in sys.stdin:
# 去除输入内容首位的空白字符
line = line.strip()
# 将输入内容分割为单词
words = line.split()
for word in words:
# 将结果写到标准输出STDOUT,作为Reduce阶段代码的输入
print("%s\t%s" % (word, 1))

输入命令cat word.txt | ./mapper.py,运行结果如下:

Reducer.py
#!/usr/bin/python3
import sys
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split("\t", 1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print("%s\t%s" % (current_word, current_count))
current_count = count
current_word = word
if word == current_word:
print("%s\t%s" % (current_word, current_count))

输入命令cat word.txt | ./mapper.py | sort | ./reducer.py,运行结果如下:

在Hadoop HDFS文件系统中运行
在三台虚拟机搭建的Hadoop伪分布式系统上运行刚刚写的mapper和reducer
首先需要启动Hadoop及所需组件:
命令:start-all.sh
在HDFS文件系统根目录下新建文件夹WordCountTask,并将word.txt上传到该目录下:
[root@master ~]# hadoop fs -mkdir /WordCountTask
[root@master ~]# hadoop fs -put WordCountTask/word.txt /WordCountTask
运行命令:
[root@master ~]# hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.1.jar \
-input /WordCountTask/ \
-output /WordCountTask/out \
-file /root/WordCountTask/mapper.py \
-mapper /root/WordCountTask/mapper.py \
-file /root/WordCountTask/reducer.py \
-reducer /root/WordCountTask/reducer.py
最终程序的结果在-output参数指定的路径中,此路径为程序自动生成,程序执行前不能有该路径。Hadoop Streaming是Hadoop自带的流处理包。程序的流程是原文本以流式方式传到Map函数,Map函数处理之后把结果传到Reduce函数,最终结果会保存在HDFS上。
可能出现的问题:star-all.sh不存在
1、vi mapred-site.xml添加:

2、没有权限
输入命令:chmod +x 文件名称
再次执行脚本:./脚本名称





3230

被折叠的 条评论
为什么被折叠?



