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

鼠扑  金牌会员 | 2024-10-7 06:15:55 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

Docker容器环境下搭建Hadoop集群(完全分布式)
hadoop版本为hadoop-3.1.3
(1)安装额外的速度较快的镜像库
  1. yum install -y epel-release
复制代码
(2)安装同步工具,方便在多台服务器上举行文件的传输
  1. yum install -y rsync
复制代码
(3)安装网络工具
  1. yum install -y net-tools
复制代码
(4)安装具有代码高亮显示的编辑器
  1. yum install -y vim
复制代码

一、docker安装

安装所必要的资源包
  1. yum install -y yum-utils
复制代码
设置仓库(阿里云)
  1. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码
安装docker
  1. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
复制代码
查看安装列表
  1. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
复制代码
启动docker
  1. systemctl start docker
复制代码
关闭防火墙
  1. sudo systemctl stop firewalld
  2. sudo systemctl disable firewalld
复制代码
关闭 iptables
  1. sudo systemctl stop iptables
  2. sudo systemctl disable iptables
复制代码
查看状态
  1. systemctl status docker
复制代码
查看安装版本
  1. docker version
复制代码
拉取镜像
  1. docker pull hello-world
复制代码
通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。
  1. docker run hello-world
复制代码

二、Docker根本使用命令

1、启动docker

  1. systemctl start docker
复制代码
2、停止docker

  1. systemctl stop docker
复制代码
3、重启docker

  1. systemctl restart docker
复制代码
4、查看docker

  1. systemctl status docker
复制代码
5、设置开机自启

  1. systemctl enable docker
复制代码
6、查看docker概要信息

  1. docker info
复制代码
7、查看镜像

  1. docker images
复制代码
8、拉取镜像

  1. docker pull hello-world
复制代码
9、运行镜像

  1. docker run hello-world
复制代码
10、运行一个容器

docker run: 运行一个容器。
示例:docker run -it ubuntu:latest /bin/bash,这将在一个Ubuntu镜像上启动一个交互式的bash会话。
  1. docker run -it ubuntu:latest /bin/bash
复制代码

11、实行交互模式

  1. docker exec -it <容器ID或容器名称> <命令>
复制代码

12、列出正在运行的容器

docker ps : 列出正在运行的容器。
  1. docker ps
复制代码

查看所有容器
  1. docker ps -a
复制代码

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

docker stop: 停止一个正在运行的容器。
示例:docker stop <容器ID或名称>,这将停止指定的容器。

14、删除一个容器

docker rm: 删除一个容器。
示例:docker rm <容器ID或名称>,这将删除指定的容器。
  1. docker rm -f <容器ID或名称>  #强制删除
复制代码

15、删除一个镜像

docker rmi: 删除一个镜像。
示例:docker rmi <镜像ID或名称>,这将删除指定的镜像。
要先停止容器才能删除镜像

一、创建docker 网络

  1. docker network create --driver=bridge hadoop
复制代码
使用下面这个命令查看 Docker 中的网络
  1. 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
复制代码
查看
  1. docker network inspect hadoop
复制代码

二、安装必备软件 ssh jdk8

1、安装jdk8

在宿主机上发文件
  1. docker cp jdk-8u161-linux-x64.tar.gz master:/opt/software/
复制代码
在容器中解压
  1. tar -zxvf jdk-8u161-linux-x64.tar.gz -C /opt/module/
复制代码
设置 /etc/profile文件
  1. 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服务启动会报错
  1. mkdir /var/run/sshd/
复制代码
方法一:

编辑sshd的设置文件/etc/ssh/sshd_config,将其中的UsePAM no改为UsePAM yes
  1. vi /etc/ssh/sshd_config
复制代码

方法二:

  1.  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服务了
  1. /usr/sbin/sshd
复制代码
此时使用命令ps -ef | grep sshd 便可以看到
  1. ps -ef | grep sshd
  2. yum -y install lsof
复制代码

5、修改root暗码

  
  1. passwd
  2. #回车输入密码
  3. #都要进行改密码
复制代码

6、设置免密

输入命令后按四次回车键
  1. ssh-keygen -t rsa
复制代码
分发密钥
  1. 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

在容器中添加
  1. vi ~/.bashrc
复制代码
在文件最后写入
  1. /usr/sbin/sshd -D &
复制代码
这样我们每次登录centos系统时,都能自动启动sshd服务

8、保存镜像文件

使用命令docker ps查看当前运行的容器:
  1. docker ps
复制代码
然后使用命令docker commit 容器id kerin/centos7:basic
  1. docker commit 容器id kerin/centos7:basic
复制代码
使用命令docker images 查看当前docker中所有镜像
  1. 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

  1. 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 中
  1. cd /opt/module/hadoop-3.1.3/share/hadoop/common/
复制代码

  1. mkdir /root/hadoop-path
复制代码
复制
  1. cp hadoop-common-3.1.3.jar /root/hadoop-path
复制代码
解压(从解压hadoop-common-3.1.3.jar中提取core-default.xml文件
  1. jar xf hadoop-hdfs-3.1.3.jar core-default.xml
复制代码

(2)、设置hdfs-site.xml

  1. 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>
复制代码

原文件查找

  1. cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs
复制代码

复制
  1. cp hadoop-hdfs-3.1.3.jar /root/hadoop-path/
复制代码
解压
  1. jar xf hadoop-hdfs-3.1.3.jar hdfs-site.xml
复制代码

(3)、设置 yarn-site.xml

  1. 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>
复制代码

原文件查找

  1. cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs
复制代码

复制
  1. cp hadoop-hdfs-3.1.3.jar /root/hadoop-path/
复制代码
解压
  1. jar xf hadoop-hdfs-3.1.3.jar hdfs-site.xml
复制代码

开启日志聚集功能

  1. 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

  1. 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>
复制代码
原文件查找

  1. cd /opt/module/hadoop-3.1.3/share/hadoop/hdfs
复制代码

复制
  1. cp hadoop-mapreduce-client-core-3.1.3.jar /root/hadoop-path/
复制代码
解压
  1. jar xf hadoop-mapreduce-client-core-3.1.3.jar mapred-default.xml
复制代码

设置汗青服务器

  1. 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

  1. vi workers
复制代码
添加以下内容
  1. ha01
  2. ha02
  3. ha03
复制代码

(6)、设置hadoop-env.sh

  1. 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/
复制代码
生效环境变量
  1. source /etc/profile
复制代码
 
4、保存镜像

(留意先停掉有数据的服务。如hdfs 防止造成差别步)
在容器master 中
  1. 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
  1. 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
  1. docker run -it --network hadoop -h "slave1" --name "slave1" -p 8088:8088 kerin/centos7:hadoop /bin/bash
复制代码
  1. # 退出
  2. exit
复制代码
slave2
  1. 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
复制代码
格式化
  1. hdfs namenode -format
复制代码
4、启动

启动start-dfs.sh

  1. 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 以担当并添加新的主秘密钥。
  1. scp -r /etc/profile slave1:/etc/
复制代码

启动start-yarn.sh

  1. start-yarn.sh
复制代码
报错 

解决
  1. vi /root/.ssh/known_hosts
  2. 注释第二行和第三行
复制代码
 查看历程



 


5、访问端口

windos添加访问容器路由
  1. ROUTE -p add 172.20.0.0 mask 255.255.0.0 192.168.153.134
复制代码
ubuntu添加访问容器路由
  1. 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 中
  1. stop-all.shjps
复制代码
在宿主机中
  1. docker images
  2. docker ps
  3. docker commit master容器的id kerin/hadoop:hadoop
复制代码
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表