目录
一 Homebrew安装
Homebrew是一个包管理器,是Mac上的软件安装管理工具,类似于Linux中的apt-get,拥有安装、卸载、更新、查看等很多实用的功能。简单的一条指令,就可以实现包管理,十分方便.
可以通过如下代码进行安装:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装成功后可以通过brew doctor来查看是否安装成功。
二 SSH免密登录配置
我们将远程登录、所有用户勾选,然后打开终端,输入:
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
当然如果你使用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最简单的模式,他没有hdfs,而是直接使用本地操作系统的文件系统,不擅长处理大数据量。因此我们需要进行搭建伪分布式!
伪分布模式需要我们对文件进行配置。下面配置的文件均在 /opt/homebrew/Cellar/hadoop/3.3.1/libexec/etc/hadoop 路径中。
a.hadoop-env.sh配置
当你打开你的hadoop-env.sh时,这部分是备注释的,也就是前面有一个#,那我们需要去掉#,并将自己的java位置放到=后面
查看自己电脑java存放位置使用:
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
3.接下来启动 ResourceManager 和 NodeManager: 还是在 libexec/sbin 路径中,输入start-yarn.sh,启动后可以在浏览器中查看All Applications 界面。
ResourceManager - http://localhost:8088
这样,就可以顺利启动它们了。我们可以通过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下面的所有目录,如下图所示:
(3) Python实现WordCount
- 首先,编写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任务的时候测试一下脚本运行效果正确
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'
参考:
mac搭建hadoop3.1.1伪分布模式 全网最详细教程!_带鱼工作室的博客-CSDN博客_mac安装hadoop伪分布式python实现Mapreduce的wordcount_飞翔的荷兰人号z的博客-CSDN博客