Hadoop分布式集群环境搭建

本节内容主要讲解如何在腾讯云服务器中配置Hadoop开发环境。首先考虑到成本的原因,每个人配置一台云服务器的成本不是很高,但是要模拟分布式开发环境至少需要三台机器。那么开发的成本就会比较高,在学习阶段可以采用docker创建三个容器,用于配置开发环境,可以极大缩减成本。另外如果是在笔记本电脑中用虚拟机模拟学习环境,至少需要同时启动三台虚拟机,这也是需要极大的内存才能带动。

在Ubuntu18.04上安装docker

在Ubuntu上安装docker非常的直接,启动docker源、导入GPG key,并且安装软件包。首先,更新软件包索引,并且安装必要的依赖软件,并添加一个HTTPS软件源。

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

使用下面的curl导入源仓库的GPG key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将docker的 APT软件源添加进系统:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

安装最新版的docker

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

安装指定版本

sudo apt update
apt list -a docker-ce

可以用的docker版本会显示出来

docker-ce/bionic,now 5:24.0.2-1~ubuntu.18.04~bionic amd64 [installed]
docker-ce/bionic 5:24.0.1-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:24.0.0-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.6-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.5-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.4-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.3-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.2-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.1-1~ubuntu.18.04~bionic amd64
docker-ce/bionic 5:23.0.0-1~ubuntu.18.04~bionic amd64

例如现在想要安装5:24.0.1-1~ubuntu.18.04~bionic amd64该版本的docker,可以输入以下命令。

sudo apt-get install docker-ce=5:24.0.1-1~ubuntu.18.04~bionic docker-ce-cli=5:24.0.1-1~ubuntu.18.04~bionic containerd.io

验证版本

docker --version

一旦docker安装成功,其服务则会自动启动。

sudo systemctl status docker 
Docker version 24.0.2, build cb74dfc
root@VM-12-9-ubuntu:/# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2024-01-27 01:05:53 CST; 10h ago
     Docs: https://docs.docker.com
 Main PID: 7017 (dockerd)
    Tasks: 10
   CGroup: /system.slice/docker.service
           └─7017 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

添加腾讯云的镜像源加速镜像下载

安装好了docker之后可以使用docker pull命令拉取镜像。如果没有配置镜像加速源的话,通常下载的速度会比较慢。

打开/etc/docker/daemon.json配置文件

vim /etc/docker/daemon.json

往配置文件中写入以下内容

{
   "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"
  ]
}

接下来重新启动docker服务

sudo systemctl restart docker

最后,拉取Ubuntu镜像

docker pull ubuntu

创建容器

创建容器时,我们都希望可以指定主机名,否则会在创建容器时随机一个字符串作为主机名。这里一共要创建三个容器。

# 绑定容器与宿主机端口号为9870
docker run -p 9870:9870 -itd --name master --hostname master ubuntu

docker run -itd --name slave1 --hostname slave1 ubuntu
docker run -itd --name slave2 --hostname slave2 ubuntu

上述命令的意思是基于ubuntu系统创建一个容器名和主机名都为master的容器。

启动与关闭容器

docker start master 
docker stop master

进入容器

docker exec -it master /bin/bash
docker exec -it --privileged master /bin/bash # 特权模式进入

为容器设置密码

为了后面方便使用ssh,为容器设置密码

passwd

紧接着修改配置文件

vim /etc/ssh/sshd_config

添加上

PermitRootLogin yes

如果PermitRootLogin prohibit-password未注释的话,需要将其注释

最后从重启ssh服务

service ssh restart

安装必要软件

首先更新软件索引

apt-get update

1、安装net-toos

apt install net-tools

2、安装vim

apt-get install vim

3、安装ping

apt install iputils-ping

4、安装ssh

apt-get install openssh-server

5、安装ufw

apt-get install ufw

sudo ufw status #  查看防火墙的状态
sudo systemctl stop ufw #关闭防火墙
sudo systemctl disable ufw # 永久关闭防火墙

6、安装sudo

apt-get install sudo

配置Hadoop完全分布式环境

平台软件说明

平台软件 说明
操作系统 Ubuntu 18.04
容器docker master:172.17.0.2
slave1:172.17.0.3
slave2:172.17.0.4
软件包上传路径 /opt/software
软件包安装路径 /opt/module
jdk jdk-8u212-linux-x64.tar.gz
hadoop hadoop-3.3.1.tar.gz
用户 root

守护进程的布局


NameNode DataNode secondaryNameNode
maser
slave1
slave2

集群搭建的准备工作

1、安装jdk

2、三台机器的环境都必须关闭防火墙

3、确保/etc/hosts文件中的IP地址和主机名的映射

4、配置三台机器的免密登录

5、保证jdk环境和Hadoop环境的配置

完全分布式集群的介绍

