如何在M1 MacOS上面搭建Hadoop集群
本文主要介绍如何在M1芯片的MacOS上面搭建Hadoop虚拟机集群。
前期准备
需要准备的前期工作有:
- 1)准备安装了Centos的虚拟机;
- 2)准备ARM架构的JDK环境;
- 3)准备Hadoop安装包;
如何在M1芯片Mac上面安装Centos,可以参考这篇文章;
ARM架构和Hadoop安装包,百度云自取链接: https://pan.baidu.com/s/1ZO1XzmenkP-Foa60gN1N0g 提取码: iv32。
模版机配置
为了避免进行重复的环境安装操作,我们提前配置好一个模版机,然后集群环境可以在此基础上通过直接克隆的方式生成。
配置虚拟机静态IP
配置静态IP的目的:
- 1)避免IP动态变化,导致每次操作都进行额外的操作
- 2)通过本地host和IP映射文件,简化后续的主机操作
-
1)配置虚拟机静态IP,可以参考这篇文章;
-
2)通过
sudo vim /etc/hostname
修改本机主机名为hadoop102
; -
3)增加
sudo vim /etc/hosts
修改本机和集群主机名和IP的映射,IP是上面自己配置的IP;
# 根据自己配置的IP进行配置
192.168.x.202 hadoop102
192.168.x.203 hadoop103
192.168.x.204 hadoop104
配置用户权限
- 1)创建 atguigu 用户,并修改自己的密码
[root@hadoop100 ~]#useradd sds
[root@hadoop100 ~]# passwd sds
- 2)配置 atguigu 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
[root@hadoop100 ~]# vim /etc/sudoers
修改/etc/sudoers 文件,在%wheel 这行下面添加一行,如下所示:
\## Allow root to run any commands anywhere
root ALL=(ALL) ALL
\## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
- 3)在/opt下面创建文件夹
[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software
安装JDK和Hadoop
-
1)将安装包上传到
/opt/software
下面; -
2)将安装包进行解压并移动到
/opt/module
下; -
3)通过命令
sudo vim /etc/profile.d/my_env.sh
环境变量配置。
安装Hadoop集群
集群准备
1)在模版机的基础上克隆集群hadoop103
, hadoop104
;
2)修改集群节点的ip
和hostname
;
3)配置ssh免密登陆。
四个配置文件
- core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 sds -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>sds</value>
</property>
</configuration>
- hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
- mapped-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
- yarn-site.xml
<?xml version="1.0"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
两个集群脚本
xsync.sh
,文件分发脚本
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
hdp.sh
,hadoop集群启停脚本
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
jpsall.sh
,集群进程查看脚本
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ================== $host ===================
ssh $host jps
done
参考文章
- 如何在M1 MacOS上面安装Centos :https://www.cnblogs.com/shuds#/c/subject/p/16658719.html
- Mac 上 VMware 设置虚拟机为静态 IP:https://blog.51cto.com/u_15298624/3033418
- Hadoop3.X尚硅谷大数据教程:https://www.bilibili.com/video/BV1Qp4y1n7EN?p=31&vd_source=948b6ab79e3f2671404fe8a686b40778
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通