美文网首页
Hadoop on docker

Hadoop on docker

作者: 帅哥家的猫 | 来源:发表于2019-12-19 14:50 被阅读0次

    一、这只是一个步骤说明,旨在教大家怎么在docker上搭建hadoop集群以及附着于hadoop的其他环境(hive,pig,hbase,spark……)。

    二、详细步骤

    1、在服务器上下载并且配置docker:

    最新版的ubuntu和centos中都已经添加了docker的源

    Ubuntu

    $ sudo apt-get -y install docker.io
    
    

    CentOS:

    $ yum -y install docker.io
    
    

    下载完了之后启动docker

    $ sudo /etc/init.d/docker start
    
    

    执行 sudo docker 发现docker已经咱装成功了

    $ docker
    Usage: docker [OPTIONS] COMMAND [arg...]
    
    A self-sufficient runtime for linux containers.
    
    Options:
    --api-cors-header=                   Set CORS headers in the remote API
    -b, --bridge=                        Attach containers to a network bridge
    --bip=                               Specify network bridge IP
    -D, --debug=false                    Enable debug mode
    -d, --daemon=false                   Enable daemon mode
    --default-ulimit=[]                  Set default ulimits for containers
    --dns=[]                             DNS server to use
    
    

    目前对docker的执行都是在root用户下面的,为了当前工作用户执行方面,可以把当前用户添加到docker组里面去(asha 为当前用户)

    $ sudo groupadd docker
    $ sudo gpasswd -a asha docker
    
    

    2、docker 常用命令:

    $ docker search superset                    #查看可用的镜像
    
    $ docker images                             # 查看所有images
    
    $ docker ps                                 # 查看所有活动容器
    
    $ docker ps -a                              # 查看所有容器
    
    $ docker rm `docker ps -a -q`               # 删除所有不活动的容器                
    
    $ docker pull centos                        #从仓库拉取镜像
    
    $ docker run -i -t centos /bin/bash         #运行一个镜像
    
    $ docker commit 3a09b2588478 mynewimage     #将一个容器提交为镜像
    
    $ docker save mynewimage | bzip2 -9 -c> /home/save.tar.bz2             #把某个镜像打包为tar文件
    
    $ bzip2 -d -c < /home/save.tar.bz2 | docker load                       #加载镜像
    
    $ docker rmi [image-id]  docker rmi -f [image-id]                      #删除镜像
    
    $ cat /home/export.tar | sudo docker import - mynewimage               #导入Image镜像
    
    

    3、单个hadoop环境的搭建

    目前比较常用也是比较成熟的搭建hadoop环境的方法是用cloudera,也就是安装一台cloudera manage的服务器, 其他的安装都是在这台服务器的web上进行,鉴于想要发挥docker的优势,我们还是从头开始搭建hadoop集群环境。

    由于安装完了 是还没有后镜像的,而 docker pull ubuntu命令仅仅能从docker官方仓库拉取镜像, 国内貌似很慢,好吧是根本拉动,所以我们从国内官方仓库上拉取,常用的是时速云,灵雀云,DaoCloud这几家, 我用的灵雀云。打开仓库页面,搜索ubuntu。点开任意一个,发现下载仓库地址 :docker pull index.alauda.cn/alauda/ubuntu

    默认拉取的是最新版,我们可以选取我们想要的tag,比如ubuntu 14.04

    $ docker pull index.alauda.cn/alauda/ubuntu:14.04
    $ docker run -ti index.alauda.cn/alauda/ubuntu:14.04
    
    

    这时我们进入了第一个容器 container的交互界面,这个可以看作是一个完全独立的Linux环境,我们将进行单机hadoop环境的搭建。 其中 root@0e80677833ea @后面的是主机名称,也是这个container的id,应该记住。

    Ⅰ)、创建工作用户,我们命名为hadoop,并为之创建密钥

    $ adduser hadoop   #一路回车
    $ su - hadoop;
    $ ssh-keygen -t rsa
    
    

    这时 cd ~/.ssh 发现有 id_rsa和id_rsa.pub 我们继续设置免密码登录

    $ cd .ssh ; ll
    drwx------  2 asha asha 4096  1月  5 11:51 ./
    drwxr-xr-x 42 asha asha 4096  1月 26 14:16 ../
    -rw-------  1 asha asha 1679  1月  5 11:50 id_rsa
    -rw-r--r--  1 asha asha  393  1月  5 11:50 id_rsa.pub
    $ cp id_rsa.pub authorized_keys
    $ ssh localhost
    
    

    如果登陆成功,说明设置免密码成功。

    Ⅱ)、下载java,并配置环境 从稳定性上考虑比较主流的方式是增加oracle的源,不太推荐用java的open-sdk

    $ sudo apt-get install software-properties-common #已经安装请忽略
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java8-installer
    
    

    配置工作用户的java环境变量.vim ~/.bashrc

    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    export PATH=$JAVA_HOME/bin:$PATH     
    
    

    Ⅲ)、下载hadoop,目前用的是比较稳定的hadoop 2.6版本

    $ sudo mkdir /apache                   # 创建hadoop相关项目的专用目录
    $ sudo chown -R hadoop:hadoop apache   # 将该目录的权限赋给hadoop用户
    $ wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz 
    $ tar zxvf hadoop-2.6.0.tar.gz
    
    

    Ⅳ)hadoop配置了,详细见三个配置文件。具体配置参见***(占位,以后再写) Ⅴ)推出container,:exit,exit。

    4、通过container 提交镜像 上一步推出之后,我们用上次的container 作为镜像的来源,需要用到container id

    $ docker commit 0e80677833ea ubuntu:hadoop
    $ docker images
    

    至此,我们已经创建了一个带hadoop环境的镜像,下一步我们会通过这镜像创建多个container 组成的集群

    5、创建基于hadoop镜像的集群: 我们计划搭建一个四个节点的集群,其中包括3个工作节点和一个主节点,主节点命名为node1,工作节点分别命名为node2,node3,node4 开4个终端窗口,分别作如下操作:

    $ docker run -ti -h node1 ubuntu:hadoop
    $ docker run -ti -h node2 ubuntu:hadoop
    $ docker run -ti -h node1 ubuntu:hadoop
    $ docker run -ti -h node1 ubuntu:hadoop
    

    这样就相当于创建四台机器的集群,注意:需要到每个集群的hosts里面重新配置node1,node2,node3,node4,以便能够免密码登录,当然 还可以做一个代理dns,此处还需要继续研究下。

    因为是测试集群,集群搭建好了之后,需要依次执行下面操作,才能启动集群

    • 启动ssh :
      sudo /etc/init.d/ssh start

    • 格式化hdfs,在node1上执行下面命令,看是否成功
      hadoop namenode -format

    • 启动hadoop集群,在node1上 :
      /apache/hadoop/sbin/start-all.sh

    • 通过jps命令,如果出现如下进程,主节点运行无误:

    8965 NameNode 9895 
    9567 NodeManager 
    9442 ResourceManager 
    9285 SecondaryNameNode 
    9088 DataNode
    

    通过在主节点上运行 hadoop dfsadmin -report 查看其他节点是否启动

    6、至此我们的hadoop集群就已经搭建完了,有几个地方需要注意:

    Ⅰ) container 实际上是一个进程,所以如果主机(物理机)关机或者重启之后,container将不存在,所以尽量不要关机,关机的情况可以先提交成镜像。平时可以关闭终端窗口(xshell,secureCRT),但不可推出contianer(exit),否则数据会丢失。

    Ⅱ) 如何进入已经存在的container: docker exec -ti /bin/bash 或者通过ssh -i tsa hadoop@node1
    推荐前一种,后一种主要用于往docker的机群中传输文件(scp),或者作为集群的外部数据来源(比如可以把kafka搭建到这里),外部机器和docker 的服务器都是可以作为内网互相访问的。

    挂载共享目录

    以上我们大体了了解了怎么安装基于docker的hadoop集群。虽然一次产生镜像,多次启动进程的方式让复用性有了很大提高,但是还是有好多公共的比如配置文件打在了docker每个单独的进程中了,这是一种资源浪费也不便于对一致的配置文件统一的管理。这时候挂载共享目录就很重要了

    docker挂载本地目录的方法:

    Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:

    docker run -it -v /hostdir:/dockerdir centos /bin/bash
    

    这样在容器启动后,容器内会自动创建/dockerdir 的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。

    相关文章

      网友评论

          本文标题:Hadoop on docker

          本文链接:https://www.haomeiwen.com/subject/qjbmnctx.html