在真实的企业环境中,服务器集群会使用到多台机器,共同配合,来构建一个完全分布式集群的系统。在这样的分布式文件系统中。HDFS的守护进程也会分布在不同的机器中。例如:

  • namenode守护进程,尽可能单独部署在一台硬件较好的设备上

  • 其他的每台机器上都会部署一个DataNode守护进程,一般的硬件环境即可。

  • SecondaryNameNode守护进程最好不要和NameNode守护进程放在一起。

配置jdk

在配置jdk和Hadoop的过程中,只需要单独配置一台机器即可,因为在后面可以通过scp命令将配置内容分发到其他机器。

首先注意一下,使用scp命令从宿主机传输文件进入容器时,需要切换回root账户。

接下来在master容器中的/opt目录下创建两个文件夹:softwaremodule

使用以下命令进行传输jdk

scp -r jdk-8u212-linux-x64.tar.gz root@master:/opt/software

紧接着进入master容器解压jdk至module文件夹

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

配置环境变量

切换目录至profile.d并新建配置文件my_env.sh

cd /etc/profile.d/
vim my_env.sh

my_env.sh中配置Java环境变量

export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

激活环境变量

source /etc/profile

查看Java版本

java -version

java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

配置Hadoop

使用以下命令传输hadoop进入容器

scp -r jdk-8u212-linux-x64.tar.gz root@master:/opt/software

紧接着,解压压缩包至/opt/module

tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/

配置环境变量

切换目录至profile.d并新建配置文件my_env.shhadoop_env.shworkers

export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改配置文件

通过以下命令切换到hadoop的配置目录,设置core-site.xmlhdfs-site.xml

core-site.xml

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
<configuration>
        <!-- 设置namenode节点  -->
        <!-- 注意:Hadoop1.x默认端口9000 hadoop2.x默认端口8020 hadoop3.x默认端口 9820 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9820</value>
        </property>

        <!--hdfs的基础路径,被其他路径所依赖的一个基础路径  -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.3.1/tmp</value>
        </property>
</configuration>

hdfs-site.xml

<configuration>
   <!-- 块的副本数量 -->
    <property>
     <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- secondarynamenode守护进程的http地址:主机名和端口号 -->
    <property>
     <name>dfs.namenode.secondary.http-address</name>
        <value>slave2:9868</value>
    </property>
    <!-- namenode守护进程的http地址:主机名和端口号 -->
    <property>
     <name>dfs.namenode.http-address</name>
        <value>slave1:9870</value>
    </property>
    <!-- 允许外网的任意地址访问 -->
    <property>
        <name>dfs.namenode.http-bind-host</name>
        <value>0.0.0.0</value>
    </property>
</configuration>

配置hadoop-env.sh

配置Hadoop在运行时的环境

export JAVA_HOME=/opt/module/jdk1.8.0_212

#
 设置Hadoop启动集群时的用户角色
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

配置workers

作用是设置三个容器都要规划datanode进程,相当于datanode会在哪些节点进行工作。

master
slave1
slave2

配置IP地址与主机名的映射关系

/etc/hosts文件下补充以下内容,目的是为了方面后续配置ssh免密登录。另外需要提醒一下,三台机器均需要做好映射。

172.17.0.2      master
172.17.0.3      slave1
172.17.0.4      slave4

配置免密登录

做免密登录时需要在每一个节点生成自己的公钥和私钥,并将公钥发送给自己和另外两台机器。参考如下命令操作:

root@master:~# ssh-keygen -t rsa
root@master:~# ssh-copy-id master
root@master:~# ssh-copy-id slave1
root@master:~# ssh-copy-id slave2

文件分发

接下来需要做的事情就是将所有的配置文件从master分发到slave1和slave2。但是在slave1和salve2中并未创建module和software文件夹,因此需要先在另外两个容器中创建文件夹

mkdir /opt/module
midir /opt/software

接下来进入master容器,分发文件

cd /opt/module
scp -r jdk1.8.0_212/ hadoop-3.3.1/ slave2:$PWD
scp -r jdk1.8.0_212/ hadoop-3.3.1/ slave1:$PWD

scp -r my_env.sh slave2:$PWD
scp -r my_env.sh slave1:$PWD

最后激活slave1和slave2的环境变量

source /etc/profile

格式化并启动集群

hdfs namenode -format
start-dfs.sh

将集群启动之后需要测试是否与部署的效果一样,可以使用以下命令,查看看各个容器的Java进程

root@master:~# jps
1520 DataNode
1412 NameNode
1753 Jps


root@slave1:~# jps
5480 Jps
5320 DataNode

root@slave2:~# jps
4998 DataNode
5063 Jps

添加防火墙规则

打开腾讯云服务器的后台,添加端口9870允许任意网络访问,接下来打开浏览器,输入ip:9870

Hadoop分布式集群环境搭建

从上图的datanode可以看到与我们配置的内容一致。一共三个datanode,分别在slave1、master、slave2中。

至此,分布式集群环境搭建完毕!


原文始发于微信公众号(小志Codings):Hadoop分布式集群环境搭建

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/236537.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!