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.mzph.cn/diannao/2843.shtml

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

相关文章

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法&#xff0c;它允许用户在 SQL 语句中插入相关的语法&#xff0c;从而影响 SQL 的执行方式。 因为 Hint 的特殊作用&#xff0c;所以对于开发人员不应该在代码中使用它&#xff0c;Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

QA测试开发工程师面试题满分问答20: 软件的安全性应从哪几个方面去测试?

软件的安全性测试应从多个方面进行&#xff0c;并确保覆盖以下关键方面&#xff1a; 当回答问题时&#xff0c;可以根据自己的经验和知识&#xff0c;从上述要点中选择适合的方面进行详细说明。强调测试的综合性、全面性和持续性&#xff0c;并强调测试的重要性以及如何与开发团…

IDEA最好用插件推荐

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

恶补《操作系统》2_1——王道学习笔记

2操作系统-进程 2.1_1 进程的定义、组成、组织方式、特征 组成&#xff1a;PCB&#xff08;进程存在唯一的标志&#xff09;&#xff0c;程序段&#xff0c;数据段 组织方式&#xff1a;链接方式&#xff0c;指针指向不同的队列&#xff1b;索引方式&#xff0c;索引表 特征…

Uptime Kuma 使用指南:一款简单易用的站点监控工具

我平时的工作会涉及到监控&#xff0c;而站点是一个很重要的监控项。项目上线后&#xff0c;我们通常会将站点监控配置到云平台上&#xff0c;以检测各站点的连通性。但随着项目不断增多&#xff0c;云平台上的配额就有点捉急了。针对这个情况&#xff0c;我们可以试试这个开源…

设计模式——状态模式19

状态模式是一种行为设计模式&#xff0c; 允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。状态模式的核心是状态与行为绑定&#xff0c;不同的状态对应不同的行为。 设计模式&#xff0c;一定要敲代码理解 状态行为抽象 //在某种状态下&…

【网安小白成长之路】9.sql注入操作

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

SpringBoot整合七牛云实现图片的上传管理

唠嗑部分 各位小伙伴大家好&#xff0c;我是全栈小白&#xff0c;今天我们来分享一下SpringBoot如何整合七牛云存储实现图片的上传与存储 首先我们来说说图片存储&#xff0c;在项目中图片几乎是必不可少的&#xff0c;那么大家会选择怎样存储呢&#xff0c;当然有几种方案 …

Science Robotics 美国斯坦福大学研制了外行星洞穴探测机器人

月球和火星上的悬崖、洞穴和熔岩管已被确定为具有地质和天体生物学研究理想地点。由于其隔绝特性&#xff0c;这些洞穴提供了相对稳定的条件&#xff0c;可以促进矿物质沉淀和微生物生长。在火星上&#xff0c;这些古老的地下环境与火星表面可能适合居住时几乎没有变化&#xf…

JSP合同信息管理系统

毕业设计&#xff08;论文&#xff09; 题 目&#xff1a; JSP合同信息管理系统 学 校&#xff1a; 专 业&#xff1a; 年 级&#xff1a; 姓 名…

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…

【亲测有用】idea2024.1中前进后退按钮图标添加

idea更新后&#xff0c;前进后退按钮消失了&#xff0c;现在说下怎么设置 具体操作如下&#xff1a; 1、选择 File / Settings(windows版)&#xff0c;或者Preferences(mac版) 2、打开 Appearance & Behavior 并选择 Menus and Toolbars 3、选择右侧的 “Main toolbar lef…

Python中pyside2出现的pyside2 qt platform plugin could be in错误及其解决方法

系统平台&#xff1a;Win10 64bit python版本&#xff1a; python 3.8 使用pip install pyside2安装 pyside2 这是找不到QT平台的插件&#xff0c;这是环境变量QT_QPA_PLATFORM_PLUGIN_PATH出现错误 具体解决方法&#xff1a; 我们可以在每一段程序开始之前设定环境变量&…

虚幻引擎5 Gameplay框架(一)

GamePlay概论与打包和批处理脚本 GamePlay简介与创建项目 GamePlay框架&#xff1a;用于设计游戏规则&#xff0c;组织和管理游戏核心逻辑、规则以及交互的一套结构化体系。 Default Pawn Class&#xff1a;定义角色行为逻辑&#xff0c;接收玩家控制器的输入&#xff0c;一般…

【R语言】组合图:散点图+箱线图+平滑曲线图+柱状图

用算数运算符轻松组合不同的ggplot图&#xff0c;如图&#xff1a; 具体代码如下&#xff1a; install.packages("devtools")#安装devtools包 devtools::install_github("thomasp85/patchwork")#安装patchwork包 library(ggplot2) library(patchwork) #p1是…

[ACTF2020 新生赛]Upload--BUUCTF

题&#xff1a; 第一步&#xff1a;上传php文件&#xff0c;他提示&#xff0c;只能上传jpg、png、gif 第二步&#xff1a;使用bp抓上传jpg文件的包&#xff0c;在修改文件后缀名为phtml 修改前 修改后 第三步&#xff1a;进行放过&#xff0c;在访问浏览器 得到&#xff1a;U…

第07-4章 网络层详解

7.1 网络层协议 IP协议ARP&#xff08;地址解析协议&#xff09;RARP&#xff08;反向地址解析协议&#xff09;ICMP&#xff08;互联网控制消息协议&#xff09; 7.2 IP协议详解 7.2.1 IP协议功能 寻址和路由传递服务&#xff08;不可靠&#xff0c;尽最大努力&#xff0c…

线性代数基础1向量

1、向量是什么 1.1、向量的定义 在数学中&#xff0c;向量&#xff08;也称为欧几里得向量、几何向量、矢量&#xff09;&#xff0c;指具有大小和方向的量。它可以形象化地表示为带箭头的线段。箭头所指&#xff1a;代表向量的方向&#xff1b;线段长度&#xff1a;代表向量的…

Rust腐蚀服务器定制地图开服

Rust腐蚀服务器定制地图开服 大家好我是艾西一个做服务器租用的网络架构师。Rust腐蚀这个游戏有很多的插件mod作者&#xff0c;在地图制作这一块也是一样&#xff0c;有些好玩的地图可能大家在map网站找到了但是不知道怎么操作设置那么今天艾西给大家说下特定定制地图怎么弄。…

嬴图| ISO/IEC-GQL国际图语言标准发布,图技术开启新纪元

GQL作为继SQL之后的第二个数据库查询语言国际标准&#xff0c;近日正式发布。这标志着图技术开启新纪元——图时代即将到来&#xff01; 同时&#xff0c;这也预示着将有越来越多的组织采用“图”来解决各种复杂问题&#xff0c;更意味着SQL系统与负载将逐渐转向GQL&#xff0…