「3-Hadoop」:Hadoop3.x完全分布式集群完整搭建过程

目录

    • 一:资源要求与准备
    • 二:安装JDK
    • 三:安装Hadoop
      • 下载
      • 集群规划
      • 安装
      • 集群配置
        • 配置core-site.xml文件
        • 配置hdfs-site.xml
        • 配置yarn-site.xml
        • 配置mapred-site.xml
        • 配置workers(旧版本是slaves)
      • 分发配置
      • 启动集群
        • 首次启动初始化NameNode
        • 启动HDFS
        • 启动Yarn
        • 查看每个节点状态
      • 上传文件测试集群
      • 总结

一:资源要求与准备

  1. Centos7 机器3台:单机至少2g内存
    在这里插入图片描述
  2. 配置机器之间免密登录

参考链接:服务器之间ssh免密登录配置

  • 必须确保三台服务器两两之间能ssh免密登录
  • 验证:进入服务器后执行ssh命令登录三台服务器
  • 我这里将三台服务器的hostname分别设置为hadoop102、hadoop103、hadoop104并且配置了hosts文件
1
2
3
4
#免密登录验证
ssh hadoop102
ssh hadoop103
ssh hadoop104

二:安装JDK

  1. 新建文件目录
1
sudo mkdir -p /opt/module

注意:当前用户如果不是root用户,必须将module文件夹所属的组、主权限修改为当前操作集群的用户和用户组

  1. 解压文件
    jdk下载链接:https://pan.baidu.com/s/1XwKheQa9WI3k3XgS-uu8lg 密码:n3da
1
tar -zxvf jdk-8u212-linux-x64.tar.gz
  1. 配置环境变量

新建环境文件

1
sudo vim /etc/profile.d/my_env.sh

添加以下内容

1
2
3
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

使环境变量生效

1
source /etc/profile

或者重启shell窗口

  1. 验证
1
java -version

如果看到以下内容,则安装jdk成功

1
java version "1.8.0_212"

三:安装Hadoop

下载

  • Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
  • 网盘提取地址:链接:https://pan.baidu.com/s/1jwxCnP8_j8QB9ru_26sNlA 密码:xphx

集群规划

组件 机器hadoop102 机器hadoop103 机器hadoop104
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager NodeManager
ResourceManager
NodeManager

安装

先在Hadoop102机器安装,配置完成后再分发其他机器

  1. 登录hadoop102机器,上传、解压安装文件到/opt/module下面
1
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  1. 查看是否解压成功
1
ls /opt/module/
  1. 配置环境变量
  • 打开前面配置的环境变量文件
1
[lizzy@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
  • 加上Hadoop环境变量
1
2
3
4
5
6
#jdk环境变量配置
JAVA_HOME=/opt/module/jdk1.8.0_212
#hadoop环境变量配置
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME

  • 重启shell窗口或者执行
1
source /etc/profile

集群配置

配置core-site.xml文件

1
2
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

配置文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定hadoop数据的存储目录  
     
      官方配置文件中的配置项是hadoop.tmp.dir ,用来指定hadoop数据的存储目录,此次配置用的hadoop.data.dir是自己定义的变量, 因为在hdfs-site.xml中会使用此配置的值来具体指定namenode 和 datanode存储数据的目录

-->
    <property>
        <name>hadoop.data.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
</property>


</configuration>

配置hdfs-site.xml

1
2
cd $HADOOP_HOME/etc/hadoop
vim hdfs-site.xml

配置文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
 <!-- 指定NameNode数据的存储目录 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.data.dir}/name</value>
  </property>
 <!-- 指定Datanode数据的存储目录 -->

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.data.dir}/data</value>
  </property>
   
   <!-- 指定SecondaryNameNode数据的存储目录 -->

    <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file://${hadoop.data.dir}/namesecondary</value>
  </property>
   

  <!-- nn web端访问地址-->
<property>
  <name>dfs.namenode.http-address</name>
  <value>hadoop102:9870</value>
</property>
  <!-- 2nn web端访问地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop104:9868</value>
  </property>
</configuration>

配置yarn-site.xml

1
2
cd $HADOOP_HOME/etc/hadoop
vim yarn-site.xml

配置文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
     <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</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>

配置mapred-site.xml

1
2
cd $HADOOP_HOME/etc/hadoop
vim mapred-site.xml

配置文件内容如下

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
 <!—指定MapReduce程序运行在Yarn上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

配置workers(旧版本是slaves)

1
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在该文件增加如下内容
就是你的集群机器hostname,注意不要有空格和空行

1
2
3
hadoop102
hadoop103
hadoop104

分发配置

lizzy是我的用户名,这里根据自己实际是使用root还是其他用户来代替,如果不是root注意权限问题

  • 分发安装目录到机器hadoop103
1
sudo rsync -r  /opt/module/hadoop-3.1.3  lizzy:hadoop103:/opt/module/
  • 分发安装目录到机器hadoop104
1
sudo rsync -r  /opt/module/hadoop-3.1.3  lizzy:hadoop104:/opt/module/
  • 进入hadoop103、hadoop104 检查是否分发成功
1
ssh hadoop103 ls /opt/module
1
ssh hadoop104 ls /opt/module

启动集群

首次启动初始化NameNode

我们的NameNode配置在hadoop102节点,ssh hadoop102 进入102节点

1
hdfs namenode -format

没有任何报错,中途没有询问输入任何的yes / no就是成功

启动HDFS

在hadoop102机器启动

1
start-dfs.sh

启动Yarn

按照我们的集群规划,yarn部署在hadoop103,ssh hadoop103 到103节点启动

1
start-yarn.sh

查看每个节点状态

命令可以查看启动的进程,在每个节点执行jps查看进程启动状态,看下启动的服务是否符合规划

1
2
3
ssh hadoop102 jps
ssh hadoop103 jps
ssh hadoop104 jps
组件 机器hadoop102 机器hadoop103 机器hadoop104
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager NodeManager
ResourceManager
NodeManager

上传文件测试集群

在这里插入图片描述
执行命令上传LICENSE.txt文件

1
hdfs dfs -put /opt/module/hadoop-3.1.3/LICENSE.txt /

打开namenode的web页面查看,文件上传集群成功:
在这里插入图片描述

总结

这里面很多操作可以优化,比如:

  1. rsync分发避免重复操作可以写成分发脚本,集群启动也可以写成启动脚本
  2. 可以启动更多服务,配置日志服务器,配置日志聚集上传
  3. 具体上传、下载、创建文件夹等基本命令操作
  4. 中间操作如果不能成功,可以查看hadoop下的日志文件,一般是权限问题居多
  5. hadoop2.x和hadoop3.x端口不完全一样,这个需要注意,本文是hadoop-3.1.3