• Docker容器搭建Hadoop集群(hadoop-3.1.3)


    Docker容器环境下搭建Hadoop集群(完全分布式)

    hadoop版本为hadoop-3.1.3

    (1)安装额外的速度较快的镜像库

    yum install -y epel-release

    (2)安装同步工具,方便在多台服务器上进行文件的传输

    yum install -y rsync

    (3)安装网络工具

    yum install -y net-tools

    (4)安装具有代码高亮显示的编辑器

    yum install -y vim

    一、docker安装

    安装所需要的资源包

    yum install -y yum-utils

    设置仓库(阿里云)

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    安装docker

    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    查看安装列表

    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    启动docker

    systemctl start docker

    关闭防火墙

    1. sudo systemctl stop firewalld
    2. sudo systemctl disable firewalld

    关闭 iptables

    1. sudo systemctl stop iptables
    2. sudo systemctl disable iptables

    查看状态

    systemctl status docker

    查看安装版本

    docker version

    拉取镜像

    docker pull hello-world

    通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。

    docker run hello-world

    二、Docker基础使用命令

    1、启动docker

    systemctl start docker

    2、停止docker

    systemctl stop docker

    3、重启docker

    systemctl restart docker

    4、查看docker

    systemctl status docker

    5、设置开机自启

    systemctl enable docker

    6、查看docker概要信息

    docker info

    7、查看镜像

    docker images

    8、拉取镜像

    docker pull hello-world

    9、运行镜像

    docker run hello-world

    10、运行一个容器

    docker run: 运行一个容器。

    示例:docker run -it ubuntu:latest /bin/bash,这将在一个Ubuntu镜像上启动一个交互式的bash会话。

    docker run -it ubuntu:latest /bin/bash

    11、执行交互模式

    docker exec -it <容器ID或容器名称> <命令>

    12、列出正在运行的容器

    docker ps : 列出正在运行的容器。

    docker ps

    查看所有容器

    docker ps -a

    13、停止一个正在运行的容器

    docker stop: 停止一个正在运行的容器。

    示例:docker stop <容器ID或名称>,这将停止指定的容器。

    14、删除一个容器

    docker rm: 删除一个容器。

    示例:docker rm <容器ID或名称>,这将删除指定的容器。

    docker rm -f <容器ID或名称>  #强制删除

    15、删除一个镜像

    docker rmi: 删除一个镜像。

    示例:docker rmi <镜像ID或名称>,这将删除指定的镜像。

    要先停止容器才能删除镜像

    一、创建docker 网络

    docker network create --driver=bridge hadoop

    使用下面这个命令查看 Docker 中的网络

    docker network ls

    1、运行一个容器并加入到 hadoop 网络:

    1. docker run -itd --name master --network hadoop centos:7 /bin/bash
    2. docker run -itd --name slave1 --network hadoop centos:7 /bin/bash
    3. docker run -itd --name slave2 --network hadoop centos:7 /bin/bash

    拉取容器后,可以 exit 退出

    2、连接容器

    1. docker exec -it master /bin/bash
    2. docker exec -it slave1 /bin/bash
    3. docker exec -it slave2 /bin/bash

    查看

    docker network inspect hadoop

    二、安装必备软件 ssh jdk8

    1、安装jdk8

    在宿主机上发文件

    docker cp jdk-8u161-linux-x64.tar.gz master:/opt/software/

    在容器中解压

    tar -zxvf jdk-8u161-linux-x64.tar.gz -C /opt/module/

    配置 /etc/profile文件

    vi /etc/profile
    1. export JAVA_HOME=/opt/module/jdk1.8.0_161
    2. export PATH=$PATH:$JAVA_HOME/bin

    查看(生效环境变量)

    1. source /etc/profile
    2. java -version

    2、安装ssh

    在容器安装

    1. yum install openssh-server -y
    2. yum install openssh-clients -y
    3. yum -y install passwd openssl openssh-server openssh-clients -y
    4. yum -y update -y

    报错

    解决

    1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    2. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    3. yum clean all
    4. yum makecache
    5. yum -y update

    3、解决 SSH 服务启动时可能出现的报错

    创建 /var/run/sshd/目录,要不然sshd服务启动会报错

    mkdir /var/run/sshd/

    方法一:

    编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM no改为UsePAM yes

    vi /etc/ssh/sshd_config

    方法二:

     sed -i "s/UsePAM.*/UsePAM yes/g" /etc/ssh/sshd_config

    4、创建公钥

    输入命令后,按两次回车键即可生成

    1. ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    2. ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
    3. ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

    完成上述几步后,可以开启ssh服务了

    /usr/sbin/sshd

    此时使用命令ps -ef | grep sshd 便可以看到

    1. ps -ef | grep sshd
    2. yum -y install lsof

    5、修改root密码

    passwd
    ​
    #回车输入密码
    ​
    #都要进行改密码

    6、配置免密

    输入命令后按四次回车键

    ssh-keygen -t rsa

    分发密钥

    ssh-copy-id 主机名

    报错

    解决

    1. cat ~/.ssh/id_rsa.pub
    2. cat id_rsa.pub >> ~/.ssh/authorized_keys
    3. #将密钥内容手动复制到个节点上
    4. 把authorized_keys内容复制到个节点上
    5. #免密登录
    6. ssh root@slave1

    7、vi ~/.bashrc

    在容器中添加

    vi ~/.bashrc

    在文件最后写入

    /usr/sbin/sshd -D &

    这样我们每次登录centos系统时,都能自动启动sshd服务

    8、保存镜像文件

    使用命令docker ps查看当前运行的容器:

    docker ps

    然后使用命令docker commit 容器id kerin/centos7:basic

    docker commit 容器id kerin/centos7:basic

    使用命令docker images 查看当前docker中所有镜像

    docker images

    三、制作安装hdoop镜像

    1、安装hdoop

    在宿主机

    1. cd /opt/software/
    2. docker cp hadoop-3.1.3.tar.gz master:/opt/software/

    进入容器解压

    1. cd /opt/software/
    2. tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

    2、配置环境变量

    1. vi /etc/profile
    2. #添加以下内容
    3. export HADOOP_HOME=/opt/module/hadoop-3.1.3
    4. export PATH=$PATH:$HADOOP_HOME/bin
    5. export PATH=$PATH:$HADOOP_HOME/sbin
    6. # 生效环境变量
    7. source /etc/profile
    8. # 查看 hadoop 版本
    9. hadoop version

    3、配置Hadoop

    集群分布

    (1)、配置core-site.xml

    vi core-site.xml

    添加以下内容

    1. <configuration>
    2. <!-- 指定NameNode的地址 -->
    3. <property>
    4. <name>fs.defaultFS</name>
    5. <value>hdfs://ha01:8020</value>
    6. </property>
    7. <!-- 指定hadoop数据的存储目录 -->
    8. <property>
    9. <name>hadoop.tmp.dir</name>
    10. <value>/opt/module/hadoop-3.1.3/data</value>
    11. </property>
    12. <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    13. <!-- <property>
    14. <name>hadoop.http.staticuser.user</name>
    15. <value>atguigu</value>
    16. </property> -->
    17. </configuration>

    原文件查找

    core-default.xml:在 $HADOOP_HOME/share/hadoop/common/hadoop-common-3.2.2.jar

    cd /opt/module/hadoop-3.1.3/share/hadoop/common/

    mkdir /root/hadoop-path

    复制

    cp hadoop-common-3.1.3.jar /root/hadoop-path

    解压(从解压hadoop-common-3.1.3.jar中提取core-default.xml文件

    jar xf hadoop-hdfs-3.1.3.jar core-default.xml

    (2)、配置hdfs-site.xml

    vi hdfs-site.xml

    添加以下内容

    1. <configuration>
    2. <!-- nn web端访问地址-->
    3. <property>
    4. <name>dfs.namenode.http-address</name>
    5. <value>ha01:9870</value>
    6. </property>
    7. <!-- 2nn web端访问地址-->
    8. <property>
    9. <name>dfs.namenode.secondary.http-address</name>
    10. <value>ha03:9868</value>
    11. </property>
    12. </configuration>

    原文件查找
    cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs

    复制

    cp hadoop-hdfs-3.1.3.jar /root/hadoop-path/

    解压

    jar xf hadoop-hdfs-3.1.3.jar hdfs-site.xml

    (3)、配置 yarn-site.xml

    vi yarn-site.xml

    添加以下内容

    1. <configuration>
    2. <!-- 指定MR走shuffle -->
    3. <property>
    4. <name>yarn.nodemanager.aux-services</name>
    5. <value>mapreduce_shuffle</value>
    6. </property>
    7. <!-- 指定ResourceManager的地址-->
    8. <property>
    9. <name>yarn.resourcemanager.hostname</name>
    10. <value>ha02</value>
    11. </property>
    12. <property>
    13. <name>yarn.nodemanager.env-whitelist</name>
    14. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    15. </property>
    16. </configuration>

    原文件查找
    cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs

    复制

    cp hadoop-hdfs-3.1.3.jar /root/hadoop-path/

    解压

    jar xf hadoop-hdfs-3.1.3.jar hdfs-site.xml

    开启日志聚集功能
    vi yarn-site.xml

    添加以下内容(最后配置)

    1. <configuration>
    2. <!-- 指定MR走shuffle -->
    3. <property>
    4. <name>yarn.nodemanager.aux-services</name>
    5. <value>mapreduce_shuffle</value>
    6. </property>
    7. <!-- 指定ResourceManager的地址-->
    8. <property>
    9. <name>yarn.resourcemanager.hostname</name>
    10. <value>ha02</value>
    11. </property>
    12. <property>
    13. <name>yarn.nodemanager.env-whitelist</name>
    14. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    15. </property>
    16. <!-- 开启日志聚集功能 -->
    17. <property>
    18. <name>yarn.log-aggregation-enable</name>
    19. <value>true</value>
    20. </property>
    21. <!-- 设置日志聚集服务器地址 -->
    22. <property>
    23. <name>yarn.log.server.url</name>
    24. <value>http://ha01:19888/jobhistory/logs</value>
    25. </property>
    26. <!-- 设置日志保留时间为7天 -->
    27. <property>
    28. <name>yarn.log-aggregation.retain-seconds</name>
    29. <value>604800</value>
    30. </property>
    31. </configuration>

    如果是格式化后添加配置历史服务器,需要分发文件

    1. scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@ha02:$HADOOP_HOME/etc/hadoop
    2. scp $HADOOP_HOME/etc/hadoop/yarn-site.xml root@ha03:$HADOOP_HOME/etc/hadoop

    4、配置mapred-site.xml

    vi mapred-site.xml

    添加以下内容

    1. <configuration>
    2. <!-- 指定MapReduce程序运行在Yarn上 -->
    3. <property>
    4. <name>mapreduce.framework.name</name>
    5. <value>yarn</value>
    6. </property>
    7. </configuration>
    原文件查找
    cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs

    复制

    cp hadoop-mapreduce-client-core-3.1.3.jar /root/hadoop-path/

    解压

    jar xf hadoop-mapreduce-client-core-3.1.3.jar mapred-default.xml

    配置历史服务器
    vi mapred-site.xml

    添加以下内容(最后配置)

    1. <configuration>
    2. <!-- 指定MapReduce程序运行在Yarn上 -->
    3. <property>
    4. <name>mapreduce.framework.name</name>
    5. <value>yarn</value>
    6. </property>
    7. <!-- 历史服务器端地址 -->
    8. <property>
    9. <name>mapreduce.jobhistory.address</name>
    10. <value>ha01:10020</value>
    11. </property>
    12. <!-- 历史服务器web端地址 -->
    13. <property>
    14. <name>mapreduce.jobhistory.webapp.address</name>
    15. <value>ha01:19888</value>
    16. </property>
    17. </configuration>

    如果是格式化后添加配置历史服务器,需要分发文件

    1. scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@ha02:$HADOOP_HOME/etc/hadoop
    2. scp $HADOOP_HOME/etc/hadoop/mapred-site.xml root@ha03:$HADOOP_HOME/etc/hadoop

    (5)、配置workers

    vi workers

    添加以下内容

    1. ha01
    2. ha02
    3. ha03

    (6)、配置hadoop-env.sh

    vi hadoop-env.sh

    添加以下内容

    1. export JAVA_HOME=/opt/module/jdk1.8.0_161
    2. export HADOOP_HOME=/opt/module/hadoop-3.1.3

     

    (7)、分发 hadoop 、Java、环境变量

    hadoop

    1. scp -r /opt/module/hadoop-3.1.3/ ha@ha02:/opt/module/
    2. scp -r /opt/module/hadoop-3.1.3/ ha@ha03:/opt/module/

    Java

    1. scp -r /opt/module/jdk1.8.0_161 ha@ha02:/opt/module/
    2. scp -r /opt/module/jdk1.8.0_161 ha@ha03:/opt/module/

    环境变量

    1. scp -r /etc/profile/ root@ha02:/etc/
    2. scp -r /etc/profile/ root@ha03:/etc/

    生效环境变量

    source /etc/profile

     

    4、保存镜像

    (注意先停掉有数据的服务。如hdfs 防止造成不同步)

    在容器master 中

    stop-all.shjps

    在宿主机中

    1. docker images
    2. docker ps
    3. docker commit id kerin/centos7:hadoop

     

    四、使用hadoop镜像搭建集群

    1、停用和删除全部运行中的容器

    1. docker stop id
    2. docker rm -f id

    2、创建master、slave1、slave2

    master

    docker run -it --network hadoop -h "master" --name "master" -p 9870:9870 -p 8081:8081 -p 60010:60010 -p 2181:2181 -p 8080:8080 -p 4040:4040 -p 3306:3306 -p 18080:18080 -p 19888:19888 kerin/centos7:hadoop /bin/bash
    1. # 退出
    2. exit

    slave1

    docker run -it --network hadoop -h "slave1" --name "slave1" -p 8088:8088 kerin/centos7:hadoop /bin/bash
    1. # 退出
    2. exit

    slave2

    docker run -it --network hadoop -h "slave2" --name "slave2" -p 9868:9868 kerin/centos7:hadoop /bin/bash
    1. # 退出
    2. exit

     -p 后面表示要向主机映射的端口号

    3、格式化

    启动容器

    进入容器

    1. docker exec -it master /bin/bash
    2. docker exec -it slave1 /bin/bash
    3. docker exec -it slave2 /bin/bash

    格式化

    hdfs namenode -format

    4、启动

    启动start-dfs.sh

    start-dfs.sh

    报错一

    解决

    1. vi /etc/profile
    2. export HDFS_NAMENODE_USER=root
    3. export HDFS_DATANODE_USER=root
    4. export HDFS_SECONDARYNAMENODE_USER=root
    5. export YARN_RESOURCEMANAGER_USER=root
    6. export YARN_NODEMANAGER_USER=root

    分发

    1. scp -r /etc/profile slave1:/etc/
    2. scp -r /etc/profile slave2:/etc/

     

    报错二

    解决

    1. vi /root/.ssh/known_hosts
    2. 注释第二行和第三行

    重新运行 scp -r /etc/profile slave1:/etc/ 命令,SSH 将会询问您是否要添加 slave1 的新密钥,输入 yes 以接受并添加新的主机密钥。

    scp -r /etc/profile slave1:/etc/

    启动start-yarn.sh

    start-yarn.sh

    报错 

    解决

    1. vi /root/.ssh/known_hosts
    2. 注释第二行和第三行

     查看进程

     

    5、访问端口

    windos添加访问容器路由

    ROUTE -p add 172.20.0.0 mask 255.255.0.0 192.168.153.134

    ubuntu添加访问容器路由

    sudo ip route add 172.20.0.0/16 via 192.168.153.134

    宿主机ip+端口号

    1. 192.168.153.134:9870
    2. 192.168.153.134:8088

     

    6、保存镜像

    (注意先停掉有数据的服务。如hdfs 防止造成不同步)

    在容器master 中

    stop-all.shjps

    在宿主机中

    1. docker images
    2. docker ps
    3. docker commit master容器的id kerin/hadoop:hadoop

     

  • 相关阅读:
    XS9922A,XS9922B四路模拟高清方案
    论文学习:RT-DETR
    一个简单的Oracle Redaction实验
    Grafana离线安装部署以及插件安装
    【前端】Vue+Element UI案例:通用后台管理系统-Home组件:卡片、表格
    IP地址规划设计
    Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁
    计数排序(Counting Sort)
    IDEA重装后打开的一些设置
    Spring Boot实现任意位置的properties及yml文件内容配置与获取
  • 原文地址:https://blog.csdn.net/2202_75688394/article/details/138001983