macOS Big Sur系统基于docker部署Hadoop集
博主部署环境的时候,本地系统环境版本为:macOS Big Sur 11.3.1
1. 集群环境要求
类别 | 版本 |
---|---|
OS | centos7 |
jdk | jdk1.8 |
hadoop | Hadoop2.9.2 |
2. 集群规划
集群服务器名称 | IP | 集群规划 |
---|---|---|
linux001 | 172.16.0.2 | namenode,datanode,nodemanager |
linux002 | 172.16.0.3 | Datanode,nodemanager |
linux003 | 172.16.0.4 | Datanode,nodemanager,ResourceManager,SecondNamenode |
3. 环境准备
3.1 从docker-hub拉去系统镜像
docker pull centos:7
3.2 配置集群子网网络
docker network create --subnet=172.16.0.0/16 hadoopnetgroup
3.3 启动容器
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-linux001 -h linux001 --net hadoopnetgroup --ip 172.16.0.2 -P -p 50070:50070 -p 8088:8088 centos:7 /usr/sbin/init
3.4 上传jdk安装包和hadoop的安装包到容器中
提前在镜像容器中/opt目录下创建所需要的目录
lagou/software --用于存放软件安装包
lagou/servers。 --用于安装需要的软件(jdk和hadoop)
docker cp jdk-8u231-linux-x64.tar.gz hadoop_linux001:/opt/lagou/software
docker cp hadoop-2.9.2.tar.gz hadoop_linux001:/opt/lagou/software
jdk和hadoop的下载地址我放在了网盘里(由于笔者的mac系统是macOS Big Sur,是arm64架构的,所以jdk用的是jdk-8u291-linux-aarch64.tar.gz)
链接: https://pan.baidu.com/s/1rJH947bQzLNBnjNuMsDJFw 密码: ujqg
3.5解压安装jdk和hadoop
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /opt/lagou/servers/
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/lagou/servers/
3.6配置环境变量
##使用vi打开~/.bashrc,在文件末尾加上一下内容(docker容器在加载配置文件的是针对profile里面的修改不会自动加载,需要修改到.bashrc)
##JAVA_HOME
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_291
export PATH=:$JAVA_HOME/bin:$PATH
##HADOOP_HOME
export HADOOP_HOME=/opt/lagou/servers/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
安装完成后,通过source命令使配置文件生效
source /etc/profile
校验安装结果是否正确:
java -version
截屏2021-05-11 23.35.20-0747577.png
hadoop version
截屏2021-05-11 23.39.00.png
以上能看到版本信息,就代表目前安装成功。
3.7 hadoop集群配置
集群配置
Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置
-
HDFS集群配置
-
将JDK路径明确配置给HDFS(修改hadoop-env.sh)
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_291
-
指定NameNode节点以及数据存储目录(修改core-site.xml)
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://linux001:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/lagou/servers/hadoop-2.9.2/data/tmp</value> </property>
-
-
指定SecondaryNameNode节点(修改hdfs-site.xml)
<!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>linux003:50090</value> </property> <!--副本数量 --> <property> <name>dfs.replication</name> <value>3</value> </property>
- 指定DataNode从节点(修改etc/hadoop/slaves文件,每个节点配置信息占一行)
-
MapReduce集群配置
-
将JDK路径明确配置给MapReduce(修改mapred-env.sh)
-
指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
##先通过cp命令copy一份配置 cp mapred-site.xml.template mapred-site.xml vi mapred-site.xml <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
-
Yarn集群配置
-
将JDK路径明确配置给Yarn(修改yarn-env.sh)
-
指定ResourceManager老大节点所在计算机节点(修改yarn-site.xml)
<!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>linux003</value> </property> <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
-
- 指定NodeManager节点(会通过slaves文件内容确定,hdfs配置的时候已经修改过,无需重复配置)
3.8保存容器配置,制作镜像文件
-
查看docker 容器CONTAINER ID
docker ps -a
-
停止容器
docker stop 5f2a776cd8ae
-
保存容器为新的镜像
docker commit 5f2a776cd8ae hadoop-centos-master:v1.0
-
通过新的镜像文件启动集群
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-linux001 -h linux001 --net hadoopnetgroup --ip 172.16.0.2 -P -p 50070:50070 -p 8088:8088 hadoop-centos-master:v1.0 /usr/sbin/init docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-linux002 -h linux002 --net hadoopnetgroup --ip 172.16.0.3 -P hadoop-centos-master:v1.0 /usr/sbin/init docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-linux003 -h linux003 --net hadoopnetgroup --ip 172.16.0.4 -P hadoop-centos-master:v1.0 /usr/sbin/init
到这里,集群基本安装完毕,剩下的就是调试和测试了。
3.9 安装其他工具
hadoop还需要依托一些工具才可以正常管理各个节点,所以下面我会列出一些我知道需要安装的工具,以供参考。
yum -y install wget
yum makecache ##换源后建立本地缓冲区
#安装openssh
yum -y install openssh openssh-server openssh-clients
##启动sshd服务
systemctl start sshd
#配置ssh免密登陆
ssh-keygen -t rsa -P "" ##生成rsa密钥 一路回车即可
cd ~/.ssh
cat id_rsa.pub >authorized_keys
#文件生成之后用scp将公钥文件分发到集群slave节点
ssh root@linux002 'mkdir ~/.ssh'
ssh root@linux003 'mkdir ~/.ssh'
scp ~/.ssh/authorized_keys root@linux002:~/.ssh
scp ~/.ssh/authorized_keys root@linux003:~/.ssh
#验证免密登陆是否成功
#安装网络工具
yum install -y net-tools
#安装rsync用于后续同步脚本
yum install -y rsync
rsync --daemon
4. 启动集群
4.1 格式化hdfs
hadoop namenode -format
看到common.Storage: Storage directory /opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name has been successfully formatted.表示格式化成功。
截屏2021-05-12 00.31.40.png4.2 启动hdfs
cd $HADOOP_HOME/sbin
sh start-dfs.sh
#jsp检查启动情况
截屏2021-05-12 10.13.35.png#同理检查linux002和linux003
#通过页面也能查看hdfs启动情况
截屏2021-05-12 10.19.28.png4.3启动yarn
sh start-yarn.sh
#检查yarn启动情况同样适用jps可以查看
截屏2021-05-12 10.27.15.png页面查看yarn
截屏2021-05-12 10.33.08.png异常问题处理记录:
问题:java -version或者hadoop version出现/lib64/ld-linux-x86-64.so.2: No such file or directory
解决方案:检查内核,使用正确的内核版本jdk的包。
检查命令:arch