hadoop-HDFS集群部署

HDFS集群部署

本篇笔记使用的Hadoop版本为3.4.1,下载链接hadoop-3.4.1.tar.gz

根据前面的笔记,部署HDFS的3台虚拟机配置如下:

节点 CPU 内存 服务
node1 1 core 4GB NameNode, DataNode, SecondaryNameNode
node2 1 core 2GB DataNode
node3 1 core 2GB DataNode

Hadoop HDFS的角色包含:

  • NameNode,主节点管理者
  • DataNode,从节点工作者
  • SecondaryNameNode,主节点辅助

前置准备工作

我们将使用node1作为NameNode主节点,将会部署更多的软件。本质上,HDFS的三种角色都是作为进程运行在主机上。hadoop-3.4.1.tar.gz安装包中包含了3种角色的程序,我们将其上传到node1中,配置好node1后,我们将其再scpnode2,node3上。具体操作步骤(以node1为例,以root用户操作)如下:

 1# 1. 上传Hadoop安装报到node1节点中,本人使用的是MobaXterm直接上传,并切换到上传所在目录
 2# 2. 解压缩安装包到/export/server中
 3tar -zxvf hadoop-3.4.1.tar.gz -C /export/server
 4
 5# 3. 构建软连接方便操作
 6cd /export/server
 7ln -s /export/server/hadoop-3.4.1 /export/server/hadoop
 8
 9# 进入hadoop安装包准备安装
10cd hadoop

Hadoop 主要配置

Hadoop文件下基本由以下文件:

 1[root@node1 hadoop]# ls -l
 2total 84
 3drwxr-xr-x 2 1024 1024   203 Oct 10 00:36 bin # 存放Hadoop的各类程序(命令)
 4drwxr-xr-x 3 1024 1024    20 Oct  9 22:59 etc # 存放Hadoop的配置文件
 5drwxr-xr-x 2 1024 1024   106 Oct 10 00:36 include # C语言的一些头文件
 6drwxr-xr-x 3 1024 1024    20 Oct 10 00:36 lib # 存放Linux系统的动态链接库
 7drwxr-xr-x 4 1024 1024   288 Oct 10 00:36 libexec # 存放配置Hadoop系统的脚本文件(.sh,.cmd)
 8-rw-rw-r-- 1 1024 1024 23759 Sep 17 04:47 LICENSE-binary # 存放许可证文件
 9drwxr-xr-x 2 1024 1024  4096 Oct 10 00:36 licenses-binary
10-rw-rw-r-- 1 1024 1024 15696 Jul 16 03:54 LICENSE.txt
11-rw-rw-r-- 1 1024 1024 27165 Jul 16 03:54 NOTICE-binary
12-rw-rw-r-- 1 1024 1024  1541 Jul 16 03:54 NOTICE.txt
13-rw-rw-r-- 1 1024 1024   175 Jul 16 03:54 README.txt
14drwxr-xr-x 3 1024 1024  4096 Oct  9 22:59 sbin # 管理员程序
15drwxr-xr-x 4 1024 1024    31 Oct 10 01:09 share # 存放二进制源码(java jar包)

其中,我们常用的有bin,etc,sbin三个文件夹中的程序。在配置阶段,主要是etc文件中的配置修改,其中和HDFS修改的配置文件主要有:

1[root@node1 hadoop]# ls -l workers hadoop-env.sh core-site.xml hdfs-site.xml
2-rw-r--r-- 1 1024 1024   774 Oct  9 22:57 core-site.xml
3-rw-r--r-- 1 1024 1024 16786 Oct 10 00:36 hadoop-env.sh
4-rw-r--r-- 1 1024 1024   775 Oct  9 23:03 hdfs-site.xml
5-rw-r--r-- 1 1024 1024    10 Oct  9 22:57 workers

ps: 在/etc文件夹中,.sh是Linux使用的配置文件,.cmd是Windows使用的配置文件。因此,会看到类似hadoop-env.sh,hadoop-env.cmd这样同名不同后缀的一对文件。.xml是通用的数据文件格式,JAVA语言喜欢用这个文件格式。.properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名。

