1.构建java与hadoop的基础镜像
-
新建目录
mkdir docker-hadoop
-
使用
rz -E
上传jdk1.8
的tar.gz
压缩包和hadoop3.1.3的压缩包
-
编辑Dockerfile文件,构建一个带ssh、java、hadoop、vim环境的centos镜像
FROM centos:7.5.1804 # 安装jdk、hadoop到/opt/service ADD jre-8u361-linux-x64.tar.gz hadoop-3.1.3.tar.gz /opt/service/ # 设置工作目录 WORKDIR /opt/service # 安装ssh服务并更换阿里云yum源 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \ sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ yum makecache && \ yum install -y openssh-server openssh-clients vim && \ sed -i '/^HostKey/'d /etc/ssh/sshd_config && \ echo 'HostKey /etc/ssh/ssh_host_rsa_key' >> /etc/ssh/sshd_config && \ # 生成密匙 ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key && \ # 更改root用户登录密码 echo 'root:123456' | chpasswd && \ echo '#!/bin/bash'>>/opt/run.sh && \ echo '/usr/sbin/sshd -D'>> /opt/run.sh && \ chmod +x /opt/run.sh # 暴露22端口 EXPOSE 22 CMD ["/opt/run.sh"]
运行
docker build -t centos_hadoop:1.0 .
,生成镜像。
2.构建docker-compose
-
编辑
docker-compose.yml
,搭建三个节点的集群hadoop102 hadoop103 hadoop104 HDFS NameNode | DataNode DataNode SecondaryNameNode | DataNode YARN NodeManager ResourceManager | NodeManager NodeManager
Hadoop 3.x 中常用的端口如下:
- 9870:NameNode Web 界面(HDFS)
- 8088:ResourceManager Web 界面(YARN)
- 9864:DataNode Web 界面(HDFS)
- 8042:NodeManager Web 界面(YARN)
docker-compose.yml
:
version: "3"
services:
hadoop102:
image: centos_hadoop:1.0
container_name: hadoop102
ports:
- 9870:9870
- 9000:9000
hostname: hadoop102
networks:
my_network:
ipv4_address: 172.19.0.102
hadoop103:
image: centos_hadoop:1.0
container_name: hadoop103
ports:
- 9864:9864
- 8088:8088
hostname: hadoop103
networks:
my_network:
ipv4_address: 172.19.0.103
hadoop104:
image: centos_hadoop:1.0
container_name: hadoop104
hostname: hadoop104
networks:
my_network:
ipv4_address: 172.19.0.104
networks:
my_network:
ipam:
driver: default
config:
- subnet: "172.19.0.0/16"
编辑好后使用docker-compose config -q
检查是否有错误输出,有错误请修改。
无错误使用docker-compose up -d
启动集群。
3.设置hadoop的配置并分发到其他机器
-
由于Dockerfile中ENV设置的环境变量在ssh登录环境中会失效,所以用下面的方法解决
使用
docker exec -it hadoop102 bash
进入hadoop102 ,vim /etc/profile.d/my_env.sh
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 export JAVA_HOME=/opt/service/jre1.8.0_361