windows平台使用Docker搭建分布式hadoop集群

先修篇

下载Docker可参考该博客的Docker安装
安装Docker可能遇到的一些问题可参考该博客的Docker安装问题

操作环境

  • windows : 10
  • Docker : 4.7.0
  • 将要拉取的镜像 : centos 7.6.1810

1. 安装centos 7.6镜像

1.1 搜索centos 7.6镜像

docker search centos7

在这里插入图片描述

1.2 拉取镜像

docker pull centos:7.6.1810

1.3 验证镜像安装成功

docker images

在这里插入图片描述

1.4 创建桥接网络(Docker默认使用桥接,此处亦使用桥接)

1.4.1 将网络名称命名为hadoop

docker network create -d bridge hadoop

1.4.2 查看网络hadoop

docker network inspect hadoop

在这里插入图片描述

1.5 运行镜像成容器

# 将本地目录A挂载至镜像centos:7.6.1810,并以特权模式在后台启动容器(命名为centos7)
docker run -v E:\COURSE\spark:/home -itd --privileged --name centos7 centos:7.6.1810 /usr/sbin/init

在这里插入图片描述
docker run参数

  • -v windows本地目录挂载至容器centos7的目录下
  • -itd 后台启动
  • –privileged 特权模式
  • –name 对容器起名
# 连接当前运行容器,获取bash
docker exec -it centos7 /bin/bash

2. 为搭建hadoop做准备

2.1 配置centos镜像

阿里centos 镜像源

2.1.1 备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.1.2 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

2.1.3 生成缓存

yum makecache

2.2 为root用户设置密码

yum -y install passwd
passwd root

在这里插入图片描述

2.3 安装工具

可不执行该语句

yum -y install vim passwd openssh-clients openssh-server net-tools

2.3.1 安装vim

yum install -y vim

2.2.2 安装open-ssh

yum install -y openssh-server openssh-clients

ssh-keygen命令常用选项:

  • -t TYPE:指定密钥加密类型
  • -P PASSWORD:指定私钥加密的密码,建议为空
  • -f FILENAME:指定密钥保存位置
  1. 配置ssh免密登录
ssh-keygen -t rsa -P ""
  1. 将公钥追加到authorized_keys 文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 编辑文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config

PermitRootLogin yesPubkeyAuthentication yes的注释去掉
在这里插入图片描述
4. 设置 SSH 服务为自启动

systemctl enable sshd.service
  1. 启动 SSH 服务
systemctl start sshd.service
  1. 免密登录自己(验证ssh是否配置成功)
ssh 127.0.0.1

在这里插入图片描述

2.2.3 安装JAVA

方式一 使用yum源安装

yum search java| grep jdk
yum install -y java-1.8.0-openjdk*
2.2.3.1. 寻找JAVA安装位置

第二条和第三条命令中具体ls 哪个目录, 视上一步输出结果而定

which java
ls -lr /usr/bin/java
ls -lr /etc/alternatives/java

在这里插入图片描述

2.2.3.2 由①寻得java安装目录为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
2.2.3.3 配置有关java环境变量
vim /etc/profile

在末尾添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
2.2.3.4 验证
source /etc/profile
echo $JAVA_HOME

在这里插入图片描述

方式二 压缩包式安装

第一步 : Oracle JDK官网下载至(之前启动容器时挂载的目录A)

tar -zxvf /home/jdk-8u331-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk-8u331-linux-x64 /usr/local/java

第二步 : 配置有关java环境变量

vim /etc/profile

在末尾添加如下内容:

export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

第三步 : 验证

source /etc/profile
echo $JAVA_HOME

在这里插入图片描述

2.2.4 将hadoop3.2.2解压至/usr/local目录下

此前启动容器时,将目录A(E:\COURSE\spark文件夹)挂载至容器的/home下
hadoop-3.2.3.tar.gz清华镜像站

tar -zxvf /home/hadoop-3.2.2.tar.gz -C /usr/local/
mv /usr/local/hadoop-3.2.2 /usr/local/hadoop

3. 搭建hadoop集群

3.1 修改文件

3.1.1 /etc/profile

vim /etc/profile

