如何在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环境变量配置。

    image-20220905172215038

安装Hadoop集群

集群准备

1)在模版机的基础上克隆集群hadoop103, hadoop104;

2)修改集群节点的iphostname

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

参考文章

  1. 如何在M1 MacOS上面安装Centos :https://www.cnblogs.com/shuds#/c/subject/p/16658719.html
  2. Mac 上 VMware 设置虚拟机为静态 IP:https://blog.51cto.com/u_15298624/3033418
  3. Hadoop3.X尚硅谷大数据教程:https://www.bilibili.com/video/BV1Qp4y1n7EN?p=31&vd_source=948b6ab79e3f2671404fe8a686b40778
posted @   車轱辘  阅读(1297)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示