卷前:
- 微服务是趋势,docker对于快速高效打包,又作为一个轻量级虚拟机容器,目前的生态已经发展得越来越好;
- hadoop生态系列涉足不多,此文来讲述简化复杂的hadoop部署。
准备相关资源:
资源下载:
wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz
可以在/root/myhadoop/下进行以下所有操作
Docker安装:
- 使用centos自带yum源安装
-
yum update yum install docker
- 使用官网提供release安装
部署思路:
- 拉取centos的docker镜像包作为基础环境
- 将ssh、jdk、hadoop软件包打包到docker-centos上,作为后续环境支撑
- 配置hadoop集群工作节点,配置相关core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
- 配置hadoop启动用户、启动脚本
- 测试成功能访问hadoop提供的web控制台
- 打包成自定义docker镜像,方便后续集群部署与扩展
一、拉取centos的docker镜像作为基础包:
docker pull centos
二、使用dockerFile构建centos7-ssh镜像
vi Dockerfile
FROM centos MAINTAINER pcshao@pcshao.cn RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN yum install -y openssh-clients RUN echo "root:pcshao" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
编辑Dockerfile编辑构建脚本,以centos镜像为基础,构建用户名root、密码pcshao,构建ssh服务,构建ssh免密登录的秘钥
docker build -t="centos7-ssh" .
使用dockerfile构建docker镜像,注意此条命令最后一位参数为“ . ”
三、使用dockerFile构建hadoop_base镜像
vi DockerFile
FROM centos7-ssh ADD jdk-8u191-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.8.0_191 /usr/local/jdk1.8 ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH ADD hadoop-3.0.3.tar.gz /usr/local RUN mv /usr/local/hadoop-3.0.3 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH RUN yum install -y which sudo
通过上面打包的centos7-ssh自定义镜像,将同目录下官网下载的jdk-8u191-linux-x64.tar.gz、hadoop-3.0.3.tar.gz打包成新镜像
docker build -t="hadoop_base" .
使用dockerfile构建docker镜像,注意此条命令最后一位参数为“ . ”
四、启动hadoop_base自定义docker镜像,配置ssh-key相关
docker run --name hadoop2 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 hadoop_base
基于hadoop_base启动一个名为hadoop2的镜像,进入Hadoop2容器,配置ssh秘钥
docker exec -it hadoop2 bash #主机进入镜像名为hadoop2的docker容器
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
五、在自定义hadoop_base>hadoop2镜像上配置相关基础环境
HADOOP_HOME目录
docker exec -it hadoop2 bash #主机进入镜像名为hadoop2的docker容器 #进入到docker容器内 cd /usr/local/hadoop
以下命令都在hadoop_home目录(/usr/local/hadoop)下操作
在etc/hadoop/hadoop-env.sh中,添加JAVA_HOME信息
vi etc/hadoop/hadoop-env.sh
#添加到文件 export JAVA_HOME=/usr/local/jdk1.8
在etc/hadoop/core-site.xml中,添加hadoop配置,使拥有此配置文件的节点有个共同namenode
<configuration> <property> <name>fs.default.name</name> <value>hdfs://hadoop2:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
在etc/hadoop/hdfs-site.xml中,添加hadoop配置
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop2:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> <description># 每个Block有2个备份</description> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
在etc/hadoop/yarn-site.xml中,添加hadoop配置
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hadoop2:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop2:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop2:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hadoop2:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop2:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</value> </property> </configuration>
在etc/hadoop/mapred-site.xml中,添加hadoop配置
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop2:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop2:19888</value> </property> </configuration>
在sbin/start-dfs.sh 和 sbin/stop-dfs.sh 中,添加hadoop用户配置
HDFS_DATANODE_USER=root #HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs
在sbin/start-yarn.sh 和 sbin/stop-yarn.sh 中,添加hadoop用户配置
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
六、ctrl+P+Q退出容器到主机并开始打基础包
在打包之前确认下JAVA_HOME环境变量是否完全配置成功
java -version
如果显示命令找不到说明需要重新配置JAVA环境变量
vi /etc/profile #在文本文件最后追加如下三行 export JAVA_HOME=/usr/local/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #bash 使立即生效 source /etc/profile
#停止当前镜像名为hadoop2的容器 docker stop hadoop2 #打包镜像 docker commit hadoop2 hadoop_base:v1.0 -a="pcshao.cn" -m="注释" #docker images查看
七、从打包好的自定义base_v1.0版本的镜像包中run开启多个容器
#删除之前的hadoop2容器 docker rm hadoop2 #基于新镜像开启新的hadoop2容器 docker run --name hadoop2 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5002:22 -p 9870:9870 -p 8088:8088 -p 19888:19888 hadoop_base:v1.0 #基于新镜像开启hadoop3容器 docker run --name hadoop3 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5003:22 hadoop_base:v1.0 #基于新镜像开启hadoop4容器 docker run --name hadoop4 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5004:22 hadoop_base:v1.0 #基于新镜像开启hadoop5容器 docker run --name hadoop5 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5005:22 hadoop_base:v1.0
八、格式化镜像并配置namenode、datanode开启集群
使hadoop2为master节点,使hadoop3~5为slaves节点
配置slaves
#还是回到HADOOP_HOME目录下 cd /usr/local/hadoop #配置slaves节点 vi etc/hadoop/slaves #覆盖 hadoop3 hadoop4 hadoop5
配置workers
#还是回到HADOOP_HOME目录下 cd /usr/local/hadoop #配置workers vi etc/hadoop/workers #覆盖 hadoop3 hadoop4 hadoop5
格式化namenode,即此master
#还是回到HADOOP_HOME目录下 cd /usr/local/hadoop #格式化 bin/hdfs namenode -format
scp同步到节点主机
scp -rq /usr/local/hadoop hadoop3:/usr/local scp -rq /usr/local/hadoop hadoop4:/usr/local scp -rq /usr/local/hadoop hadoop5:/usr/local
启动脚本
#还是回到HADOOP_HOME目录下 cd /usr/local/hadoop #启动脚本 sbin目录 sbin/start-all.sh
九、web控制台即可访问,通过8088、9870
参考自:https://www.linuxidc.com/Linux/2018-08/153683.htm 访问
配置中有任何问题都可以联系作者@pcshao