111222333444555666777888999

常用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 文件名称

再次执行脚本:./脚本名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值