一、环境和应用准备
环境:Mac OS
安装包版本:
jdk-8u181-linux-x64.tar.gz
hadoop-2.7.3.tar.gz
apache-hive-3.1.1-bin.tar.gz
mysql-connector-java-5.1.48.tar.gz
已安装:Docker
二、构建images
使用Docker来启动三台Centos7虚拟机,三台机器上安装Hadoop和Java。
1. 获取centos镜像
docker pull centos
查看镜像列表的命令
docker images
2. 安装SSH
以centos7镜像为基础,构建一个带有SSH功能的centos
mkdir ~/centos7-ssh
cd centos7-ssh
vi Dockerfile
内容:
FROM centos
MAINTAINER JanZ
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:pass" | 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"]
- 大意:选择一个已有的os镜像作为基础;安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no;安装openssh-clients;添加测试用户root,密码pass,并且将此用户添加到sudoers里;ssh-keygen 这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录;启动sshd服务并且暴露22端口。
构建新镜像,命名为 centos7-ssh
docker build -t="centos7-ssh" .
执行完成后,可以在镜像列表中看到
docker images
3. 构建Hadoop镜像
基于centos7-ssh镜像构建有JDK和Hadoop的镜像
mkdir ~/hadoop
cd ~/hadoop
注:在hadoop文件夹中(即 Dockerfile 所在目录)提前准备好 jdk-8u181-linux-x64.tar.gz 与 hadoop-2.7.3.tar.gz
vi Dockerfile
内容:
FROM centos7-ssh
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_181 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH
ADD hadoop-2.7.3.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
RUN yum install -y which sudo
基于 centos7-ssh 这个镜像,把 Java 和 Hadoop 的环境都配置好了
构建新镜像,命名为 hadoop
docker build -t="hadoop" .
三、搭建Hadoop集群
搭建有三个节点的hadoop集群,一主两从
主节点:hadoop0 ip:172.18.0.2
从节点1:hadoop1 ip:172.18.0.3
从节点2:hadoop2 ip:172.18.0.4
但是由于docker容器重新启动之后ip会发生变化,所以需要我们给docker设置固定ip。
1. 创建自定义网络(设置固定IP)
查看网络列表
docker network ls
创建自定义网络 mynetwork,并且指定网段:172.18.0.0/16
docker network create --subnet=172.18.0.0/16 mynetwork
2. 创建docker容器
启动三个容器,分别为hadoop0, hadoop1, hadoop2
docker run --name hadoop0 --hostname hadoop0 --net mynetwork --ip 172.18.0.2 -d -P -p 50070:50070 -p 8088:8088 hadoop
docker run --name hadoop1 --hostname hadoop1 --net mynetwork --ip 172.18.0.3 -d -P hadoop
docker run --name hadoop2 --hostname hadoop2 --net mynetwork --ip 172.18.0.4 -d -P hadoop
查看容器列表
docker ps
四、配置Hadoop集群
新开启三个终端,分别进入容器 hadoop0, hadoop1, hadoop2
docker