Hadoop部署配置及运行调试(中)

2022-01-07 16:58:57 浏览数 (1)

文章大纲:

此篇章主要介绍Hadoop完全分布式模式的部署。完全分布式模式是利用多台服务器来进行部署Hadoop,是真正意义上的分布式部署模式。此模式下,Hadoop的守护进程分别运行在由多个主机节点搭建的服务器集群上,不同的节点担任不同的角色。该模式一般用于部署构建企业级Hadoop系统,实际的工作应用开发中也经常使用此模式。

01服务器功能规划

真正分布式部署由于涉及多台服务器,因此部署前应先做好各个服务器节点的功能规划。HDFS的NameNode、SecondaryNameNode和YARN的ResourceManager尽量部署在不同的节点上,避免影响集群的性能:

图1-1-1:Hadoop服务器功能规划

02环境准备

一、克隆虚拟机

使用VMware克隆《第一篇:Hadoop环境搭建及安装》中创建的虚拟机hadoop100:

图2-1-1:克隆虚拟机

选择“创建完整克隆”,创建虚拟机hadoop101,并选择虚拟机文件保存路径,开始进行克隆:

图2-1-2:创建完整克隆

规划需要三台服务器搭建集群,因此还需要再克隆一个虚拟机hadoop102.

二、配置网络

参考《第一篇:Hadoop环境搭建及安装》第二章-搭建系统的3.配置网络中的第3、4、5点对机器hadoop101、hadoop102进行网络配置。

IP地址设置:

hadoop101:192.168.100.11

hadoop102:192.168.100.12

三个机器的hosts文件记得都要将全部IP及hostname映射加上!

三、安装及配置Hadoop

为了和《第三篇:Hadoop部署配置及运行调试(上)》中伪分布式部署的Hadoop区分开来,需要将hadoop100上的Hadoop服务停止,并在新的目录 /opt/modules/app 下安装另一个Hadoop.

按照服务功能规划,参考《第三篇:Hadoop部署配置及运行调试(上)》第二章-伪分布式模式进行安装及配置。

需要注意以下配置文件的参数配置:

1. /etc/profile

修改Hadoop环境变量HADOOP_HOME:

代码语言:javascript复制
##HADOOP_HOME
export HADOOP_HOME="/opt/modules/app/hadoop-2.10.1"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

执行以下命令使配置生效:

代码语言:javascript复制
source /etc/profile

2. hdfs-site.xml

(1) dfs.replication

此参数的默认值为3,由于我们配置的集群机器数量也只有3个,所以可不进行配置。

(2) dfs.namenode.secondary.http-address

此参数用以指定SecondaryNameNode的http访问地址和端口号(端口号为50090)。因为我们规划了hadoop102为SecondaryNameNode服务器,因此需要修改此参数。

添加以下内容修改此参数值,配置SecondaryNameNode服务器地址:

代码语言:javascript复制
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop102:50090</value>
</property>

图2-3-1:配置SecondaryNameNode服务器

3. yarn-site.xml

(1) yarn.resourcemanager.hostname

此参数用以指定ResourceManager的服务器地址。根据规划,hadoop101为ResourceManager服务器,因此需修改此参数,使ResourceManager服务器指向hadoop101.

添加以下内容修改此参数值,配置ResourceManager服务器地址:

代码语言:javascript复制
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop101</value>
</property>

图2-3-2:配置ResourceManager服务器

4. slaves

slaves文件同样位于Hadoop的 /etc/hadoop 目录下,用于指定HDFS上有哪些DataNode节点,需要将所有DataNode节点添加进此配置文件中。

根据规划,添加DataNode节点服务器至slaves配置文件中:

代码语言:javascript复制
hadoop100
hadoop101
hadoop102

注意:该文件中添加的内容,结尾不允许有空格,且文件中不允许有空行。

四、配置SSH免密码登录

Hadoop集群中的各个机器之间会相互地通过SSH访问,用以进行分发、同步文件及集群群启动等,而SSH访问需要输入密码,可见每次访问都输入密码是不现实的,所以要配置各个机器间的SSH是免密码登录的。

1. SSH免密登录原理

图2-4-1:SSH免密登录原理

2. SSH免密登录配置步骤

(1) 使用hadoop用户在hadoop100上生成公钥和私钥

代码语言:javascript复制
ssh-keygen -t rsa

执行命令后一路回车,均设置为默认值,然后在当前用户的home目录下(/home/hadoop)的.ssh文件夹中会生成公钥及私钥文件。

图2-4-2:生成公钥和私钥

(2) 在hadoop100上分发公钥到需要免密登录的机器上

代码语言:javascript复制
ssh-copy-id hadoop100
ssh-copy-id hadoop101
ssh-copy-id hadoop102

执行后会在分发机器的.ssh目录下生成授权公钥文件。

注意:生成公私钥的机器自身也需要分发公钥,不然无法通过SSH免密登录自身机器。

图2-4-3:分发公钥文件

(3) 其他两台机器进行同样的操作

完成后在任一机器上通过SSH登录其他机器均无需再输入密码:

图2-4-4:SSH免密登录

