yarn作为目前最流行的分布式计算资源管理平台,为Hadoop MR、spark、Flink等提供了资源容器
Docker File 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 FROM hub.c.163 .com/public/centosRUN yum clean all RUN yum install -y yum-plugin-ovl || true RUN yum install -y vim tar wget curl rsync bzip2 iptables tcpdump less telnet net-tools lsof sysstat cronie python-setuptools RUN yum clean all RUN cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime EXPOSE 22 RUN mkdir -p /etc/supervisor/conf.d/ RUN echo [include] >> /etc/supervisord.conf RUN echo 'files = /etc/supervisor/conf.d/*.conf' >> /etc/supervisord.conf CMD ["/usr/bin/supervisord" ] MAINTAINER averyzhangRUN 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:abc.123" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers RUN rm -rf /etc/ssh/ssh_host_rsa_key RUN rm -rf /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key EXPOSE 22 CMD ["/usr/sbin/sshd" , "-D" ] RUN yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 ENV JAVA_HOME /usr/lib/jvm/jre-openjdk/ENV JRE_HOME ${JAVA_HOME}ENV PATH $JAVA_HOME/bin:$PATHENV CLASSPATH $CLASSPATH:.:$JAVA_HOME/libRUN echo "export JAVA_HOME=/usr/lib/jvm/jre-openjdk/" >> /etc/profile.d/java.sh RUN echo "export JRE_HOME=${JAVA_HOME} " >> /etc/profile.d/java.sh RUN echo "export PATH=$JAVA_HOME /bin:$PATH " >> /etc/profile.d/java.sh RUN echo "export CLASSPATH=$CLASSPATH :.:$JAVA_HOME /lib" >> /etc/profile.d/java.sh RUN mkdir -p /data/ RUN wget https://downloads.lightbend.com/scala/2.10.7/scala-2.10.7.rpm RUN yum install -y scala-2.10.7.rpm ENV SCALA_HOME /usr/share/javaRUN echo "export SCALA_HOME=/usr/share/java" >> /etc/profile.d/java.sh ADD hadoop-2.7.7.tar /data/hadoop ENV HADOOP_HOME /data/hadoopENV HADOOP_CONF_DIR ${HADOOP_HOME}/etc/hadoopENV YARN_HOME ${HADOOP_HOME}ENV YARN_CONF_DIR ${YARN_HOME}/etc/hadoop RUN echo "export HADOOP_HOME=/data/hadoop" >> /etc/profile.d/hadoop.sh RUN echo "export HADOOP_CONF_DIR=${HADOOP_HOME} /etc/hadoop" >> /etc/profile.d/hadoop.sh RUN echo "export YARN_HOME=${HADOOP_HOME} " >> /etc/profile.d/hadoop.sh RUN echo "export YARN_CONF_DIR=${YARN_HOME} /etc/hadoop" >> /etc/profile.d/hadoop.sh
制作image 1 docker build -t="avery/centos-yarn" .
创建yarn节点 1 2 3 4 docker run --name yarn0 --hostname yarn0 -d -P -p 50070:50070 -p 8088:8088 avery/centos-yarn docker run --name yarn1 --hostname yarn1 -d -P avery/centos-yarn docker run --name yarn2 --hostname yarn2 -d -P avery/centos-yarn docker run --name yarn3 --hostname yarn3 -d -P avery/centos-yarn
查看三个container的ip:
1 2 3 4 5 6 7 8 % docker inspect --format='{{.NetworkSettings.IPAddress}}' yarn0 172.17.0.2 % docker inspect --format='{{.NetworkSettings.IPAddress}}' yarn1 172.17.0.3 % docker inspect --format='{{.NetworkSettings.IPAddress}}' yarn2 172.17.0.4 % docker inspect --format='{{.NetworkSettings.IPAddress}}' yarn3 172.17.0.5
节点
备注
ip
yarn0
master
172.17.0.2
yarn1
slaver
172.17.0.3
yarn2
slaver
172.17.0.4
yarn3
slaver
172.17.0.5
查看端口
1 2 3 4 5 6 docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e150f9141cbd avery/centos-yarn "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:32771->22/tcp yarn3 9fe0eb86b3e9 avery/centos-yarn "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:32770->22/tcp yarn2 1d5c0ea3d3b3 avery/centos-yarn "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:32769->22/tcp yarn1 60a9cb47ff0c avery/centos-yarn "/usr/sbin/sshd -D" 2 minutes ago Up 2 minutes 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32768->22/tcp yarn0
连接container 验证ssh连接
1 2 % ssh root@localhost -p 32774 # 输入密码 abc.123
使用exec
1 docker exec -it yarn0 /bin/bash
修改container的主机名 分别修改三个container的hosts
添加下面配置
1 2 3 4 172.17.0.2 yarn0 172.17.0.3 yarn1 172.17.0.4 yarn2 172.17.0.5 yarn3
ssh 免密 设置ssh免密码登录 在yarn0上执行下面操作
1 2 3 4 5 6 7 8 9 10 cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa # (一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i yarn0 ssh-copy-id -i yarn1 ssh-copy-id -i yarn2 ssh-copy-id -i yarn3
在yarn1上执行下面操作
1 2 3 4 5 6 7 8 cd ~ cd .ssh ssh-keygen -t rsa # (一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i yarn1 ssh-copy-id -i yarn2 ssh-copy-id -i yarn3
在yarn2上执行下面操作
1 2 3 4 5 6 7 8 9 cd ~ cd .ssh ssh-keygen -t rsa # (一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i yarn0 ssh-copy-id -i yarn1 ssh-copy-id -i yarn2 ssh-copy-id -i yarn3
至此,Docker搭建Hadoop集群的准备工作
Hadoop 安装 登录yarn0,修改Hadoop配置
配置 Hadoop,cd ~/hadoop-2.7.2/etc/hadoop进入hadoop配置目录,需要配置有以下7个文件:hadoop-env.sh,yarn-env.sh,slaves,core-site.xml,hdfs-site.xml,maprd-site.xml,yarn-site.xml。
在hadoop-env.sh中配置JAVA_HOME
1 2 # The java implementation to use. export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
在yarn-env.sh中配置JAVA_HOME
1 2 # some Java parameters export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
在slaves中配置slave节点的ip或者host,
yarn1 yarn2 yarn3
修改core-site.xml
1 2 3 4 5 6 7 8 9 10 <configuration > <property > <name > fs.defaultFS</name > <value > hdfs://yarn0:9000/</value > </property > <property > <name > hadoop.tmp.dir</name > <value > file:/home/fang//hadoop-2.7.2/tmp</value > </property > </configuration >
修改hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <configuration > <property > <name > dfs.namenode.secondary.http-address</name > <value > yarn0:9001</value > </property > <property > <name > dfs.namenode.name.dir</name > <value > file:/home/fang/hadoop-2.7.2/dfs/name</value > </property > <property > <name > dfs.datanode.data.dir</name > <value > file:/home/fang/hadoop-2.7.2/dfs/data</value > </property > <property > <name > dfs.replication</name > <value > 3</value > </property > </configuration >
修改mapred-site.xml
1 2 3 4 5 6 <configuration > <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property > </configuration >
修改yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <configuration> <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>yarn0:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>yarn0:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>yarn0:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>yarn0:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>yarn0:8088</value> </property> </configuration>
将配置好的hadoop-2.7.2文件夹分发给所有slaves节点
1 2 3 scp -r hadoop/* root@yarn1:/data/hadoop scp -r hadoop/* root@yarn2:/data/hadoop scp -r hadoop/* root@yarn3:/data/hadoop
启动HDFS和yarn 格式化HDFS
1 2 3 4 bin/hadoop namenode -format #格式化namenode 注:若格式化之后重新修改了配置文件,重新格式化之前需要删除tmp,dfs,logs文件夹。 sbin/start-dfs.sh #启动dfs sbin/start-yarn.sh #启动yarn
检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@yarn0 hadoop]# jps 709 ResourceManager 984 Jps 346 NameNode 543 SecondaryNameNode [root@yarn0 hadoop]# ssh yarn1 Last login: Sun Jun 2 23:21:51 2019 from yarn0 [root@yarn1 ~]# jps 305 NodeManager 449 Jps 200 DataNode [root@yarn1 ~]# ssh yarn2 Last login: Sun Jun 2 23:22:18 2019 from yarn0 [root@yarn2 ~]# jps 193 DataNode 442 Jps 298 NodeManager [root@yarn2 ~]# ssh yarn3 Last login: Sun Jun 2 23:22:25 2019 from yarn0 [root@yarn3 ~]# jps 178 DataNode 283 NodeManager 427 Jps
yarn web
浏览器打开 http://localhost:8088
搞定收工