docker中安装Hadoop | 青训营笔记

129 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

安装docker

添加docker到yum

## 1.安装

[root@hadoop ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-bash: yum-config-manager: 未找到命令

## 2.尝试安装yum-config-manager

[root@hadoop apps]# yum install -y yum-config-manager
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile

- base: mirrors.ustc.edu.cn
- epel: mirrors.ustc.edu.cn
- extras: mirrors.ustc.edu.cn
- updates: mirrors.ustc.edu.cn
  没有可用软件包 yum-config-manager。
  错误:无须任何处理

## 3.经查询,系统没有这个yum-config-manager命令,在yum-utils包里。

[root@hadoop apps]# yum -y install yum-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装:
  yum-utils.noarch 0:1.1.31-54.el7_8
完毕!

## 4.再次安装

[root@hadoop apps]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

安装docker

##2. 安装docker
[root@hadoop yum.repos.d]# yum -y install docker-ce

##3. 配置
[root@hadoop yum.repos.d]# mkdir -p /etc/docker
[root@hadoop yum.repos.d]# mkdir -p /data/apps/docker

##4. 将daemon.json拷贝到/data/apps/docker
##5. 启动docker
[root@hadoop yum.repos.d]# systemctl start docker


[root@hadoop docker]# ps -ef | grep docker
root       5791      1  0 09:04 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root       6014   1896  0 09:05 pts/0    00:00:00 grep --color=auto docker

安装Hadoop

获取镜像

  1. 查看镜像

    [root@hadoop docker]# docker search hadoop
    
  2. 使用命令拉到本地:

    docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop
    
  3. 下载完成之后,通过docker images 可以查看到该镜像:

    [root@hadoop docker]# docker images
    

创建容器

有了镜像之后,我们根据该镜像创建三个容器,分别是一个master用来作为hadoop集群的namenode,剩下两个slave用来作为datanode。

  1. 创建master节点

    [root@hadoop docker]# docker run -i -t --name master -h master -p 50070:50070 -p 9000:9000 -p 9870:9870 -p 8088:8088 -p 10000:10000 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
    
    • -h : 设置了主机名;
    • –name : 容器的名字;
    • -p : 指定对外开放的端口,有其他组件的可以提前把端口映射出来
  2. 建立好Master节点的容器之后,再分别使用两次该命令,创建两个Slave节点。稍微改变其中的参数即可:

    例如创建Slave1节点:

    docker run -i -t --name slave1 -h slave1 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
    

这样集群的基本环境就准备好了。

配置SSH

  1. 进入hadoop容器

    [root@hadoop docker]# docker exec -it hadoop bash
    
  2. 生成密钥

    bash-4.1# /etc/init.d/sshd start
    bash-4.1# ssh-keygen -t rsa
    
    将/root/.ssh下的id_rsa.pub添加到authorized_keys
    bash-4.1# cd /root/.ssh
    bash-4.1# cat id_rsa.pub > authorized_keys
    
  3. 合并密钥并拷贝到容器中

    ## 1.拷贝到本地
    [root@hadoop ssh]# docker cp master:/root/.ssh/authorized_keys ./authorized_keys_master
    [root@hadoop ssh]# docker cp slaves1:/root/.ssh/authorized_keys ./authorized_keys_slave1
    [root@hadoop ssh]# docker cp slaves2:/root/.ssh/authorized_keys ./authorized_keys_slave2
    
    ## 2.合并
    [root@hadoop ssh]# touch authorized_keys
    [root@hadoop ssh]# cat authorized_keys_master authorized_keys_slave1 authorized_keys_slave2 > authorized_keys
    
    ## 3.上传
    [root@hadoop ssh]# docker cp ./authorized_keys master:/root/.ssh/authorized_keys
    [root@hadoop ssh]# docker cp ./authorized_keys slaves1:/root/.ssh/authorized_keys
    [root@hadoop ssh]# docker cp ./authorized_keys slaves2:/root/.ssh/authorized_keys
    
  4. 修改映射文件

    ## 查看本机ip:ifconfig/ip addr
    bash-4.1# vi /etc/hosts
    ...
    172.17.0.2      master
    172.17.0.3      slave1
    172.17.0.4      slave2
    

配置hadoop

为了方便起见,我们可以直接在Master节点进行配置,然后使用scp命令发送到各节点覆盖原来的即可。

  • hadoop-env.sh:修改有关java的环境

    export JAVA_HOME=/usr/java/default
    export HADOOP_PREFIX=/usr/local/hadoop
    export HADOOP_HOME=/usr/local/hadoop
    
  • core-site.xml

    <configuration>
    
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
      </property>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/hadoop/tmp</value>
    </property>
    </configuration>
    
  • hdfs-site.xml

    <configuration>
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop/data</value>
      </property>
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop/name</value>
      </property>
    </configuration>
    
  • mapred-site.xml

    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
    </configuration>
    
  • yarn-site.xml

    <configuration>
     <property>
    <name>yarn.resourcemanager.address</name>
     <value>Master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>Master:8030</value> </property> <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>Master:8031</value>
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
     <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
     <property>
     <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    </configuration>
    
  • slaves

    master
    slave1
    slave2
    
  • 相关目录最好需要手动创建,然后分发给其他节点上

    mkdir /hadoop/data
    mkdir /hadoop/name
    mkdir /hadoop/tmp
    scp -r hadoop root@Slave1:/
    scp -r hadoop root@Slave2:/
    
  • 将这些文件通过scp发送到各个Slave节点上覆盖原来的文件:

    scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml slave1:/opt/tools/hadoop/etc/hadoop/
    

运行hadoop

  • 进行格式化操作:

    hadoop namenode -format
    
  • 启动集群:

    ./start-all.sh
    
  • 使用命令查看各节点信息:hadoop dfsadmin -report