Hadoop分布式集群搭建-5节点(HA 高可用)

网友投稿 773 2022-05-30

前言

本次使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA、ResourceManager+HA,并使用zookeeper来管理Hadoop集群。

(一)HDFS概述

基础架构

1、NameNode(Master)

1)命名空间管理:命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作。

2)块存储管理。

HA架构

从上面的架构图可以看出,使用Active NameNode,Standby NameNode 两个节点可以解决单点问题,两个节点通过JounalNode共享状态,通过ZKFC 选举Active ,监控状态,自动备份。

1、Active NameNode

接受client的RPC请求并处理,同时写自己的Editlog和共享存储上的Editlog,接收DataNode的Block report, block location updates和heartbeat。

2、Standby NameNode

同样会接到来自DataNode的Block report, block location updates和heartbeat,同时会从共享存储的Editlog上读取并执行这些log操作,保持自己NameNode中的元数据(Namespcae information + Block locations map)和Active NameNode中的元数据是同步的。所以说Standby模式的NameNode是一个热备(Hot Standby NameNode),一旦切换成Active模式,马上就可以提供NameNode服务。

3、JounalNode

用于Active NameNode , Standby NameNode 同步数据,本身由一组JounnalNode节点组成,该组节点奇数个。

4、ZKFC

监控NameNode进程,自动备份。

(二)YARN概述

基础架构

1、ResourceManager(RM)

接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。

2、NodeManager

节点上的资源管理,启动Container运行task计算,上报资源、container情况汇报给RM和任务处理情况汇报给AM。

3、ApplicationMaster

单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息。

4、Web Application Proxy

用于防止Yarn遭受Web攻击,本身是ResourceManager的一部分,可通过配置独立进程。ResourceManager Web的访问基于守信用户,当Application Master运行于一个非受信用户,其提供给ResourceManager的可能是非受信连接,Web Application Proxy可以阻止这种连接提供给RM。

5、Job History Server

NodeManager在启动的时候会初始化LogAggregationService服务, 该服务会在把本机执行的container log (在container结束的时候)收集并存放到hdfs指定的目录下. ApplicationMaster会把jobhistory信息写到hdfs的jobhistory临时目录下, 并在结束的时候把jobhisoty移动到最终目录, 这样就同时支持了job的recovery.History会启动web和RPC服务, 用户可以通过网页或RPC方式获取作业的信息。

HA架构

ResourceManager HA 由一对Active,Standby结点构成,通过RMStateStore存储内部数据和主要应用的数据及标记。目前支持的可替代的RMStateStore实现有:基于内存的MemoryRMStateStore,基于文件系统的FileSystemRMStateStore,及基于zookeeper的ZKRMStateStore。 ResourceManager HA的架构模式同NameNode HA的架构模式基本一致,数据共享由RMStateStore,而ZKFC成为 ResourceManager进程的一个服务,非独立存在。

(三)规划

主机规划

这里使用5台主机来配置Hadoop集群。

dwq11/192.168.1.171    dwq12/192.168.1.172    dwq13/192.168.1.173    dwq14/192.168.1.174    dwq15/192.168.1.175

Journalnode和ZooKeeper保持奇数个,这点大家要有个概念,最少不少于 3 个节点。Zookeeper课程中我们已经讲解过,这里就不再赘叙。

软件规划

用户规划

每个节点的hadoop用户组和用户需要大家自己创建,单节点已经讲过,这里就不耽误大家时间了。

目录规划

(四)集群安装前的环境检查

时钟同步

所有节点的系统时间要与当前时间保持一致。

查看当前系统时间:

date

Tue Nov  3 06:06:04 CST 2015

如果系统时间与当前时间不一致,进行以下操作:

[root@dwq11 ~]# cd /usr/share/zoneinfo/

[root@dwq11 zoneinfo]# ls //找到Asia

[root@dwq11 zoneinfo]# cd Asia/ //进入Asia目录

[root@dwq11 Asia]# ls //找到Shanghai

Hadoop分布式集群搭建-5节点(HA 高可用)

