0%

Linux虚拟化Docker之自定义Hadoop基础环境的Docker镜像并发布

上一篇写了一个Docker的 Java,Scala环境的Docker镜像的制作,使用的是构建的方式。今天将的是在容器基础上制作新的镜像。正好就以我们大数据环境Hadoop集群环境为例。本人也是第一次在Docker上搭建,会存在许多的问题,正好可以与大家交流一番。

准备工作

这里,我们需要先准备一下我们的基础环境,我们昨天的基础环境是存在问题的,比如说,没有 vim , 没有 ip addr 等,有点不方便使用。所以我们在昨天的基础上再重新构建一个发布出去:

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
# 指定基镜像 centos
FROM centos:centos7.7.1908
MAINTAINER Fisher "sunyang.iot@gmail.com"
# 先执行更新
RUN yum -y update
# 复制jdk到指定目录
ADD jdk-8u201-linux-x64.tar.gz /opt/module
# 配置jdk环境
ENV JAVA_HOME /opt/module/jdk1.8.0_201
ENV PATH $PATH:$JAVA_HOME/bin
# 检测java版本,确认是否安装成功
RUN java -version
ADD scala-2.11.11.tgz /opt/module
# 配置SCALA 环境
ENV SCALA_HOME /opt/module/scala-2.11.11
ENV PATH $PATH:$SCALA_HOME/bin
# 安装 Vim
RUN yum -y install vim
# 安装 ip
RUN yum -y install initscripts
RUN yum -y install openssh-server
RUN yum -y install openssh-clients

RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

CMD [ "sh", "-c", "systemctl start sshd;bash"]

我们构建好之后,我们的新镜像就是: sun1534/docker-java-scala:7.8.11.1,我们就在这个基础上去搭建我们的大数据Hadoop的基础环境。一步一步来。

搭建准备

搭建环境,我们可以准备三个 docker 容器,分别是 master , slave01 , slave02 .

1
2
3
docker run -itd --privileged --name master -h master sun1534/docker-java-scala:7.8.11.1  /usr/sbin/init
docker run -itd --privileged --name slave01 -h slave01 sun1534/docker-java-scala:7.8.11.1 /usr/sbin/init
docker run -itd --privileged --name slave02 -h slave02 sun1534/docker-java-scala:7.8.11.1 /usr/sbin/init
1
2
3
docker exec -it master /bin/bash
docker exec -it slave01 /bin/bash
docker exec -it slave02 /bin/bash

老夫尝试的从master 使用 ssh 访问 slave01 ,有错误: ssh: connect to host slave01 port 22: Connection refused . 老夫也不知道咋回事,这也是第一次折腾呀。连接拒绝了,先看看防火墙,在查看防火墙的时候报了这么一个错误:Failed to get D-Bus connection: Operation not permitted , 这个错误是因为 我们的 容器中有用到 systemctl 的指令,但是他没有权限去执行。所以我们在创建容器的时候就应该使用:docker run -itd --privileged --name master -h master sun1534/docker-java-scala:7.8.11.1 /usr/sbin/init, 当然和上面的是一样的了,因为上面的是我修改后的嘛。这个权限问题解决之后,我发现这个问题居然解决了。好神奇。

开始部署我们的Hadoop

现在的问题,就相当于在三台服务器里面去搭建我们的Hadoop集群环境。这一个可以参看我之前的博文:大数据框架开发基础之Hadoop(2) 从零开始搭建集群. 这里呢,我就不和大家做其他的介绍说明了。我这里也全部在 root 账户下去执行了,也就不说给 hadoop开辟hadoop用户,给hive一个hive用户啥的了。只是一个测试环境,我们稍微简单一点。同样。这里我只搭建一个很简单的集群环境,至于针对这个集群要做什么样的优化,就是后面的使用它的人来做了。

提交我们的修改

1
2
3
docker commit -m="docker-hadoop-namenode" -a="sunyang.iot@gmail.com" 01c751404010 sun1534/docker-hadoop-namenode:1.0
docker commit -m="docker-hadoop-datanode" -a="sunyang.iot@gmail.com" 85523e229c79 sun1534/docker-hadoop-datanode:slave01.1.0
docker commit -m="docker-hadoop-datanode" -a="sunyang.iot@gmail.com" da010995d410 sun1534/docker-hadoop-datanode:slave02.1.0

然后,我们在提交到Docker Hub上去.
docker-hadoop-namenode
docker-hadoopdatanode

怎么使用我们镜像

版本号说明

  • 基础镜像: docker-base
  • hadoop: 2.7.2
  • Java: 1.8.0_201
  • Scala: 2.11.11

1.0

搭建的基础服务,默认为三个机器。

使用说明

镜像拉取

1
2
3
4
5
6
# 拉去我们的 namenode
docker pull sun1534/docker-hadoop-namenode:1.0
# 拉去我们的 datanode
# slave01/slave02 是我们的两个不同的节点,我们的JobHistory,ResourceManager,SecondaryNameNode 分别部署在三个节点上,因此都需要拉取
docker pull sun1534/docker-hadoop-datanode:slave01.1.0
docker pull sun1534/docker-hadoop-datanode:slave02.1.0

配置说明

服务说明

服务名 | 机器 | 开放端口
—|—|—
NameNode|master|50070
ResourceManager|slave01|8088
JobHistory|slave01|10020,19888

创建容器

我们的容器创建后,是需要使用到 systemctl 命令的,因此,我们使用下面的方式去创建我们的容器,我们可根据需要去开放我们的端口。

1
docker run -itd --privileged --name master -h master -p 50070:50070  sun1534/docker-hadoop-namenode:1.0  /usr/sbin/init

容器创建之后,我们需要手动修改我们的 /etc/hosts,如果我们不知道我们的容器的 IP 地址,可以 使用下面的命令去获取:

1
docker inspect <container name or id>| grep IPAddress

在创建好容器后,请先修改 /etc/hosts 文件,增加内容如下:

1
2
3
127.17.0.2      master
127.17.0.3 slave01
127.17.0.4 slave02

到此,我们的Hadoop集群环境便可以启动了。

1
sbin/start-all.sh
这是打赏的地方...

本文标题:Linux虚拟化Docker之自定义Hadoop基础环境的Docker镜像并发布

文章作者:Mr.Sun

发布时间:2020年01月03日 - 09:35:17

最后更新:2020年04月13日 - 10:16:06

原始链接:http://www.blog.sun-iot.xyz/posts/3230

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------Thanks for your attention---------