大数据云计算——Docker环境下部署Hadoop集群及运行集群案列

大数据云计算------Docker环境下部署Hadoop集群及运行集群案列

本文着重介绍了在Docker环境下部署Hadoop集群以及实际案例中的集群运行。首先,文章详细解释了Hadoop的基本概念和其在大数据处理中的重要性,以及为何选择在Docker环境下部署Hadoop集群。接着,阐述了在Docker中配置和启动Hadoop集群所需的步骤和技术要点。

在展示部署过程中,文章包含了针对Docker容器的Hadoop组件设置,并指导读者如何通过Docker Compose或其他相关工具建立一个多节点的Hadoop集群。特别强调了节点间的通信和配置,确保集群可以有效协同工作。

进一步,本文通过案例描述了在已搭建的Hadoop集群上运行的具体应用场景。案例可能涉及到数据存储、MapReduce任务或其他Hadoop支持的数据处理方式。这些案例旨在展示Hadoop集群在实际大数据处理中的应用和价值。

通过本文,读者可以深入了解如何利用Docker环境快速搭建Hadoop集群,并通过案例展示集群的运行过程,为大数据云计算中的Hadoop应用提供了实用的指导和参考。

首先查看版本环境(docker中没有下载docker和docker-compose的可以看我上一篇博客
Linux 安装配置Docker 和Docker compose 并在docker中部署mysql和中文版portainer图形化管理界面

查看docker和docker-compose版本:

复制代码
 docker version

docker-compose version

OK,环境没问题,我们正式开始Docker中部署hadoop

<Docker中部署Hadoop>

更新系统

复制代码
sudo apt update

复制代码
sudo apt upgrade

国内加速镜像下载修改仓库源

创建或修改 /etc/docker/daemon.json 文件

复制代码
sudo vi /etc/docker/daemon.json

{
    "registry-mirrors": [ 
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "https://kfp63jaj.mirror.aliyuncs.com"]
}

重载docker让CDN配置生效

复制代码
sudo systemctl daemon-reload

sudo systemctl restart docker

抓取ubuntu 20.04的镜像作为基础搭建hadoop环境

复制代码
sudo docker pull ubuntu:20.04

使用该ubuntu镜像启动,填写具体的path替代

sudo docker run -it -v <host-share-path>:<container-share-path> ubuntu

例如

复制代码
sudo docker run -it -v ~/hadoop/build:/home/hadoop/build ubuntu

容器启动后,会自动进入容器的控制台

在容器的控制台安装所需软件

复制代码
apt-get update

复制代码
apt-get upgrade

安装所需软件

复制代码
apt-get install net-tools vim openssh-server

复制代码
/etc/init.d/ssh start

让ssh服务器自动启动

复制代码
vi ~/.bashrc

在文件的最末尾按O进入编辑模式,加上:

复制代码
/etc/init.d/ssh start

按ESC返回命令模式,输入:wq保存并退出。

让修改即刻生效

复制代码
source ~/.bashrc

配置ssh的无密码访问

复制代码
ssh-keygen -t rsa

连续按回车

复制代码
cd ~/.ssh

cat id_rsa.pub >> authorized_keys

进入docker中ubuntu里面的容器

复制代码
docker start 11f9454b301f

docker exec -it clever_gauss  bash

安装JDK 8

hadoop 3.x目前仅支持jdk 7, 8

复制代码
apt-get install openjdk-8-jdk

在环境变量中引用jdk,编辑bash命令行配置文件

复制代码
vi ~/.bashrc

在文件的最末尾加上

复制代码
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

export PATH=$PATH:$JAVA_HOME/bin

让jdk配置即刻生效

复制代码
source ~/.bashrc

测试jdk正常运作

复制代码
java -version

将当前容器保存为镜像

sudo docker commit <CONTAINER ID> <IMAGE NAME> #自己起的镜像名字

复制代码
 sudo docker commit 11f9454b301f  ubuntu204 #我的是ubuntu204

可以看到该镜像已经创建成功,下次需要新建容器时可直接使用该镜像

注意!!!此过程的两个相关路径如下(不要搞混了):

<host-share-path>指的是~/hadoop/build

<container-share-path>指的是/home/hadoop/build

下载hadoop,下面以3.2.3为例

https://hadoop.apache.org/releases.html

复制代码
cd  ~/hadoop/build

wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz

(这种方法能下载但是会出现下载的包大小不对,我们可以用第二种方法)

方法二:

在自己电脑浏览器输入下载https://dlcdn.apache.org/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz

下载到自己电脑上 通过winscp上传到虚拟机中

然后有安装包的目录打开终端, 输入

复制代码
sudo mv hadoop-3.2.3.tar.gz ~/hadoop/build

移动文件到目录 ~/hadoop/build

在容器控制台上解压hadoop(就是之前创建的容器的控制台,不是自己的控制台!

复制代码
docker start 11f9454b301f

docker exec -it clever_gauss  bash

cd /home/hadoop/build

tar -zxvf hadoop-3.2.3.tar.gz -C /usr/local

安装完成了,查看hadoop版本

复制代码
cd /usr/local/hadoop-3.2.3

./bin/hadoop version

为hadoop指定jdk位置

复制代码
vi etc/hadoop/hadoop-env.sh

查找到被注释掉的JAVA_HOME配置位置,更改为刚才设定的jdk位置

复制代码
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

hadoop联机配置

配置core-site.xml文件

bash 复制代码
vi etc/hadoop/core-site.xml

加入:

bash 复制代码
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
        </property>
</configuration>

配置hdfs-site.xml文件

bash 复制代码
vi etc/hadoop/hdfs-site.xml

加入

bash 复制代码
<configuration>
    <!--- 配置保存Fsimage位置 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/namenode_dir</value>
    </property>
    <!--- 配置保存数据文件的位置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.2.3/datanode_dir</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

MapReduce配置

该配置文件的定义:

https://hadoop.apache.org/docs/r\<Hadoop版本号>/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

配置mapred-site.xml文件

bash 复制代码
vi etc/hadoop/mapred-site.xml

加入:

bash 复制代码
<configuration>
    <!--- mapreduce框架的名字 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <! -- 设定HADOOP的位置给yarn和mapreduce程序 -->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

配置yarn-site.xml文件

bash 复制代码
vi etc/hadoop/yarn-site.xml

加入

bash 复制代码
<configuration>
<!-- Site specific YARN configuration properties -->
        <!-- 辅助服务,数据混洗 -->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
</configuration>

服务启动权限配置

配置start-dfs.sh与stop-dfs.sh文件

bash 复制代码
vi sbin/start-dfs.sh 和 vi sbin/stop-dfs.sh
bash 复制代码
vi sbin/start-dfs.sh
bash 复制代码
HDFS_DATANODE_USER=root

HADOOP_SECURE_DN_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

继续修改配置文件

bash 复制代码
vi sbin/stop-dfs.sh
bash 复制代码
HDFS_DATANODE_USER=root

HADOOP_SECURE_DN_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

配置start-yarn.sh与stop-yarn.sh文件

bash 复制代码
vi sbin/start-yarn.sh 和 vi sbin/stop-yarn.sh
bash 复制代码
vi sbin/start-yarn.sh
bash 复制代码
YARN_RESOURCEMANAGER_USER=root

HADOOP_SECURE_DN_USER=yarn

YARN_NODEMANAGER_USER=root

bash 复制代码
vi sbin/stop-yarn.sh
bash 复制代码
YARN_RESOURCEMANAGER_USER=root

HADOOP_SECURE_DN_USER=yarn

YARN_NODEMANAGER_USER=root

核心文件一定不能配错,否则后面会出现很多问题!

配置完成,保存镜像

docker ps

bash 复制代码
docker commit 11f9454b301f ubuntu-myx

保存的镜像名为 ubuntu-myx

启动hadoop,并进行网络配置

打开三个宿主控制台,启动一主两从三个容器

master

打开端口映射:8088 => 8088

bash 复制代码
sudo docker run -p 8088:8088 -it -h master --name master ubuntu-myx

启动节点worker01

bash 复制代码
sudo docker run -it -h worker01 --name worker01 ubuntu-myx

节点worker02

bash 复制代码
sudo docker run -it -h worker02 --name worker02 ubuntu-myx

分别打开三个容器的/etc/hosts,将彼此的ip地址与主机名的映射信息补全(三个容器均需要如此配置)

bash 复制代码
vi /etc/hosts

使用以下命令查询ip

bash 复制代码
ifconfig

添加信息(每次容器启动该文件都需要调整)

172.17.0.3 master

172.17.0.4 worker01

172.17.0.5 worker02

检查配置是否有效

bash 复制代码
ssh master
bash 复制代码
ssh worker01
bash 复制代码
ssh worker02

master 连接worker01节点successfully:

worker01节点连接master 成功:

worker02连接worker01节点successfully:

在master容器上配置worker容器的主机名

bash 复制代码
cd /usr/local/hadoop-3.2.3
bash 复制代码
vi etc/hadoop/workers

删除localhost,加入

worker01

worker02

网络配置完成

启动hadoop

在master主机上

bash 复制代码
cd /usr/local/hadoop-3.2.3
bash 复制代码
./bin/hdfs namenode -format

正常启动

启动服务

bash 复制代码
./sbin/start-all.sh

效果如下表示正常

在hdfs上建立一个目录存放文件

假设该目录为:/home/hadoop/input

bash 复制代码
./bin/hdfs dfs -mkdir -p /home/hadoop/input
bash 复制代码
./bin/hdfs dfs -put ./etc/hadoop/*.xml /home/hadoop/input

查看分发复制是否正常

bash 复制代码
./bin/hdfs dfs -ls /home/hadoop/input

运行案例:

在hdfs上建立一个目录存放文件

例如

bash 复制代码
./bin/hdfs dfs -mkdir -p /home/hadoop/wordcount

把文本程序放进去

bash 复制代码
./bin/hdfs dfs -put hello /home/hadoop/wordcount

查看分发情况

bash 复制代码
./bin/hdfs dfs -ls /home/hadoop/wordcount

运行MapReduce自带wordcount的示例程序(自带的样例程序运行不出来,可能是虚拟机性能的问题,这里就换成了简单的wordcount程序)

bash 复制代码
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar wordcount /home/hadoop/wordcount /home/hadoop/wordcount/output

运行成功:

运行结束后,查看输出结果

bash 复制代码
./bin/hdfs dfs -ls /home/hadoop/wordcount/output
bash 复制代码
./bin/hdfs dfs -cat /home/hadoop/wordcount/output/*

至此,Docker部署hadoop成功!跟着步骤走一般都没有什么问题。

相关推荐
得物技术2 天前
从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流
大数据·llm·ai编程
久美子2 天前
AI驱动数仓建设的Harness工程实践——本体建模、知识分层与上下文工程
大数据
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
大志哥1233 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
果丁智能3 天前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理