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

news2024/11/18 21:28:07

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.coloradmin.cn/o/1621004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开&#xff0c;一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…

【期末复习向】智能信息系统前4章梳理

第四章 不确定性推理 [了解即可]4.1 不确定性概述 不确定性推理概念 所谓推理&#xff0c;就是从已知事实出发&#xff0c;运用相关的知识&#xff08;或规则&#xff09;逐步推出结论或者证明某个假设成立或不成立的思维过程。 不确定性方法分类 1.模型方法 a&#xff0…

新技术前沿-2024-大型语言模型LLM的本地化部署

参考快速入门LLM 参考究竟什么是神经网络 1 深度学习 1.1 神经网络和深度学习 神经网络是一种模拟人脑神经元工作方式的机器学习算法,也是深度学习算法的基本构成块。神经网络由多个相互连接的节点(也称为神经元或人工神经元)组成,这些节点被组织成层次结构。通过训练,…

【Linux】谈谈shell外壳是什么?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

在pycharm中导入sklearn库失败到成功

运行下列代码&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn 可以发现下载库时&#xff0c;不是直接下载sklearn库&#xff0c;而是下载scikit-learn库 之前下载一直失败&#xff0c;终于找到原因了。果然还是得多尝试&#xff0c;还…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中&#xff0c;找到“General”选项。在“General”选项中&#xff0c;找到“Localization”&#xff08;界面语言&#xff09;项。在下拉菜单中…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描&#xff0c;Spring 会自动从扫描指定的包及其子包下的所有类&#xff0c;并根据类上的特定注解将该类装配到容器中&#xff0c;而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

IDEA最好用插件推荐

1 背景 俗话说&#xff1a;“工欲善其事必先利其器”&#xff0c;本问介绍几款强大实用的 IDEA 插件&#xff0c;助力大家开发。 希望大家做一个聪明又努力的人&#xff0c;而不只是一个努力的人。 以下插件大都可以通过 IDEA 自带的插件管理中心安装&#xff0c;如果搜不到可以…

如何给word中的拼音加声调?分享3个方法

一&#xff0c;前言 在Word文档中标注拼音声调&#xff0c;是许多人在处理中文文档时经常需要面对的问题。对于不熟悉拼音的人来说&#xff0c;这可能会是一个挑战。但是&#xff0c;通过掌握一些简单的步骤和技巧&#xff0c;我们可以轻松地在Word文档中标注拼音声调。 二&a…

车载以太网DoIP 协议,万字长文详解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

YOLOv8 实现车牌检测,生成可视化检测视频(20240424)

原项目源码地址&#xff1a;GitHub 我的源码地址&#xff1a;Gitee 环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 训练数据…

三、CPU基础-缓存

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

百度安全多篇议题入选Blackhat Asia以硬技术发现“芯”问题

Blackhat Asia 2024于4月中旬在新加坡隆重举行。此次大会聚集了业界最杰出的信息安全专业人士和研究者&#xff0c;为参会人员提供了安全领域最新的研究成果和发展趋势。在本次大会上&#xff0c;百度安全共有三篇技术议题被大会收录&#xff0c;主要围绕自动驾驶控制器安全、跨…

告别互信息:跨模态人员重新识别的变分蒸馏

Farewell to Mutual Information: Variational Distillation for Cross-Modal Person Re-Identification 摘要&#xff1a; 信息瓶颈 (IB) 通过在最小化冗余的同时保留与预测标签相关的所有信息&#xff0c;为表示学习提供了信息论原理。尽管 IB 原理已应用于广泛的应用&…

使用CSS+HTML完成导航栏

HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>导航栏示例</title> &l…

​LeetCode解法汇总2385. 感染二叉树需要的总时间

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0…

QT——其他方式实现HelloWrold

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

YOLOv9改进策略 | 添加注意力篇 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

【调制】π/4-DQPSK信号模型及其相关特性分析 【附MATLAB代码】

MATLAB代码 % pi/4-DQPSK modulation %输入一串数&#xff0c;输出经过差分并映射的I、Q两路数据 ​ function [I,Q]pi4_dqpskmod(data) ​ nlength(data)./2; data1data.*2-1; ​ Idatazeros(1,n); Qdatazeros(1,n); ​ ​ Idatadata1(1,1:2:2*n); %串并变换 Qdatadata1(…

MT3030 天梯赛

跟MT3029战神小码哥类似&#xff0c;都是贪心堆。注意开long long 这里的堆顶为战斗力最小的&#xff0c;便于贪心的反悔操作。先按容忍度从大到小排序&#xff08;q中总容忍度取决于最小的容忍度&#xff09;&#xff0c;再向q中存数&#xff0c;存到不能容忍之后再把堆顶踢出…