乐趣区

关于后端:Centos7搭建hadoop334分布式集群

1、背景

最近在学习 hadoop,本文记录一下,怎么在 Centos7 零碎上搭建一个3 个节点的 hadoop 集群。

2、集群布局

hadoop集群是由 2 个集群形成的,别离是 hdfs 集群和 yarn 集群。2 个集群都是主从构造。

2.1 hdfs 集群布局

ip 地址 主机名 部署服务
192.168.121.140 hadoop01 NameNode,DataNode,JobHistoryServer
192.168.121.141 hadoop02 DataNode
192.168.121.142 hadoop03 DataNode,SecondaryNameNode

2.2 yarn 集群布局

ip 地址 主机名 部署服务
192.168.121.140 hadoop01 NodeManager
192.168.121.141 hadoop02 ResourceManager,NodeManager
192.168.121.142 hadoop03 NodeManager

3、集群搭建步骤

3.1 装置 JDK

装置 jdk 步骤较为简单,此处省略。须要留神的是 hadoop 须要的 jdk 版本。https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions

3.2 批改主机名和 host 映射

ip 地址 主机名
192.168.121.140 hadoop01
192.168.121.141 hadoop02
192.168.121.142 hadoop03

3 台机器上同时执行如下命令

# 此处批改主机名,3 台机器的主机名须要都不同
[root@hadoop01 ~]# vim /etc/hostname
[root@hadoop01 ~]# cat /etc/hostname
hadoop01
[root@hadoop01 ~]# vim /etc/hosts
[root@hadoop01 ~]# cat /etc/hosts | grep hadoop*
192.168.121.140 hadoop01
192.168.121.141 hadoop02
192.168.121.142 hadoop03

3.3 配置工夫同步

集群中的工夫最好保持一致,否则可能会有问题。此处我本地搭建,虚拟机是能够链接外网,间接配置和外网工夫同步。如果不能链接外网,则集群中的 3 台服务器,让另外的 2 台和其中的一台放弃工夫同步。

3 台机器同时执行如下命令