(4) 在hadoop100上切换到root用户进行同样的操作

3. .ssh目录下的文件功能解析

设置ssh免密登录后,会在/home/${user}(如使用hadoop用户即/home/hadoop)的.ssh目录中生成以下文件:known_hosts, id_rsa.pub, id_rsa, authorized_keys.

各文件的功能如下:

图2-4-5:.ssh目录文件功能解析

03分发Hadoop文件

在hadoop100上安装并配置好hadoop后,需要通过分发文件的方式在另外两台机器上安装hadoop,以减轻工作量。

分发的方式有两种:一种是采用scp安全拷贝的方式,这种方式会将文件全部覆盖,因此效率较低,适用于新安装或大量文件改动后的拷贝分发;另一种是采用rsync增量同步方式,这种方式只对差异文件进行分发更新,效率较高,适用于修改了少量文件后的同步分发。

一、scp: 安全拷贝

scp(secure copy) 可实现服务器与服务器之间的文件数据拷贝,此方式会将源目录下的所有文件拷贝到目标目录。

1. 创建hadoop文件目录

在hadoop101及hadoop102两台服务器上创建存放hadoop文件的目录:

代码语言:javascript复制
mkdir /opt/modules/app

2. 删除hadoop中的share/doc目录(可选)

Hadoop根目录下的share/doc目录用于存放hadoop的文档,文件量较大,且用处不大,建议在分发之前将这个目录删除掉,可以节省硬盘空间并能提高分发的速度。当然,保留下来也没有问题。

3. 使用scp进行文件分发

可以在本地把文件put到目标服务器,也可以在目标服务器将文件get过来。

(1) 在hadoop100上将hadoop100的hadoop文件拷贝到hadoop101上:

代码语言:javascript复制
scp -r /opt/modules/app/hadoop-2.10.1/ hadoop@hadoop101:/opt/modules/app/

(2) 在hadoop102上将hadoop100的hadoop文件拷贝到hadoop102上:

代码语言:javascript复制
scp -r hadoop@hadoop100:/opt/modules/app/hadoop-2.10.1/ hadoop@hadoop102:/opt/modules/app/

二、rsync: 增量同步

rsync(remote synchronize) 主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。此方式只对源和目标有差异的文件进行同步更新,比scp的速度快。适合只修改了少量文件(如hadoop配置文件)后进行同步分发使用。

由于我们在hadoop100上修改了/etc/profile文件后没有同步到其他两台机器,正好可以使用这种方式将此文件从hadoop100上同步到hadoop101及hadoop102上:

代码语言:javascript复制
rsync -rvl /etc/profile root@hadoop101:/etc/profile
rsync -rvl /etc/profile root@hadoop102:/etc/profile

图3-2-1:使用rsync同步/etc/profile

同步完后记得在hadoop101级hadoop102上执行以下命令使配置生效:

代码语言:javascript复制
source /etc/profile

04格式化NameNode

由于我们规划了hadoop100为HDFS的NameNode服务器,因此只需要在hadoop100上进行NameNode的格式化。格式化是对HDFS中的DataNodes进行分块(一个块默认128M),再将分块后的初始文件元数据信息及块与块所在DataNode之间的地址映射关系存储在NameNode中。

若在安装hadoop后不是第一次进行格式化,记得在格式化前删除logs日志及data目录(我们在core-site.xml中设置的hadoop运行临时文件存储目录hadoop.tmp.dir)的数据。具体原因详见《第三篇:Hadoop部署配置及运行调试(上)》中的伪分布式模式部署3-(3)-(e).

在hadoop100上格式化NameNode:

代码语言:javascript复制
hdfs namenode -format

格式化后,查看之前配置core-site.xml文件里hadoop.tmp.dir参数指定的文件存储目录下(这里设置的是 /opt/data/tmp)是否有dfs目录,如果有,说明格式化成功。

05集群启动与停止

集群启动及停止有两种方式:一种是各个服务组件单点进行启动与停止;一种是各个模块整体进行启动与停止。

一、单点启动与停止

1. 单点启动与停止HDFS各个服务组件

(1) 在hadoop100上启动NameNode