在末尾添加如下内容:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_PREFIX=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_CONF_DIR=$HADOOP_HOME 
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

使文件/etc/profile生效:

source /etc/profile

3.1.2 $HADOOP_HOME/etc/hadoop/hadoop-env.sh

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

在末尾添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
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

3.1.3 $HADOOP_HOME/etc/hadoop/core-site.xml

vim $HADOOP_HOME/etc/hadoop/core-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>      
        <value>/home/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>
</configuration>

3.1.4 $HADOOP_HOME/etc/hadoop/hdfs-site.xml

vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hdfs_name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hdfs_data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node01:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

3.1.5 $HADOOP_HOME/etc/hadoop/mapred-site.xml

vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node01:19888</value>
    </property>
        <property>
        <name>mapreduce.application.classpath</name>
        <value>
            /usr/local/hadoop/etc/hadoop,
            /usr/local/hadoop/share/hadoop/common/*,
            /usr/local/hadoop/share/hadoop/common/lib/*,
            /usr/local/hadoop/share/hadoop/hdfs/*,
            /usr/local/hadoop/share/hadoop/hdfs/lib/*,
            /usr/local/hadoop/share/hadoop/mapreduce/*,
            /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
            /usr/local/hadoop/share/hadoop/yarn/*,
            /usr/local/hadoop/share/hadoop/yarn/lib/*
        </value>
    </property>
</configuration>

3.1.6 $HADOOP_HOME/etc/hadoop/yarn-site.xml

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
  		<name>yarn.resourcemanager.hostname</name>
        <value>node01</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>node01:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>node01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>node01:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>node01:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node01:8088</value>
    </property>
</configuration>

3.1.7 $HADOOP_HOME/etc/hadoop/workers

vim $HADOOP_HOME/etc/hadoop/workers

将原文件的替换为如下内容:

node02
node03

3.2 从容器中保存镜像

# 当前容器 可使用命令 docker ps 查看镜像ID
docker commit -m “hadoop” -a “hadoop“ 当前容器 目标镜像

本人此处命令为

docker commit -m “Deploy Hadoop based on centos” -a “CMCST“ centos7 hadoop_centos

docker commit :从容器创建一个新的镜像。

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明说明
-a提交的镜像作者;
-c使用Dockerfile指令来创建镜像;
-m提交时的说明文字;
-p在commit时,将容器暂停

3.3 启动hadoop

3.3.1 运行Master节点: node01
docker run -itd --privileged --network hadoop -h "node01" --name "node01" -p 9870:9870 -p 8088:8088 -p 50070:50070 -p 9001:9001 -p 8030:8030 -p 8031:8031 -p 8032:8032 hadoop_centos /usr/sbin/init
3.3.2 运行Worker节点: node02
docker run -itd --privileged --network hadoop -h "node02" --name "node02" hadoop_centos /usr/sbin/init
3.3.3 运行Worker节点: node03
docker run -itd --privileged --network hadoop -h "node03" --name "node03" hadoop_centos /usr/sbin/init
3.3.4 修改文件/etc/hosts

获取node01、node02、node03的terminal

分别打开三个cmd窗口,分别执行

docker exec -it node01 /bin/bash
docker exec -it node02 /bin/bash
docker exec -it node03 /bin/bash

获取node01、node02、node03的IP地址

docker network inspect 网络名称
docker network inspect hadoop

在这里插入图片描述

在node01、node02、node03中修改文件/etc/hosts

vim /etc/hosts

在文件首部添加如下内容

172.18.0.2 node01
172.18.0.3 node02
172.18.0.4 node03

3.3.4 格式化[node1下]

/usr/local/hadoop/bin/hadoop namenode -format

3.3.5 启动hadoop集群[node1下]

/usr/local/hadoop/sbin/start.all.sh
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 要基于Docker搭建Hadoop集群,您需要遵循以下步骤: 1. 安装Docker:您需要在所有节点上安装Docker。可以通过Docker官方文档来了解如何在您的操作系统上安装Docker。 2. 创建Docker镜像:您需要创建包含HadoopDocker镜像。您可以使用Dockerfile来创建镜像,并在其中安装所需的软件包。 3. 创建Docker容器:一旦您创建了Docker镜像,您需要在每个节点上创建Docker容器。您可以使用Docker命令来创建容器。 4. 配置Hadoop集群:您需要配置Hadoop集群,以便每个节点都能够与其他节点通信。您需要编辑Hadoop配置文件,如core-site.xml和hdfs-site.xml,并指定节点的IP地址和端口号。 5. 启动Hadoop集群:最后,您需要启动Hadoop集群。您可以使用启动脚本启动Hadoop集群。 在完成这些步骤后,您应该已经成功地在基于DockerHadoop集群上设置了分布式计算环境。 ### 回答2: 随着大数据技术的发展,hadoop已经成为了很多企业的首选,但是hadoop的部署和维护是一件非常繁琐的事情,需要很多经验和技巧。为了简化这个过程,很多人开始尝试将hadoop集群部署在docker容器中。 Docker是一个开源的容器化平台,可以轻松地部署和运行各种应用程序。Docker的容器可以在任何运行Docker的机器上运行,这使得hadoop集群可以很容易地部署在任何地方。 基于docker搭建hadoop集群的步骤如下: 1. 安装Docker 首先需要在每台机器上安装Docker。安装过程可以参考Docker官方文档。 2. 创建docker镜像 在第一台机器上创建一个docker镜像,这个镜像可以包含我们需要的hadoop环境。 可以通过Dockerfile创建这个镜像,并且在 Dockerfile 中指定需要的软件包和配置。这个镜像可以包含hadoop,jdk等组件。 3. 部署容器 在第一台机器上使用这个docker镜像创建一个容器,这个容器就是hadoop的NameNode。可以指定hadoop的配置文件,并且可以将hadoop的数据目录挂载到本地硬盘上。 同时,在其他机器上也创建容器,这些容器就是hadoop的DataNode。 4. 启动hadoop服务 启动NameNode容器后,需要进入容器内部,启动hadoop服务。使用hadoop dfsadmin -report 命令可以查看hadoop集群的状态。 5. 配置hadoop集群 hadoop的配置文件可以在NameNode容器内修改,也可以将配置文件挂载到容器内部。配置文件的修改可以通过修改Dockerfile或者手动修改容器内的文件来完成。 一些hadoop集群相关的配置信息需要在hadoop-env.sh,hdfs-site.xml和core-site.xml等文件中进行修改。 6. 测试hadoop集群hadoop集群启动后,可以使用hdfs dfs -ls / 命令来测试hadoop集群的正常运行。 基于docker搭建hadoop集群的优点在于部署和维护都非常方便,同时可以快速地扩展集群Docker容器可以很容易地在不同的主机上运行,并且可以保证集群的统一性。 ### 回答3: Docker是一种轻量级的容器化技术,可以方便快捷地搭建、运行、迁移和管理软件应用,而Hadoop是目前广泛应用于大数据处理和分析的开源平台使用Hadoop可以有效地解决数据分析和处理的瓶颈问题。基于Docker搭建Hadoop集群,可以实现快速部署与运维,提高集群的可维护性和可扩展性,同时也可以降低运行成本。 以下是基于Docker搭建Hadoop集群的步骤: 1. 安装Docker:首先需要在主机上安装Docker运行环境。 2. 下载Hadoop镜像:从Docker Hub上下载Hadoop镜像,并创建一个自定义的网络。 3. 创建Hadoop节点容器:创建一个Hadoop节点容器,并在其内部配置Hadoop环境变量。 4. 配置Hadoop:配置Hadoop集群的核心配置文件core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml等。 5. 启动Hadoop集群使用start-dfs.sh和start-yarn.sh脚本启动Hadoop集群,查看配置是否生效。 6. 部署应用程序:将应用程序放入Hadoop集群中的HDFS文件系统,使用yarn命令启动应用程序。 7. 监控和维护:使用Hadoop的监控和管理工具,对集群进行监控和维护。 基于Docker搭建Hadoop集群具有很多优点,如环境准备简单、扩展性强、可移植性高、资源利用率高等,同时也需要注意安全性和稳定性的问题。在实际应用中,可以根据实际需求,对集群进行灵活配置和管理,以便更好地支持大数据处理和分析任务的需求。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值