[root@dwq11 Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //当前时区替换为上海

我们可以同步当前系统时间和日期与NTP(网络时间协议)一致。

[root@dwq11 Asia]# yum install ntp   //如果ntp命令不存在,在线安装ntp

[root@dwq11 Asia]# ntpdate pool.ntp.org //执行此命令同步日期时间

[root@dwq11 Asia]# date //查看当前系统时间

hosts文件检查

所有节点的hosts文件都要配置静态ip与hostname之间的对应关系:

[root@dwq11 Asia]# vi /etc/hosts

192.168.1.171 dwq11

192.168.1.172 dwq12

192.168.1.173 dwq13

192.168.1.174 dwq14

192.168.1.175 dwq15

禁用防火墙

所有节点的防火墙都要关闭。

查看防火墙状态

[root@dwq11 Asia]# service iptables status

iptables: Firewall is not running.

如果不是上面的关闭状态,则需要关闭防火墙:

[root@dwq11 Asia]#  chkconfig iptables off //永久关闭防火墙

[root@dwq11 Asia]#  service iptables stop //临时关闭防火墙

(五)配置SSH免密码通信

这里我们以dwq11来配置ssh。

集群所有节点都要行上面的操作。

将所有节点中的共钥id_ras.pub拷贝到dwq11中的authorized_keys文件中。

cat ~/.ssh/id_rsa.pub | ssh hadoop@dwq11 'cat >> ~/.ssh/authorized_keys'  所有节点都需要执行这条命令

然后将dwq11中的authorized_keys文件分发到所有节点上面。

scp -r authorized_keys hadoop@dwq12:~/.ssh/

scp -r authorized_keys hadoop@dwq13:~/.ssh/

scp -r authorized_keys hadoop@dwq14:~/.ssh/

scp -r authorized_keys hadoop@dwq15:~/.ssh/

大家通过ssh 相互访问,如果都能无密码访问,代表ssh配置成功。

(六)脚本工具的使用

在dwq11节点上创建/home/hadoop/tools目录。

[hadoop@dwq11 ~]$ mkdir /home/hadoop/tools

cd /home/hadoop/tools

将本地脚本文件上传至/home/hadoop/tools目录下。这些脚本大家如果能看懂也可以自己写, 如果看不懂直接使用就可以,后面慢慢补补Linux相关的知识。

[hadoop@dwq11 tools]$ rz deploy.conf

[hadoop@dwq11 tools]$ rz deploy.sh

[hadoop@dwq11 tools]$ rz runRemoteCmd.sh

[hadoop@dwq11 tools]$ ls

deploy.conf  deploy.sh  runRemoteCmd.sh

查看一下deploy.conf配置文件内容。

[hadoop@dwq11 tools]$ cat deploy.conf

dwq11,all,namenode,zookeeper,resourcemanager,

dwq12,all,slave,namenode,zookeeper,resourcemanager,

dwq13,all,slave,datanode,zookeeper,

dwq14,all,slave,datanode,zookeeper,

dwq15,all,slave,datanode,zookeeper,

查看一下deploy.sh远程复制文件脚本:

查看一下runRemoteCmd.sh远程执行命令脚本内容:

以上三个文件,方便我们搭建hadoop分布式集群。具体如何使用看后面如何操作。

如果我们想直接使用脚本,还需要给脚本添加执行权限

[hadoop@dwq11 tools]$ chmod u+x deploy.sh

[hadoop@dwq11 tools]$ chmod u+x runRemoteCmd.sh

同时我们需要将/home/hadoop/tools目录配置到PATH路径中。

[hadoop@dwq11 tools]$ su root

Password:

[root@dwq11 tools]# vi /etc/profile

PATH=/home/hadoop/tools:$PATH

export PATH

我们在dwq11节点上,通过runRemoteCmd.sh脚本,一键创建所有节点的软件安装目录/home/hadoop/app。

[hadoop@dwq11 tools]$ runRemoteCmd.sh "mkdir /home/hadoop/app" all

我们可以在所有节点查看到/home/hadoop/app目录已经创建成功。

(七)jdk安装

将本地下载好的jdk1.7,上传至dwq11节点下的/home/hadoop/app目录。

添加jdk环境变量:

查看jdk是否安装成功:

出现以上结果就说明dwq11节点上的jdk安装成功。

然后将dwq11下的jdk安装包复制到其他节点:

[hadoop@dwq11 app]$ deploy.sh jdk1.7.0_79 /home/hadoop/app/ slave

dwq12,dwq13,dwq14,dwq15节点重复dwq11节点上的jdk配置即可。

(八)Zookeeper安装

将本地下载好的zookeeper-3.4.6.tar.gz安装包,上传至dwq11节点下的/home/hadoop/app目录下。

修改Zookeeper中的配置文件:

通过远程命令deploy.sh将Zookeeper安装目录拷贝到其他节点上面:

[hadoop@dwq11 app]$ deploy.sh zookeeer /home/hadoop/app  slave

通过远程命令runRemoteCmd.sh在所有的节点上面创建目录:

[hadoop@dwq11 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" all   //创建数据目录

[hadoop@dwq11 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" all   //创建日志目录

然后分别在dwq11、dwq12、dwq13、dwq14、dwq15上面,进入zkdata目录下,创建文件myid,里面的内容分别填充为:1、2、3、4、5, 这里我们以dwq11为例:

[hadoop@dwq11 app]$ cd /home/hadoop/data/zookeeper/zkdata

[hadoop@dwq11 zkdata]$ vi myid

1 //输入数字1

配置Zookeeper环境变量:

在dwq11节点上面启动Zookeeper:

[hadoop@dwq11 zkdata]$ cd /home/hadoop/app/zookeeper/

[hadoop@dwq11 zookeeper]$ bin/zkServer.sh start

[hadoop@dwq11 zookeeper]$ jps

3633 QuorumPeerMain

[hadoop@dwq11 zookeeper]$ bin/zkServer.sh stop //关闭Zookeeper

使用runRemoteCmd.sh 脚本,启动所有节点上面的Zookeeper:

runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper

查看所有节点上面的QuorumPeerMain进程是否启动:

runRemoteCmd.sh "jps" zookeeper

查看所有Zookeeper节点状态:

runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" zookeeper

如果一个节点为leader,另四个节点为follower,则说明Zookeeper安装成功。

(九)hadoop集群环境搭建

将下载好的apache hadoop-2.6.0.tar.gz安装包,上传至dwq11节点下的/home/hadoop/app目录下:

切换到/home/hadoop/app/hadoop/etc/hadoop/目录下,修改配置文件:

[hadoop@dwq11 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/

配置HDFS

配置hadoop-env.sh

[hadoop@dwq11 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79

配置core-site.xml

配置hdfs-site.xml

配置 slave

[hadoop@dwq11 hadoop]$ vi slaves

dwq13

dwq14

dwq15

向所有节点分发hadoop安装包:

[hadoop@dwq11 app]$ deploy.sh hadoop /home/hadoop/app/ slave

hdfs配置完毕后启动顺序

1、启动所有节点上面的Zookeeper进程

[hadoop@dwq11 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper

2、启动所有节点上面的journalnode进程

[hadoop@dwq11 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all

3、首先在主节点上(比如,dwq11)执行格式化

[hadoop@dwq11 hadoop]$ bin/hdfs namenode -format / /namenode 格式化

[hadoop@dwq11 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用

[hadoop@dwq11 hadoop]$bin/hdfs namenode //启动namenode

4、与此同时,需要在备节点(比如,dwq12)上执行数据同步

[hadoop@dwq12 hadoop]$ bin/hdfs namenode -bootstrapStandby //同步主节点和备节点之间的元数据

5、dwq12同步完数据后,紧接着在dwq11节点上,按下ctrl+c来结束namenode进程。 然后关闭所有节点上面的journalnode进程

[hadoop@dwq11 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all    //然后停掉各节点的journalnode

6、如果上面操作没有问题,我们可以一键启动hdfs所有相关进程

[hadoop@dwq11 hadoop]$ sbin/start-dfs.sh

启动成功之后,关闭其中一个namenode ,然后在启动namenode 观察切换的状况。

7、验证是否启动成功

通过web界面查看namenode启动情况:

http://dwq11:50070

http://dwq12:50070

上传文件至:

[hadoop@dwq11 hadoop]$ vi test.txt   //本地创建一个test.txt文件

hadoop aaa

hadoop bbb

hadoop ccc

[hadoop@dwq11 hadoop]$ hdfs dfs -mkdir /test   //在hdfs上创建一个文件目录

[hadoop@dwq11 hadoop]$ hdfs dfs -put test2.txt /test //向hdfs上传一个文件

[hadoop@dwq11 hadoop]$ hdfs dfs -ls /test //查看test2.txt是否上传成功

如果上面操作没有问题说明hdfs配置成功。

YARN安装配置

配置mapred-site.xml

配置yarn-site.xml

启动YARN

1、在dwq11节点上执行。

[hadoop@dwq11 hadoop]$ sbin/start-yarn.sh

2、在dwq12节点上面执行。

[hadoop@dwq11 hadoop]$ sbin/yarn-daemon.sh start resourcemanager

同时打开一下web界面。

http://dwq11:8088

http://dwq12:8088

关闭其中一个resourcemanager,然后再启动,看看这个过程的web界面变化。

3、检查一下ResourceManager状态

[hadoop@dwq11 hadoop]$ bin/yarn rmadmin -getServiceState rm1

[hadoop@dwq11 hadoop]$ bin/yarn rmadmin -getServiceState rm2

4、Wordcount示例测试

[hadoop@dwq11 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /test/dwq.txt /test/out/

如果上面执行没有异常,说明YARN安装成功。

hadoop 分布式集群安装,相关的jar包、脚本、配置文件可点击下载。

至此,hadoop分布式集群搭建完毕。

分布式 Hadoop

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java线程的实现方式详解(Java基础)
下一篇:ROS专题----nodelet简明笔记
相关文章