# 将 centos7 的时区设置成上海
[root@hadoop01 ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 装置 ntp
[root@hadoop01 ~]# yum install ntp
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base                                           | 3.6 kB     00:00
extras                                         | 2.9 kB     00:00
updates                                        | 2.9 kB     00:00
软件包 ntp-4.2.6p5-29.el7.centos.2.aarch64 已装置并且是最新版本
毋庸任何解决
# 将 ntp 设置成缺省启动
[root@hadoop01 ~]# systemctl enable ntpd
# 重启 ntp 服务
[root@hadoop01 ~]# service ntpd restart
Redirecting to /bin/systemctl restart ntpd.service
# 对准工夫
[root@hadoop01 ~]# ntpdate asia.pool.ntp.org
19 Feb 12:36:22 ntpdate[1904]: the NTP socket is in use, exiting
# 对准硬件工夫和零碎工夫
[root@hadoop01 ~]# /sbin/hwclock --systohc
# 查看工夫
[root@hadoop01 ~]# timedatectl
      Local time: 日 2023-02-19 12:36:35 CST
  Universal time: 日 2023-02-19 04:36:35 UTC
        RTC time: 日 2023-02-19 04:36:35
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
# 开始主动工夫和近程 ntp 工夫进行同步
[root@hadoop01 ~]# timedatectl set-ntp true

3.4 敞开防火墙

3 台机器上同时敞开防火墙,如果不敞开的话,则须要放行 hadoop 可能用到的所有端口等。

# 敞开防火墙
[root@hadoop01 ~]# systemctl stop firewalld
systemctl stop firewalld
# 敞开防火墙开机自启
[root@hadoop01 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@hadoop01 ~]#

3.5 配置 ssh 免密登录

3.5.1 新建 hadoop 部署用户
[root@hadoop01 ~]# useradd hadoopdeploy
[root@hadoop01 ~]# passwd hadoopdeploy
更改用户 hadoopdeploy 的明码。新的 明码:有效的明码:明码蕴含用户名在某些中央
从新输出新的 明码:passwd:所有的身份验证令牌曾经胜利更新。[root@hadoop01 ~]# vim /etc/sudoers
[root@hadoop01 ~]# cat /etc/sudoers | grep hadoopdeploy
hadoopdeploy    ALL=(ALL)       NOPASSWD: ALL
[root@hadoop01 ~]#
3.5.2 配置 hadoopdeploy 用户到任意一台机器都免密登录

配置 3 台机器,从任意一台到本身和另外 2 台都进行免密登录。

以后机器 以后用户 免密登录的机器 免密登录的用户
hadoop01 hadoopdeploy hadoop01,hadoop02,hadoop03 hadoopdeploy
hadoop02 hadoopdeploy hadoop01,hadoop02,hadoop03 hadoopdeploy
hadoop03 hadoopdeploy hadoop01,hadoop02,hadoop03 hadoopdeploy

此处演示从 hadoop01hadoop01,hadoop02,hadoop03 免密登录的shell

# 切换到 hadoopdeploy 用户
[root@hadoop01 ~]# su - hadoopdeploy
Last login: Sun Feb 19 13:05:43 CST 2023 on pts/0
# 生成公私钥对,下方的提醒间接 3 个回车即可
[hadoopdeploy@hadoop01 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoopdeploy/.ssh/id_rsa):
Created directory '/home/hadoopdeploy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoopdeploy/.ssh/id_rsa.
Your public key has been saved in /home/hadoopdeploy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:PFvgTUirtNLwzDIDs+SD0RIzMPt0y1km5B7rY16h1/E hadoopdeploy@hadoop01
The key's randomart image is:
+---[RSA 2048]----+
|B   .   .        |
| B o   . o       |
|+ * * + + .      |
| O B / = +       |
|. = @ O S o      |
|   o * o *       |
|    = o o E      |
|   o +           |
|    .            |
+----[SHA256]-----+
[hadoopdeploy@hadoop01 ~]$ ssh-copy-id hadoop01
...
[hadoopdeploy@hadoop01 ~]$ ssh-copy-id hadoop02
...
[hadoopdeploy@hadoop01 ~]$ ssh-copy-id hadoop03

3.7 配置 hadoop

此处如无非凡阐明,都是应用的 hadoopdeploy 用户来操作。

3.7.1 创立目录(3 台机器都执行)
# 创立 /opt/bigdata 目录
[hadoopdeploy@hadoop01 ~]$ sudo mkdir /opt/bigdata
# 将 /opt/bigdata/ 目录及它下方所有的子目录的所属者和所属组都给 hadoopdeploy
[hadoopdeploy@hadoop01 ~]$ sudo chown -R hadoopdeploy:hadoopdeploy /opt/bigdata/
[hadoopdeploy@hadoop01 ~]$ ll /opt
total 0
drwxr-xr-x. 2 hadoopdeploy hadoopdeploy  6 Feb 19 13:15 bigdata
3.7.2 下载 hadoop 并解压(hadoop01 操作)
# 进入目录
[hadoopdeploy@hadoop01 ~]$ cd /opt/bigdata/
# 下载
[hadoopdeploy@hadoop01 ~]$ https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
# 解压并压缩
[hadoopdeploy@hadoop01 bigdata]$ tar -zxvf hadoop-3.3.4.tar.gz && rm -rvf hadoop-3.3.4.tar.gz
3.7.3 配置 hadoop 环境变量(hadoop01 操作)
# 进入 hadoop 目录
[hadoopdeploy@hadoop01 hadoop-3.3.4]$ cd /opt/bigdata/hadoop-3.3.4/
# 切换到 root 用户
[hadoopdeploy@hadoop01 hadoop-3.3.4]$ su - root
Password:
Last login: Sun Feb 19 13:06:41 CST 2023 on pts/0
[root@hadoop01 ~]# vim /etc/profile
# 查看 hadoop 环境变量配置
[root@hadoop01 ~]# tail -n 3 /etc/profile
# 配置 HADOOP
export HADOOP_HOME=/opt/bigdata/hadoop-3.3.4/
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
# 让环境变量失效
[root@hadoop01 ~]# source /etc/profile
3.7.4 hadoop 的配置文件分类(hadoop01 操作)

hadoop 中配置文件大略有这么 3 大类。

  • 默认的只读配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
  • 自定义配置文件:etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml 会笼罩默认的配置。
  • 环境配置文件:etc/hadoop/hadoop-env.sh and optionally the etc/hadoop/mapred-env.sh and etc/hadoop/yarn-env.sh 比方配置 NameNode 的启动参数 HDFS_NAMENODE_OPTS 等。
3.7.5 配置 hadoop-env.sh(hadoop01 操作)
# 切换到 hadoopdeploy 用户
[root@hadoop01 ~]# su - hadoopdeploy
Last login: Sun Feb 19 14:22:50 CST 2023 on pts/0
# 进入到 hadoop 的配置目录
[hadoopdeploy@hadoop01 ~]$ cd /opt/bigdata/hadoop-3.3.4/etc/hadoop/
[hadoopdeploy@hadoop01 hadoop]$ vim hadoop-env.sh
# 减少如下内容
export JAVA_HOME=/usr/local/jdk8
export HDFS_NAMENODE_USER=hadoopdeploy
export HDFS_DATANODE_USER=hadoopdeploy
export HDFS_SECONDARYNAMENODE_USER=hadoopdeploy
export YARN_RESOURCEMANAGER_USER=hadoopdeploy
export YARN_NODEMANAGER_USER=hadoopdeploy
3.7.6 配置 core-site.xml 文件(hadoop01 操作)(外围配置文件)

默认配置文件门路:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml

vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/core-site.xml

<configuration>
    <!-- 指定 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:8020</value>
    </property>

    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/bigdata/hadoop-3.3.4/data</value>
    </property>

    <!-- 配置 HDFS 网页登录应用的动态用户为 hadoopdeploy, 如果不配置的话,当在 hdfs 页面点击删除时 > 看看后果 -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoopdeploy</value>
    </property>
    <!-- 文件垃圾桶保留工夫 -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>
3.7.7 配置 hdfs-site.xml 文件(hadoop01 操作)(hdfs 配置文件)

默认配置文件门路:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/hdfs-site.xml

<configuration>

    <!-- 配置 2 个正本 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

    <!-- nn web 端拜访地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop01:9870</value>
    </property>
    <!-- snn web 端拜访地址 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop03:9868</value>
    </property>

</configuration>
3.7.8 配置 yarn-site.xml 文件(hadoop01 操作)(yarn 配置文件)

默认配置文件门路:https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/yarn-site.xml

<configuration>

    <!-- Site specific YARN configuration properties -->
    <!-- 指定 ResourceManager 的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop02</value>
    </property>
    
    <!-- 指定 MR 走 shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 是否对容器施行物理内存限度 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    
    <!-- 是否对容器施行虚拟内存限度 -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    
    <!-- 设置 yarn 历史服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop02:19888/jobhistory/logs</value>
    </property>
    
    <!-- 开启日志汇集 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    
    <!-- 汇集日志保留的工夫 7 天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
</configuration>
3.7.9 配置 mapred-site.xml 文件(hadoop01 操作)(mapreduce 配置文件)

默认配置文件门路:https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/yarn-site.xml

<configuration>
    <!-- 设置 MR 程序默认运行模式:yarn 集群模式,local 本地模式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    <!-- MR 程序历史服务地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop01:10020</value>
    </property>
    
    <!-- MR 程序历史服务器 web 端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop01:19888</value>
    </property>
    
    <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>
3.7.10 配置 workers 文件(hadoop01 操作)

vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers

hadoop01
hadoop02
hadoop03

workers配置文件中不要有多余的空格或换行。

3.7.11 3 台机器 hadoop 配置同步(hadoop01 操作)
1、同步 hadoop 文件
# 同步 hadoop 文件
[hadoopdeploy@hadoop01 hadoop]$ scp -r /opt/bigdata/hadoop-3.3.4/ hadoopdeploy@hadoop02:/opt/bigdata/hadoop-3.3.4
[hadoopdeploy@hadoop01 hadoop]$ scp -r /opt/bigdata/hadoop-3.3.4/ hadoopdeploy@hadoop03:/opt/bigdata/hadoop-3.3.4
2、hadoop02 和 hadoop03 设置 hadoop 的环境变量
[hadoopdeploy@hadoop03 bigdata]$ su - root
Password:
Last login: Sun Feb 19 13:07:40 CST 2023 on pts/0
[root@hadoop03 ~]# vim /etc/profile
[root@hadoop03 ~]# tail -n 4 /etc/profile

# 配置 HADOOP
export HADOOP_HOME=/opt/bigdata/hadoop-3.3.4/
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
[root@hadoop03 ~]# source /etc/profile

3、启动集群

3.1 集群格式化

当是 第一次 启动集群时,须要对 hdfs 进行格式化,在 NameNode 节点操作。

[hadoopdeploy@hadoop01 hadoop]$ hdfs namenode -format

3.2 集群启动

启动集群有 2 种形式

  • 形式一: 每台机器一一启动过程,比方:启动 NameNode, 启动 DataNode,能够做到准确管制每个过程的启动。
  • 形式二: 配置好各个机器之间的免密登录并且配置好 workers 文件,通过脚本一键启动。

3.2.1 一一启动过程

# HDFS 集群
[hadoopdeploy@hadoop01 hadoop]$ hdfs --daemon start namenode | datanode | secondarynamenode

# YARN 集群
[hadoopdeploy@hadoop01 hadoop]$ hdfs yarn --daemon start resourcemanager | nodemanager | proxyserver

3.2.2 脚本一键启动

  • start-dfs.sh 一键启动 hdfs 集群的所有过程
  • start-yarn.sh 一键启动 yarn 集群的所有过程
  • start-all.sh 一键启动 hdfs 和 yarn 集群的所有过程

3.3 启动集群

3.3.1 启动 hdfs 集群

须要在 NameNode 这台机器上启动

# 改脚本启动集群中的 NameNode、DataNode 和 SecondaryNameNode
[hadoopdeploy@hadoop01 hadoop]$ start-dfs.sh

3.3.2 启动 yarn 集群

须要在 ResourceManager 这台机器上启动

# 该脚本启动集群中的 ResourceManager 和 NodeManager 过程
[hadoopdeploy@hadoop02 hadoop]$ start-yarn.sh

3.3.3 启动 JobHistoryServer

[hadoopdeploy@hadoop01 hadoop]$ mapred --daemon start historyserver

3.4 查看各个机器上启动的服务是否和咱们布局的统一

能够看到是统一的。

3.5 拜访页面

3.5.1 拜访 NameNode ui (hdfs 集群)

如果这个时候通过 hadoop fs 命令能够上传文件,然而在这个 web 界面上能够创立文件夹,然而上传文件报错,此处就须要在拜访 ui 界面的这个电脑的 hosts 文件中,将部署 hadoop 的那几台的电脑的 ip 和 hostname 在本机上进行映射

3.5.2 拜访 SecondaryNameNode ui

3.5.3 查看 ResourceManager ui(yarn 集群)

3.5.4 拜访 jobhistory

4、参考链接

1、https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions
2、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

退出移动版