代码语言:javascript复制
${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

(2) 在hadoop100、hadoop101、hadoop102上启动DataNode

代码语言:javascript复制
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

(3) 在hadoop102上启动SecondaryNameNode

代码语言:javascript复制
${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

(4) 停止服务将命令中的start替换成stop即可

2. 单点启动与停止YARN各个服务组件

(1) 在hadoop101上启动ResourceManager

代码语言:javascript复制
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

(2) 在hadoop100、hadoop101、hadoop102上启动NodeManager

代码语言:javascript复制
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

(3) 停止服务将命令中的start替换成stop即可

3. 单点启动与停止历史服务

(1) 在hadoop100上启动HistoryServer

代码语言:javascript复制
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver

(2) 停止服务将命令中的start替换成stop即可

启动/停止完成后使用jps命令查看启动/停止是否成功。

二、整体启动与停止

集群整体启动与停止的前提条件是需要配置SSH免密码登录。

1. 整体启动与停止HDFS

由于HDFS的NameNode部署在hadoop100上,因此整体启动与停止HDFS只需要且只能在hadoop100上操作,其他机器的HDFS相关服务组件会自动启动与停止:

代码语言:javascript复制
${HADOOP_HOME}/sbin/start-dfs.sh

图5-2-1:整体启动HDFS

整体停止HDFS服务:

代码语言:javascript复制
${HADOOP_HOME}/sbin/stop-dfs.sh

启动/停止完成后使用jps在各个机器上进行检查HDFS对应服务是否启动/停止成功。

2. 整体启动与停止YARN

由于YARN的ResourceManager部署在hadoop101上,因此整体启动与停止YARN只需要且只能在hadoop101上操作,其他机器的YARN相关服务组件会自动启动与停止:

代码语言:javascript复制
${HADOOP_HOME}/sbin/start-yarn.sh

图5-2-2:整体启动YARN

整体停止YARN服务:

代码语言:javascript复制
${HADOOP_HOME}/sbin/stop-yarn.sh

启动/停止完成后使用jps在各个机器上进行检查YARN对应服务是否启动/停止成功。

3. 启动与停止历史服务

由于HistoryServer部署在hadoop100上,且只需在此机器上启动与停止,因此历史服务的启动与停止跟单点的操作一样:

代码语言:javascript复制
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver

停止历史服务:

代码语言:javascript复制
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh stop historyserver

启动/停止完成后使用jps在检查历史服务是否启动/停止成功。

4. 查看HDFS及YARN的Web页面

(1) 查看HDFS的Web页面

在浏览器中输入地址:http://hadoop100:50070/, 通过Web页面查看HDFS的信息,检查是否正常工作:

图5-2-3:HDFS信息及文件管理Web页面

(2) 查看YARN的Web页面

在浏览器中输入地址:http://hadoop101:8088/, 通过Web页面查看YARN的资源调度信息,检查是否正常工作:

图5-2-4:YARN的资源调度管理Web页面

06运行调试

一、运行WordCount案例调试

1. 创建输入数据文件wc.input 在 /opt/data 目录下创建输入数据文件wc.input(之前创建过的可直接使用):

代码语言:javascript复制
vim /opt/data/wc.input
hadoop  hdfs   mapreduce
hadoop  hbase  hive
hadoop  storm  yarn
spark   sparkstreaming  sparksql
spark   hdfs   yarn
spark   hdfs   mapreduce
hadoop  spark
hadoop  spark

2. 在HDFS创建输入目录input

使用HDFS命令在HDFS上创建输入目录input:

代码语言:javascript复制
hdfs dfs -mkdir /input

3. 上传本地文件wc.input到HDFS上

将输入数据文件wc.input上传到刚在HDFS上创建的输入目录input中:

代码语言:javascript复制
hdfs dfs -put /opt/data/wc.input /input

可在HDFS的Web页面查看文件是否上传成功:

图6-1-1:通过HDFS的Web页面查看文件是否成功上传

4. 运行hadoop自带的WordCount案例

使用上传至HDFS的输入数据文件wc.input在YARN上执行hadoop自带的WordCount MR程序,并查看运行情况:

代码语言:javascript复制
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /input/wc.input /outpu

图6-1-2:后台查看程序运行情况

同时也可以在YARN页面查看Job的运行情况:

图6-1-3:通过YARN的Web页面查看Job运行情况

5. 查看输出结果文件

可直接在后台查看输出的结果文件:

代码语言:javascript复制
hdfs dfs -cat /output/part-r-00000

图6-1-4:后台查看输出结果文件

也可以在HDFS的Web页面中查看输出结果文件:

图6-1-5:在HDFS的Web页面查看输出结果文件

二、集群文件存储方式

在HDFS上存储的文件存放在我们在core-site.xml配置文件中设置的hadoop.tmp.dir参数路径下,此路径dfs目录下的name文件夹中存储了存放文件的位置等NameNode元数据信息,而data文件夹中则存储了真实的文件数据。

1. 查看HDFS文件存储路径

进入HDFS文件存储目录查看路径:

图6-2-1:查看HDFS文件存储目录

2. 查看HDFS在磁盘存储的文件内容

查看文件blk_1073741825、blk_1073741832,可以看到就是我们上传到HDFS的输入数据文件wc.input及wordcount输出结果文件:

图6-2-2:查看HDFS在本地存储的文件内容

由于我们在hdfs-stie.xml配置文件中设置dfs.replication参数值为3,因此这些文件会同时存储在另外随机两台DataNode机器上,这里只有三台机器做集群,因此hadoop101及hadoop102上同样的路径下也会存储这些文件:

图6-2-3:查看HDFS在其他DataNode上存储的文件内容

3. 查看HDFS中文件的存储块及节点信息

在HDFS的Web页面可以查看文件所在存储块(Block)及DataNode的信息:

图6-2-4:查看HDFS的文件存储块及节点信息

由于上传的wc.input文件大小没有超过一个block的大小(128M),因此只占用了一个block。若上传的文件大小超过128M, 则块信息会显示占用的所有block信息,大家可以进行尝试。

0 人点赞