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

关闭防火墙

sudo systemctl stop firewalld
​
sudo systemctl disable firewalld

关闭 iptables

sudo systemctl stop iptables
​
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 网络:

docker run -itd --name master --network hadoop centos:7 /bin/bash
​
docker run -itd --name slave1 --network hadoop centos:7 /bin/bash
​
docker run -itd --name slave2 --network hadoop centos:7 /bin/bash

拉取容器后,可以 exit 退出

2、连接容器

docker exec -it master /bin/bash
​
docker exec -it slave1 /bin/bash
​
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
export JAVA_HOME=/opt/module/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin

查看(生效环境变量)

source /etc/profile
​
java -version

2、安装ssh

在容器安装

yum install openssh-server -y
​
yum install openssh-clients -y
​
yum -y install passwd openssl openssh-server openssh-clients -y
​
yum -y update -y

报错

解决

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
​
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
yum clean all
yum makecache
​
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、创建公钥

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

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
​
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
​
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

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

/usr/sbin/sshd

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

ps -ef | grep sshd
​
yum -y install lsof

5、修改root密码

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

6、配置免密

输入命令后按四次回车键

ssh-keygen -t rsa

分发密钥

ssh-copy-id 主机名

报错

解决

cat ~/.ssh/id_rsa.pub
​
cat id_rsa.pub >> ~/.ssh/authorized_keys
​
#将密钥内容手动复制到个节点上
把authorized_keys内容复制到个节点上
​
#免密登录
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

在宿主机

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

进入容器解压

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

2、配置环境变量

vi /etc/profile
#添加以下内容
​
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
​
# 生效环境变量
source /etc/profile
​
# 查看 hadoop 版本
hadoop version

3、配置Hadoop

集群分布

(1)、配置core-site.xml

vi core-site.xml

添加以下内容

<configuration>
	<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ha01:8020</value>
    </property>
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
    <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
       <!-- <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atguigu</value>
    </property> -->
</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

添加以下内容

<configuration>
    <!-- nn web端访问地址-->
    <property>
      <name>dfs.namenode.http-address</name>
      <value>ha01:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>ha03:9868</value>
    </property>
</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

添加以下内容

<configuration>
	<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>ha02</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</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

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

<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>ha02</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址 -->
    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://ha01:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
</configuration>

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

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

4、配置mapred-site.xml

vi mapred-site.xml

添加以下内容

<configuration>
	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</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

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

<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>ha01:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>ha01:19888</value>
    </property>
</configuration>

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

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

(5)、配置workers

vi workers

添加以下内容

ha01
ha02
ha03

(6)、配置hadoop-env.sh

vi hadoop-env.sh

添加以下内容

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

 

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

hadoop

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

Java

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

环境变量

scp -r /etc/profile/ root@ha02:/etc/
scp -r /etc/profile/ root@ha03:/etc/

生效环境变量

source /etc/profile

 

4、保存镜像

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

在容器master 中

stop-all.shjps

在宿主机中

docker images
​
docker ps 
​
docker commit id kerin/centos7:hadoop

 

四、使用hadoop镜像搭建集群

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

docker stop id
​
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
# 退出
exit

slave1

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

slave2

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

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

3、格式化

启动容器

进入容器

docker exec -it master /bin/bash
​
docker exec -it slave1 /bin/bash
​
docker exec -it slave2 /bin/bash

格式化

hdfs namenode -format

4、启动

启动start-dfs.sh

start-dfs.sh

报错一

解决

vi /etc/profile
​
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

分发

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

 

报错二

解决

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

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

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

启动start-yarn.sh

start-yarn.sh

报错 

解决

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

 查看进程

 

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+端口号

192.168.153.134:9870
​
192.168.153.134:8088

 

6、保存镜像

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

在容器master 中

stop-all.shjps

在宿主机中

docker images
​
docker ps 
​
docker commit master容器的id kerin/hadoop:hadoop

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/570879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM - 大语言模型(LLM) 的 评估体系

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/138160155 大语言模型(LLM)的评估是复杂且多维的过程,涉及多个方面,包括评估体系、评估方法、评估实践。评估体系包括评估数据集、模型输出、样本/输出变换…

C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

一&#xff0c;队列的概念 队列是一种特殊的受限制的线性表。 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的t&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIF…

Day16-Java进阶-线程通信线程生命周期线程池单例设计模式

