zoukankan      html  css  js  c++  java
  • Linux虚拟化Docker之自定义Hadoop基础环境的Docker镜像并发布

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

    准备工作

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

    # 指定基镜像 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 .

    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
    
    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用户啥的了。只是一个测试环境,我们稍微简单一点。同样。这里我只搭建一个很简单的集群环境,至于针对这个集群要做什么样的优化,就是后面的使用它的人来做了。

    提交我们的修改

     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

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

    使用说明

    镜像拉取

    # 拉去我们的 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 命令的,因此,我们使用下面的方式去创建我们的容器,我们可根据需要去开放我们的端口。

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

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

    docker inspect <container name or id>| grep IPAddress
    

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

    127.17.0.2      master
    127.17.0.3      slave01
    127.17.0.4      slave02
    

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

    sbin/start-all.sh
    
  • 相关阅读:
    多线程的设计模式
    Deque 双端队列
    并发Queue
    并发类容器
    同步类容器
    java0926
    第十二次作业
    第十一次作业
    第十次
    第九次
  • 原文地址:https://www.cnblogs.com/sun-iot/p/12144929.html
Copyright © 2011-2022 走看看