[Hadoop] mac搭建hadoop3.X 伪分布模式

目录

一 Homebrew安装

二 SSH免密登录配置

三 Hadoop安装

四 伪分布式配置

a.hadoop-env.sh配置

b.core-site.xml配置

c.hdfs-site.xml配置

d.mapred-site.xml配置

e.yarn-site.xml配置

五 启动运行

六 测试WordCount


一 Homebrew安装

Homebrew是一个包管理器,是Mac上的软件安装管理工具,类似于Linux中的apt-get,拥有安装、卸载、更新、查看等很多实用的功能。简单的一条指令,就可以实现包管理,十分方便.

可以通过如下代码进行安装:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装成功后可以通过brew doctor来查看是否安装成功。

二 SSH免密登录配置

[Hadoop] mac搭建hadoop3.X 伪分布模式

我们将远程登录、所有用户勾选,然后打开终端,输入:

ssh localhost

这时会让你输入密码,输入密码后显示如下登陆成功页面:

Last login: Mon Jan 10 14:07:55 2021

但是hadoop中需要免密登录,比如在启动datanode、namenode时都需要免密登录,如果不设置,则会出现权限不允许(Permission denied)的错误提示,导致无法启动DataNode等。

使用如下代码设置ssh免密登录:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

接下来在使用ssh localhost命令,我们会发现不用输入密码,直接可以登录。 

三 Hadoop安装

前提准备:在安装hadoop之前确保你的电脑中有jdk,如果没有,可以通过如下代码安装:

brew install java

这里说明一下java版本的问题:Hadoop 2.7 以及后续版本需要 Java 7 以上版本,如果你电脑中的java是低于7的版本,那就请你去更新喽!

可以使用java -version查看jdk版本,我的java版本如下:

java -version 

[Hadoop] mac搭建hadoop3.X 伪分布模式

当然如果你使用brew安装,那大可不必担心版本问题,因为使用brew安装的都是最新的版本。

使用如下代码进行hadoop安装:

brew install hadoop

这里还有一点说明的地方,如果你的电脑中没有jdk,那么你使用 brew install hadoop安装时会提示你先安装jdk后在安装hadoop,所以java版本问题我们不用太担心。

我安装的是hadoop最新版本,hadoop3.3.1,下载好默认存放的位置是:

/opt/homebrew/Cellar/hadoop/3.3.1
使用brew安装会比在官网上下载快很多。(如果你不想安装了,那可以通过brew uninstall hadoop进行卸载,卸载的也非常干净)

四 伪分布式配置

当大家进行完上一步骤的安装后,恭喜你,你已经安装好了hadoop的单机模式!你可以在终端中输入hadoop 进行查看:

[Hadoop] mac搭建hadoop3.X 伪分布模式

 单机模式是hadoop最简单的模式,他没有hdfs,而是直接使用本地操作系统的文件系统,不擅长处理大数据量。因此我们需要进行搭建伪分布式!

伪分布模式需要我们对文件进行配置。下面配置的文件均在 /opt/homebrew/Cellar/hadoop/3.3.1/libexec/etc/hadoop 路径中。

[Hadoop] mac搭建hadoop3.X 伪分布模式

a.hadoop-env.sh配置

当你打开你的hadoop-env.sh时,这部分是备注释的,也就是前面有一个#,那我们需要去掉#,并将自己的java位置放到=后面

[Hadoop] mac搭建hadoop3.X 伪分布模式

 查看自己电脑java存放位置使用:

[Hadoop] mac搭建hadoop3.X 伪分布模式

b.core-site.xml配置


<configuration>
	<property>
 		<name>fs.defaultFS</name>
 		<value>hdfs://localhost:9000</value>
 	</property>
</configuration>

c.hdfs-site.xml配置

<configuration>
	<property>
 		<name>dfs.replication</name>
 		<value>1</value>
 	</property>	 
</configuration>

d.mapred-site.xml配置

<configuration>
    <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
</configuration>

e.yarn-site.xml配置

<configuration>
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property>
    <property> 
        <name>yarn.nodemanager.env-whitelist</name>
                  <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

五 启动运行

1.首先对文件系统进行格式化,先进入到/opt/homebrew/Cellar/hadoop/3.3.1/libexec/bin 路径中,输入代码: hdfs namenode -format

2.然后进行启动NameNode和datanode,进入到/opt/homebrew/Cellar/hadoop/3.3.1/libexec/sbin

输入代码: hdfs namenode -formatstart-dfs.sh, 这时候NameNode和DataNode都已经启动成功了,我们可以在网页中看到Overview页面了! NameNode - http://localhost:9870

[Hadoop] mac搭建hadoop3.X 伪分布模式

3.接下来启动 ResourceManager 和 NodeManager: 还是在  libexec/sbin 路径中,输入start-yarn.sh,启动后可以在浏览器中查看All Applications 界面。

ResourceManager - http://localhost:8088

[Hadoop] mac搭建hadoop3.X 伪分布模式

这样,就可以顺利启动它们了。我们可以通过jps查看进程: 


当你不再使用hadoop时,可以进行关闭,在 libexec/sbin  路径中输入sh stop-all.sh 可以关闭所有的进程。

六 测试WordCount

进入HDFS系统,HDFS是hadoop的原生文件系统。接下来,我们在HDFS中创建一个input目录,需要使用HDFS命令方式。

现在 创建这个目录:

(1)hadoop fs -mkdir /input #创建目录

(2)hadoop fs -ls / #查询hadoop下面的所有目录,如下图所示:

[Hadoop] mac搭建hadoop3.X 伪分布模式

(3) Python实现WordCount

  1. 首先,编写mapper.py, reducer.py脚本:
#!/usr/bin/python
import sys

#mapper.py
for line in sys.stdin:
    line = line.strip()
    words = line.split(' ')
    for word in words:
        print('%s\t%s' % (word, 1))
#!/usr/bin/python
import sys

#reducer.py
current_count = 0
current_word = None

for line in sys.stdin:
    line = line.strip()
    word, count = line.split('\t', 1)
    count = int(count)
    if current_word == word:
        current_count += count
    else:
        if current_word:
            print("{}\t{}".format(current_word, current_count))

        current_count = count
        current_word = word

2. 建议在运行MapReduce任务的时候测试一下脚本运行效果正确

[Hadoop] mac搭建hadoop3.X 伪分布模式

[Hadoop] mac搭建hadoop3.X 伪分布模式

3. 在Hadoop平台运行python脚本:

hadoop fs -rmr /input/out 
hadoop jar /opt/homebrew/Cellar/hadoop/3.3.1/libexec/share/hadoop/tools/lib/hadoop-streaming-3.3.1.jar \
-D stream.non.zero.exit.is.failure=true \
-files '/Users/apple/hadoop_apps/wordcount/reducer.py,/Users/apple/hadoop_apps/wordcount/mapper.py' \
-input /input/wordcount.txt \
-output /input/out \
-mapper '/usr/local/bin/python3 mapper.py' \
-reducer '/usr/local/bin/python3 reducer.py'

[Hadoop] mac搭建hadoop3.X 伪分布模式

[Hadoop] mac搭建hadoop3.X 伪分布模式

 [Hadoop] mac搭建hadoop3.X 伪分布模式

参考:

mac搭建hadoop3.1.1伪分布模式 全网最详细教程!_带鱼工作室的博客-CSDN博客_mac安装hadoop伪分布式python实现Mapreduce的wordcount_飞翔的荷兰人号z的博客-CSDN博客

上一篇:docker搭建sqli-labs


下一篇:TcaplusDB君 · 行业新闻汇编(12月20号)