• [大数据]docker搭建Hadoop


    Docker搭建Hadoop

    Written By Landasika

    最简单的方法

    拉取sequenceiq/hadoop-docker镜像

    $ docker pull sequenceiq/hadoop-docker
    
    • 1

    并在后台运行容器,命名为myhadoop0,映射常用端口,并执行初始化命令

    $ docker run -d --name myhadoop0 -p 50070:50070 -p 9000:9000 -p 8088:8088 -p 8040:8040 -p 8042:8042 -p 49707:49707 -p 50010:50010 -p  50075:50075 -p 50090:50090 sequenceiq/hadoop-docker /etc/bootstrap.sh  -bash
    
    • 1

    进入容器

    $ docker exec -it myhadoop0 bash
    
    • 1

    测试MapReduce样例程序

    # /usr/local/hadoop-2.7.0/bin/hadoop jar  /usr/local/hadoop-2.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'
    
    • 1

    在浏览器打开本机localhost:50070

    出现Hadoop的Overview页面,即部署成功Hadoop环境


    • 这里可能会报错:

    image-20220907003116404

    错误导致原因

    1缺少权限

    2没有运行终端

    注:–privileged 加权限

    -it 指定一个伪终端

    docker run --privileged -it -d --name.........(加权限和指定一个伪终端)
    
    • 1

    docker 搭建Hadoop集群

    安装Ubuntu

    docker pull ubuntu:18.04
    
    • 1

    由于我的虚拟机还有web服务功能,所以端口映射没有用80

    拉起镜像

    docker run --privileged -it -d --name ubuntu01 -p 801:80 ubuntu:18.04
    
    • 1

    配置基础环境

    装了docker里的ubuntu,同样我们也要进行一些配置

    docker exec -it XXX(容器ID) /bin/bash
    
    • 1
    换源
    1.备份原来的源
    sudo cp /etc/apt/sources.list /etc/apt/sources_copy.list
    
    • 1
    2.更换源

    这里一般来说可能会有没有装vim的情况

    apt-get update
    apt-get install vim
    
    • 1
    • 2
    echo > /etc/apt/sources.list
    sudo vim /etc/apt/sources.list
    
    • 1
    • 2

    把里面内容都删了,更换为下面的内容

    这里建议更新为清华源

    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后更新源

    apt-get update
    
    • 1
    SSH的配置
    SSH的安装

    由于多个节点之间需要通过SSH进行通信,所以需要安装ssh

    apt-get install openssh-server
    
    • 1

    安装好之后,运行ssh

    /etc/init.d/ssh start或者 service ssh start
    
    • 1

    确认下是否安装运行正常

    ps -e|grep ssh 
    
    • 1

    image-20220907113233390

    将启动命令写入bashrc文件,这样就可以每次打开镜像自动开启ssh服务。

    vim ~/.bashrc
    
    • 1

    在最后一行加上

    /etc/init.d/ssh start
    
    • 1
    配置ssh,生成公私钥
    ssh-keygen -t rsa #一直回车
    cd /root/.ssh/
    cat id_rsa.pub >> authorized_keys
    
    • 1
    • 2
    • 3

    image-20220907113647819

    然后修改/etc/ssh/sshd_config文件,把图中两个箭头所指的地方注释去掉

    vim /etc/ssh/sshd_config
    
    • 1

    image-20220907114358990

    重启ssh

    service ssh restart
    
    • 1

    设置ssh密码

    passwd
    
    • 1
    配置JAVA环境
    安装JDK
    apt-get install default-jdk
    
    • 1
    配置JAVA环境变量

    配置java环境变量(打开~/.bashrc文件,加入以下内容)

    export JAVA_HOME=jdk路径#(可以用 update-alternatives --config java)这条命令查找,注意得出的路径把最后的/bin/java去掉)
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=.:${JAVA_HOME}/bin:$PATH
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    刷新一下bashrc文件
    source ~/.bashrc
    
    • 1
    安装网络工具方便后面查看ip地址
    apt-get install net-tools
    
    • 1
    保存一下镜像

    这里保存一下镜像,避免一会配置出问题

    docker ps
    docker commit [容器id] [新镜像名]  #这里假定新新镜像名为ubuntu/jdkandssh
    docker images
    
    • 1
    • 2
    • 3

    image-20220907155013032

    配置Hadoop

    接下来的步骤是在虚拟机操作

    到hadoop镜像站下载hadoop
    打开下载到的文件夹,把文件移动到home/用户名/build文件中
    这两步是在宿主机运行的

    首先创建build目录

    cd /root
    mkdir build
    cd build
    
    • 1
    • 2
    • 3

    image-20220907161840493

    下载解压Hadoop

    这里使用清华源的镜像

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
    tar -zxvf hadoop-2.10.1.tar.gz -C /usr/local
    
    • 1
    • 2

    hadoop配置java路径(用绝对路径,不出错)

    cd /usr/local/hadoop-2.10.1
    vim etc/hadoop/hadoop-env.sh
    
    • 1
    • 2

    image-20220907172303511

    Hadoop文件配置

    进入/usr/local/hadoop-2.10.1/etc/hadoop目录,涉及的配置文件有:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers

    cd /usr/local/hadoop-2.10.1/etc/hadoop
    
    • 1

    image-20220907172449167

    core-site.xml配置
    <configuration>
          <property>
              <name>hadoop.tmp.dirname>
              <value>file:/usr/local/hadoop/tmpvalue>
              <description>Abase for other temporary directories.description>
          property>
          <property>
              <name>fs.defaultFSname>
              <value>hdfs://master:9000value>
          property>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    hdfs-site.xml配置
    <configuration>
        <property>
            <name>dfs.namenode.name.dirname>
            <value>file:/usr/local/hadoop-x.x.x/namenode_dirvalue>
        property>
        <property>
            <name>dfs.datanode.data.dirname>
            <value>file:/usr/local/hadoop-x.x.x/datanode_dirvalue>
        property>
        <property>
            <name>dfs.replicationname>
            <value>3value>
        property>
    configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    mapred-site.xml配置

    复制mapred-site.xml.template,再修改文件名

    cp mapred-site.xml.template mapred-site.xml
    
    • 1
     <configuration>
        <property>
            <name>mapreduce.framework.namename>
            <value>yarnvalue>
        property>
      configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    配置yarn-site.xml文件
     <configuration>
      
          <property>
              <name>yarn.nodemanager.aux-servicesname>
              <value>mapreduce_shufflevalue>
          property>
          <property>
              <name>yarn.resourcemanager.hostnamename>
              <value>mastervalue>
          property>
      configuration>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    开启hadoop集群

    开启三个容器
    docker run --privileged -it -d -h master --name master ubuntu/sshandjdkandhadoop
    docker run --privileged -it -d -h slave01 --name salve01 ubuntu/sshandjdkandhadoop
    docker run --privileged -it -d -h slave02 --name slave02 ubuntu/sshandjdkandhadoop
    
    • 1
    • 2
    • 3

    image-20220907190955351

    创建集群网络

    查看3个容器的ip地址,分别加入到彼此的etc/hosts文件中

    image-20220907192700678

    不然下一步报错

    image-20220907192728571

    然后将节点加入slave文件中

    cd /usr/local/hadoop-2.10.1
    vim etc/hadoop/slaves
    #将localhost替换成节点名
    slave01
    slave02
    
    • 1
    • 2
    • 3
    • 4
    • 5
    设置节点之间免密登录

    为了方便,设置节点之间免密登录(基于密钥的验证)
    实际上就是把公钥加入到节点之间,并授权即可(这部分可以了解一下私钥和公钥的概念的RSA加密算法)
    因为在前面已经将公钥生成为authorized_key了,所以直接将这个公钥传到各个slave节点上

    彼此加上对方两个主机的ssh

    cd /root/.ssh/
    scp authorized_keys root@slave01:~/.ssh/
    
    • 1
    • 2

    image-20220907192358606

    验证是否成功

    image-20220907192906553

    启动集群
    cd /usr/local/hadoop0x.x.x
    ./bin/hdfs namenode -format
    ./sbin/start-all.sh
    
    • 1
    • 2
    • 3

    并使用jps查看结果(由于我已经格式化过了,就不再格式化了)

    image-20220907201111966

    验证

    直接输入

    hadoop version
    
    • 1

    会报错:

    image-20220907202436468

    解决

    配置环境变量,根目录下的 .bashrc 文件

    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    • 1
    • 2

    再次执行,将所有更改应用到当前运行的系统

    source ~/.bashrc
    
    • 1

    image-20220907202236365

    l
    cd /usr/local/hadoop0x.x.x
    ./bin/hdfs namenode -format
    ./sbin/start-all.sh

    
    并使用jps查看结果(由于我已经格式化过了,就不再格式化了)
    
    [外链图片转存中...(img-gWaJB5az-1662569474018)]
    
    
    
    
    
    ### 验证
    
    直接输入
    
    ```shell
    hadoop version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    会报错:

    [外链图片转存中…(img-dRrW3tT7-1662569474018)]

    解决

    配置环境变量,根目录下的 .bashrc 文件

    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    • 1
    • 2

    再次执行,将所有更改应用到当前运行的系统

    source ~/.bashrc
    
    • 1

    [外链图片转存中…(img-FxOObZgb-1662569474019)]

  • 相关阅读:
    JavaSE——数组习题
    GraphQL(1):GraphQL简介
    牛客多校-Link with Arithmetic Progression-(三分总结)
    软件使用经验合集(操作系统、常用软件)
    网上期货开户合约签署流程
    AWK语言第二版 2.6个人库 2.7小结
    【Redis】深入理解 Redis 持久化机制 —— RDB 和 AOF
    MySQL高级篇知识点——数据库其它调优策略
    solidity 合约转java
    python 打包可执行文件-pyinstaller详解
  • 原文地址:https://blog.csdn.net/Jeff_12138/article/details/126756693