下面我们具体介绍四个和HDFS密切相关的配置文件。

  1. workers::记录集群中存在哪些从节点(DataNode)

    填入DataNode的IP或主机名(可DNS解析时),一行一个 e.g

    1vim workers
    2
    3# 填入以下内容
    4node1
    5node2
    6node3
    
  2. hadoop-env.sh:配置hadoop运行的环境变量。找到文件中对应项,并修改。

    1# JDK环境位置
    2export JAVA_HOME=/export/server/jdk1.8.0_421
    3# Hadoop安装位置
    4export HADOOP_HOME=/export/server/hadoop
    5# Hadoop配置文件目录位置
    6export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    7# Hadoop 运行日志目录位置
    8export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    
  3. core-site.xml:配置集群全局参数,用于定义系统级别的参数,如HDFS、URL、Hadoop的临时目录等。数据格式为name-value.

     1<configuration>
     2    <property>
     3    <!--HDFS文件系统的网络通信路径-->
     4    <!--通讯协议:hdfs://, namenode:node1, 通信端口8020-->
     5    <!--表明DataNode将和node1的8020端口通讯, node1是NameNode所在机器-->
     6        <name>fs.defaultFS</name>
     7        <value>hdfs://node1:8020</value>
     8    </property>
     9
    10    <property>
    11    <!--io操作文件缓冲区大小 131072 bit-->
    12        <name>io.file.buffer.size</name>
    13        <value>131072</value>
    14    </property>
    15</configuration>
    
  4. hdfs-site.xml:HDFS参数。如名称节点和数据节点的存放位置、文件副本的个数、文件读取权限等。

     1<configuration>
     2    <property>
     3        <!--hdfs文件系统,默认创建的文件权限设置,默认700, rwx -->
     4        <name>dfs.datanode.data.dir.perm</name>
     5        <value>700</value>
     6    </property>
     7    <property>
     8    <!--NameNode元数据的存储位置,在node1节点的/data/nn 目录下-->
     9        <name>dfs.namenode.name.dir</name>
    10        <value>/data/nn</value>
    11    </property>
    12    <property>
    13    <!--NameNode允许哪几个节点的DataNode连接,即允许加入集群-->
    14        <name>dfs.namenode.hosts</name>
    15        <value>node1,node2,node3</value>
    16    </property>
    17    <property>
    18    <!--hdfs默认块大小,默认256MB-->
    19        <name>dfs.blocksize</name>
    20        <value>268435456</value>
    21    </property>
    22    <property>
    23    <!--namenode处理的并发数线程数,默认100-->
    24        <name>dfs.namenode.handler.count</name>
    25        <value>100</value>
    26    </property>
    27    <property>
    28    <!--从节点DataNode的数据目录存储目录,即数据存放在各个node的位置-->
    29        <name>dfs.datanode.data.dir</name>
    30        <value>/data/dn</value>
    31    </property>
    32    <property>
    33        <name></name>
    34        <value></value>
    35    </property>
    36</configuration>
    

    总之,namenode数据存放在node1/data/nndatanode数据存放在node1,node2,node3/data/dn

然后,我们将配置好的Hadoop程序从node1复制到node2node3

1# 从node1 scp复制
2cd /export/server
3scp -r hadoop-3.4.1 node2:/export/server/
4scp -r hadoop-3.4.1 node3:/export/server/
5
6# node2,node3上同样创建软链接
7ln -s /export/server/hadoop-3.4.1 /export/server/hadoop

复制完成之后,我们在3个节点上都添加Hadoop环境变量

1vim /etc/profile
2
3# 在/etc/profile文末添加如下内容
4export HADOOP_HOME=/export/server/hadoop
5export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
6
7# 使环境变量生效
8source /etc/profile

接下来,我们依据配置文件创建文件夹并更改拥有者。

 1# node1
 2mkdir -p /data/nn
 3mkdir /data/dn
 4chown -R hadoop:hadoop /data
 5chown -R hadoop:hadoop /export
 6
 7# node2, node3
 8mkdir -p /data/dn
 9chown -R hadoop:hadoop /data
10chown -R hadoop:hadoop /export

接下来,我们都可以用普通用户hadoop来启动整个Hadoop服务。

Hadoop HDFS初始化

我们开始使用HDFS时,首先要对整个文件系统执行初始化(格式化)。注:我们现在以hadoop用户来执行了命令。

 1# 确保以hadoop用户执行
 2su - hadoop
 3# 格式化namenode
 4hadoop namenode -format
 5
 6# 格式化成功后,/data/nn中会有一些文件
 7cd /data/nn && ls
 8current
 9ls current/
10fsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION

格式化之后我们可以采用快捷脚本一键启动/关闭集群

 1# 启动
 2[hadoop@node1 nn]$ start-dfs.sh
 3Starting namenodes on [node1]
 4Starting datanodes
 5node3: WARNING: /export/server/hadoop/logs does not exist. Creating.
 6node2: WARNING: /export/server/hadoop/logs does not exist. Creating.
 7Starting secondary namenodes [node1]
 8
 9# 通过jps查看目前运行的java进程
10[hadoop@node1 nn]$ jps
1120101 DataNode
1219946 NameNode
1320394 SecondaryNameNode
1420524 Jps
15
16# 一键启动脚本,还会自动启用其他DataNode,查看node2,node3的进程:
17[hadoop@node2 ~]$ jps
1817296 Jps
1917177 DataNode
20
21[hadoop@node3 ~]$ jps
2217207 DataNode
2317307 Jps
24
25
26# 停止
27[hadoop@node1 nn]$ stop-dfs.sh

启动完成之后,Hadoop在NameNode所在的服务器上,提供了一个网站服务器,默认启动在9870端口。如果能打开网站,并且其中信息大概没错,HDFS的集群部署就大概完成了。

hadoop-HDFS-website

保存状态

虚拟机快照,防止误操作。具体步骤:

 1# 关闭hadoop集群
 2[hadoop@node1 nn]$ stop-dfs.sh
 3Stopping namenodes on [node1]
 4Stopping datanodes
 5Stopping secondary namenodes [node1]
 6[hadoop@node1 nn]$ jps
 721701 Jps
 8
 9# 关闭虚拟机
10su - root
11shutdown -h now
12
13# 虚拟机操作拍摄快照

拍摄好快照后,我们的虚拟机快照状态如下:

hadoop-HDFS-快照

总结

  1. 上传、解压到/export/server,配置软链接
  2. 修改4份配置文件:workers,hadoop-env.sh,core-site.xml,hdfs-site.xml
  3. 分发的node2,node3,并设置环境变量
  4. 创建数据目录,并修改文件权限归属hadoop账户
  5. 启动,并查看Web UI
  6. 附下图问题省流自查。

hadoop-HDFS-配置自查