製作 hadoop 集群的基礎鏡像
# 拉取 ubuntu 鏡像 docker pull ubuntu # 生成一個容器 # --name 給容器命名 # -v 掛載宿主機路徑 docker run -itd --name hadoop-base -v /Users/zhangbo/Documents/docker_hadoop_data_base:/home/novadeep ubuntu # 進入該容器 docker exec -it hadoop-base /bin/bash # 安裝所需軟件包 apt-get update apt-get install vim apt install net-tools apt-get install iputils-ping apt-get install openssh-server
- 在宿主機上下載 jdk 與 hadoop,然後放到容器與之對應的宿主文件夾下
- hadoop-3.2.0.tar.gz
- jdk-8u201-linux-x64.tar.gz
# 解壓 tar -zxvf hadoop-3.2.0.tar.gz tar -zxvf jdk-8u201-linux-x64.tar.gz # 進入 .bashrc 中配置 java 及 hadoop 環境變量 vim ~/.bashrc export JAVA_HOME=/home/novadeep/jdk1.8.0_201 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export HADOOP_HOME=/home/novadeep/hadoop-3.2.0 export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH # 退出 .bashrc 文件後,刷新環境變量 source ~/.bashrc
- 製作 ssh 免密登錄
# 生成密鑰 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 查看本地 host cat /etc/hosts ssh your_local_ip # 退出容器 exit
- 至此 hadoop 集群容器做作完成
# 把該容器提交成鏡像 docker commit hadoop-base hadoop-base # 查看剛提交的鏡像 ...MacBook-Pro:/ zhangbo$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hadoop-base latest eb27091630dd 25 hours ago 265MB
編輯 hadoop 的配置文件
這裡需要編輯7個配置文件hadoop-env.sh | yarn-env.sh | core-site.xml | hdfs-site.xml | yarn-site.xml | mapred-site.xml | workers注意老版本中workers被叫做slaves 由於某種原因你們懂得,新版本中被改成了 workers- hadoop-env.sh 添加以下內容
export JAVA_HOME=/home/novadeep/jdk1.8.0_201 export HDFS_NAMENODE_USER="root" export HDFS_DATANODE_USER="root" export HDFS_SECONDARYNAMENODE_USER="root" export YARN_RESOURCEMANAGER_USER="root" export YARN_NODEMANAGER_USER="root"
- yarn-env.sh 添加以下內容
export JAVA_HOME=/home/novadeep/jdk1.8.0_201
- core-site.xml
fs.default.name hdfs://master:9000 fs.defaultFS hdfs://master:9000 hadoop.tmp.dir /home/novadeep/tmp
- hdfs-site.xml
dfs.namenode.name.dir file:/home/novadeep/hdfs/name dfs.datanode.data.dir file:/home/novadeep/hdfs/data dfs.replication 2 dfs.webhdfs.enabled true dfs.permissions.superusergroup staff dfs.permissions.enabled false
- yarn-site.xml
yarn.resourcemanager.hostname master yarn resourcemanager hostname is master yarn.nodemanager.aux-services mapreduce_shuffle just mapreduce_shuffle can run MapReduce
- mapred-site.xml
mapreduce.framework.name yarn mapreduce's framework is yarm
- workers 把localhost刪掉,添加以下內容。這裡面添加的就是worker的host,下面會說到
node1 node2 node3
使用 docker 模擬 hadoop 集群
- 1主3從的配置
iphost name172.17.0.2master172.17.0.3node1172.17.0.4node2172.17.0.5node3
- 在 docker 中開啟容器,注意與之對應的宿主文件夾。把hadoop-3.2.0、jdk1.8.0_201先複製到node123中
主節點與從節點文件夾
# 啟動容器 docker run -itd --name hadoop-master -v /Users/zhangbo/Documents/docker_hadoop_data_base:/home/novadeep -p 9870:9870 -p 9864:9864 -p 9866:9866 -p 9867:9867 -p 9868:9868 -p 8485:8485 -p 8480:8480 -p 50200:50200 -p 10020:10020 -p 19888:19888 -p 10033:10033 -p 8032:8032 -p 8030:8030 -p 8088:8088 -p 8031:8031 -p 8033:8033 -p 8040:8040 -p 8048:8048 -p 8042:8042 -p 10200:10200 -p 8188:8188 -p 8047:8047 -p 8788:8788 -p 8046:8046 -p 8045:8045 -p 8049:8049 -p 8089:8089 -p 9871:9871 -p 9865:9865 -p 8481:8481 -p 19890:19890 -p 8044:8044 -p 8190:8190 -p 8091:8091 -h master hadoop-base docker run -itd --name hadoop-node1 -v /Users/zhangbo/Documents/docker_hadoop_data_base/node1:/home/novadeep -p 9870 -p 9864 -p 9866 -p 9867 -p 9868 -p 8485 -p 8480 -p 50200 -p 10020 -p 19888 -p 10033 -p 8032 -p 8030 -p 8088 -p 8031 -p 8033 -p 8040 -p 8048 -p 8042 -p 10200 -p 8188 -p 8047 -p 8788 -p 8046 -p 8045 -p 8049 -p 8089 -p 9871 -p 9865 -p 8481 -p 19890 -p 8044 -p 8190 -p 8091 -h node1 hadoop-base docker run -itd --name hadoop-node2 -v /Users/zhangbo/Documents/docker_hadoop_data_base/node2:/home/novadeep -p 9870 -p 9864 -p 9866 -p 9867 -p 9868 -p 8485 -p 8480 -p 50200 -p 10020 -p 19888 -p 10033 -p 8032 -p 8030 -p 8088 -p 8031 -p 8033 -p 8040 -p 8048 -p 8042 -p 10200 -p 8188 -p 8047 -p 8788 -p 8046 -p 8045 -p 8049 -p 8089 -p 9871 -p 9865 -p 8481 -p 19890 -p 8044 -p 8190 -p 8091 -h node2 hadoop-base docker run -itd --name hadoop-node3 -v /Users/zhangbo/Documents/docker_hadoop_data_base/node3:/home/novadeep -p 9870 -p 9864 -p 9866 -p 9867 -p 9868 -p 8485 -p 8480 -p 50200 -p 10020 -p 19888 -p 10033 -p 8032 -p 8030 -p 8088 -p 8031 -p 8033 -p 8040 -p 8048 -p 8042 -p 10200 -p 8188 -p 8047 -p 8788 -p 8046 -p 8045 -p 8049 -p 8089 -p 9871 -p 9865 -p 8481 -p 19890 -p 8044 -p 8190 -p 8091 -h node3 hadoop-base
- 啟動後查看已啟動的容器,由於默認的docker ps會有端口列,上面的容器開啟的端口太多會妨礙查看。所以我們使用 --format 選項,來重新規定展示內容
# 使用 --format 來重新規定展示內容 docker ps --format "{{.ID}} : {{.Image}} : {{.Command}} : {{.Status}} : {{.Names}} : {{.Networks}}" 8c62fa26c36b : hadoop-base : "/bin/bash" : Up 2 hours : hadoop-node3 : bridge ebaf47e07b28 : hadoop-base : "/bin/bash" : Up 2 hours : hadoop-node2 : bridge 10c0f49daa0f : hadoop-base : "/bin/bash" : Up 2 hours : hadoop-node1 : bridge 40816b388966 : hadoop-base : "/bin/bash" : Up 2 hours : hadoop-master : bridge # --format 選項可以定義的列描述 Placeholder Description .ID Container ID .Image Image ID .Command Quoted command .CreatedAt Time when the container was created. .RunningFor Elapsed time since the container was started. .Ports Exposed ports. .Status Container status. .Size Container disk size. .Names Container names. .Labels All labels assigned to the container. .Label Value of a specific label for this container. For example '{{.Label "com.docker.swarm.cpu"}}' .Mounts Names of the volumes mounted in this container. .Networks Names of the networks attached to this container.
- 至此 hadoop 集群的容器啟動完成,接下來開始做最後的配置。
完成最後的集群部署
- 修改各個容器的hosts和開啟ssh服務
# 依次使用命令進入到容器中 docker exec -it hadoop-master /bin/bash # 修改 master 的 hosts。加入以下節點的 host vim /etc/hosts 172.17.0.3 node1 172.17.0.4 node2 172.17.0.5 node3 # 開啟 ssh service ssh start # 退出 master 容器 exit # 進入 node1 節點的容器中 docker exec -it hadoop-node1 /bin/bash # 修改 node1 的 hosts。加入 master 的 host vim /etc/hosts 172.17.0.2 master # 開啟 ssh service ssh start # 退出 master 容器 exit # 其餘節點同 node1 .... ....
- 啟動 hadoop 集群
# 第一次啟動前,需要執行 namenode format hadoop namenode -format # 啟動 hadoop 集群 start-all.sh # 查看啟動節點 root@master:/# jps -l 609 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 341 org.apache.hadoop.hdfs.server.namenode.NameNode 873 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager 1545 sun.tools.jps.Jps # ssh 到 node1 ssh root@node1 # 查看啟動節點 root@node1:~# jps -l 241 org.apache.hadoop.yarn.server.nodemanager.NodeManager 117 org.apache.hadoop.hdfs.server.datanode.DataNode 447 sun.tools.jps.Jps