1. 线程通信 1.1 线程通信介绍 1.2 两条线程通信 package com.itheima.correspondence;public class CorrespondenceDemo1 {/*两条线程通信*/public static void main(String[] args) {Printer1 p new Printer1();new Thread(new Runnable() {Overridepublic void run() {syn…

机器学习运用-民宿价格

项目简介 随着旅游业的蓬勃发展&#xff0c;民宿市场迎来了前所未有的增长机遇。正好最近在参加拓尔思数据挖掘公益实习活动&#xff0c;我的项目将应用机器学习技术开发一个价格预测模型。可以达到更好地理解和预测民宿价格的目的&#xff0c;该模型综合考虑了从容纳人数、便…

【Java】文件操作(一)

文章目录 ✍一、文件的基本认识1.文件是什么&#xff1f;2.文本文件和二进制文件3.文件权限4.相对路径和绝对路径1.1绝对路径1.2相对路径 ✍二、文件的基本操作1.FIle的属性2.File的构造方法3.File类的方法3.1File类的获取操作3.2File类的判断操作3.3文件创建和删除3.4其他的常…

this指向

调用方式示例 函数中this的指向通过new调用new method()新对象直接调用method()全局对象通过对象调用obj.method()前面的对象call、apply、bindmethod.call(ctx)第一个参数 我们说的this指向是一个函数里边的this指向&#xff0c;如果这个this不在函数里边&#xff0c;那th…

C. Inhabitant of the Deep Sea

本题链接&#xff1a;Problem - C - Codeforces 题目&#xff1a; 样例&#xff1a; 输入 6 4 5 1 2 4 3 4 6 1 2 4 3 5 20 2 7 1 8 2 2 2 3 2 2 15 1 5 2 7 5 2输出 2 3 5 0 2 2 思路&#xff1a; 数学模拟。 根据题意&#xff0c;一前一后的攻击&#xff0c;攻击k次后&…

PotPlayer详细安装教程

安装步骤 进入官网&#xff1a; https://potplayer.tv/ 根据自己电脑的windows系统选择对应的版本安装 选择合适的字体 下载完成 优化设置 刚下好的potplayer仅限于能用&#xff0c;所有设置均为默认状态&#xff0c;我们需要进行优化 首先打开potplayer 右击选择选项 在…

三、CPU基础-缓存

计算机中缓存一般分为两个部分 1.内存 2.CPU Cache 一、CPU Cache分级 CPU Cache 通常分为大小不等的三级缓存&#xff0c;分别是 L1 Cache、L2 Cache 和 L3 Cache。 L1 Cache 和 L2 Cache 都是每个 CPU 核心独有的&#xff08;通常会分为「数据缓存」和「指令缓存」&#…

Git--原理与使用

目录 一、课程目标二、初始Git三、安装Git3.1 Linux-centos 四、Git的基本操作4.1 创建Git本地仓库 五、配置Git六、认识工作区、暂存区、版本库七、添加文件八、查看.git九、修改文件十、版本回退十一、撤销修改11.1 情况一&#xff1a;对于工作区的代码&#xff0c;还有add11…

海康NVR接入视频监控平台部分视频浏览失败,显示503错误的解决办法

目录 一、问题概述 二、问题排查 &#xff08;一&#xff09;排查思路介绍 &#xff08;二&#xff09;平台排查 1、确定排查的思路 2、信令控制模块的排查 3、媒体转发模块的排查 &#xff08;三&#xff09;客户设备排查 1.观察正常视频的设置 2. 调查问题原因 三…

B端设计实战:基于角色属性的权限设计

编辑导读:“权限控制”是中后台的基础能力,用于管控操作人员在平台内可做的事项内容。即通过权限控制,可以决定哪些人在平台内可以做哪些事。本文作者围绕角色&属性的权限设计展开分析,希望对你有帮助。 Hello,我是一名交互设计师。 随着3月暖春的即将到来,苏州的疫…

足球场体育馆三维可视化:颠覆传统观赛体验,开启视觉新纪元

在数字化浪潮席卷全球的今天&#xff0c;三维可视化技术正以其独特的魅力引领着体育场馆建设的革新潮流。这一技术的出现&#xff0c;不仅为观众带来了前所未有的视觉享受&#xff0c;更在体育产业的发展中&#xff0c;开启了一扇通往未来的大门。 足球场体育馆三维可视化&…

YOLOV1学习笔记

1. 前置知识简介 1.1 方向梯度直方图&#xff08;HOG, Histogram of Oriented Gradient&#xff09; 在计算机视觉以及数字图像处理中方向梯度直方图是一种能对物体进行检测的基于形状边缘特征的描述算子&#xff08;用于量化图像局部特征的算法工具&#xff0c;它将图像中的…

string 类以及模拟实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Flutter 中优雅切换应用主题的组件

Flutter 中优雅切换应用主题的组件 视频 https://youtu.be/L–XLpc452I https://www.bilibili.com/video/BV1wD421n75p/ 前言 原文 https://ducafecat.com/blog/flutter-app-theme-switch Adaptive Theme 这个组件通过包裹 MaterialApp 的方式整体管理 theme 主题&#xff0…

Java冲突

本身 父类 接口(多) 如果出现同样名字的方法,就会出现冲突 * 情况描述1: * 当一个类,继承了父类,实现了某接口,父类中的成员方法和接口中的方法重名 * 解决方法: * 子类就近选择父类成员方法 亲爹优先原则 * *使用格式: * 父类:super.方法名 * 父接口:父接口名.super.方…

QT——其他方式实现HelloWrold

QT——其他方式实现HelloWrold 使用输入框实现使用代码实现 通过按钮实现信号槽代码方式实现 我们之前对QT实现HelloWorld有了一些基本的了解&#xff0c;用了一些简单的方法实现了HelloWorld&#xff0c;如果对QT还不怎么了解的&#xff0c;可以点击这里&#xff1a; https://…

算法提高 第一期 KMP扩展算法

1## 具体思路&#xff1a; 和KMP算法的是想类似&#xff0c;充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串&#xff08;以模式串为开头的字串&#xff09;的真前缀和真后缀&#xff08;指子串的开始字符与子串的最后字符相等的…

【C 数据结构】二叉树

文章目录 【 1. 基本原理 】1.1 二叉树的性质1.2 满二叉树1.3 完全二叉树 【 2. 二叉树的顺序存储结构 】2.1 完全二叉树的顺序存储2.2 普通二叉树的顺序存储2.3 完全二叉树的还原 【 3. 二叉树的链式存储结构 】【 4. 二叉树的先序遍历 】4.1 递归实现4.2 非递归实现 【 5. 二…
最新文章