Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)前期准备

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52727710

今天是十一长假的第三天,节前,很多朋友发来私信说,网上基于HA的Hadoop集群,动不动就是7、8台服务器,甚至是10几台服务器,自己的电脑Hold不住这么多虚拟机啊!有什么办法可以将服务器缩减为3台吗?今天,我就为大家带来一篇如何在3台CentOS 虚拟机上搭建基于HA的hadoop集群,首先让我们先来准备下服务器的基础环境和了解下Hadoop相关的名词,这篇文章中的内容是要求我们必须掌握的,如果您已经掌握了本博文的内容,那您可以直接进入下一篇博文《Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)》的阅读,  那么接下来,我们就直接进入主题吧。

一、服务器规划

我这里用的是3台CentOS虚拟机。

1、IP地址规划

IP地址分别为:

192.168.0.145
192.168.0.146
192.168.0.147

2、修改主机名

以192.168.0.145服务器为例:

在192.168.0.145上分别执行如下命令:

1)修改会话hostname

hostname liuyazhuang145

2)/etc/sysconfig/network中的hostname

vi /etc/sysconfig/network
HOSTNAME=liuyazhuang145

3)修改host文件

vi /etc/hosts
192.168.0.145 liuyazhuang145
其他2台服务器类似,只是192.168.0.146对应liuyazhuang146、192.168.0.147对应liuyazhuang147
注意:要将3台服务器的信息全部注册到每台服务器的/etc/hosts文件中,如下所示:

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.145 liuyazhuang145
192.168.0.146 liuyazhuang146
192.168.0.147 liuyazhuang147
完成以上配置后,服务器的规划为:

192.168.0.145 ——> liuyazhuang145
192.168.0.146 ——> liuyazhuang146
192.168.0.147 ——> liuyazhuang147

二、关闭防火墙

centos 7:
systemctl stop firewalld.service #停止
systemctl disable firewalld.service #禁用
之前的版本:
service iptables stop #停止
chkconfig iptables off #禁用

三、配置SSH免密码登录

在liuyazhuang145节点上执行

ssh-keygen -t rsa
命令,将会在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件,其中id_rsa为密钥文件,rd_rsa.pub为公钥文件,然后我们输入命令
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
将id_rsa.pub公钥文件写入authorized_keys中,此时,我们就完成了liuyazhuang145主机上的免密码登录配置,我们可以利用ssh liuyazhuang145命令来检测ssh免密码登录是否配置成功。

在其他主机上分别执行ssh-keygen -t rsa命令,并将生成的id_rsa.pub文件拷贝到liuyazhuang145主机:

[root@liuyazhuang146 ~]# scp .ssh/id_rsa.pub liuyazhuang145:/root/.ssh/146
[root@liuyazhuang147 ~]# scp .ssh/id_rsa.pub liuyazhuang145:/root/.ssh/147
然后再liuyazhuang145主机上执行命令:
cat ~/.ssh/146 >> ~/.ssh/authorized_keys
cat ~/.ssh/147 >> ~/.ssh/authorized_keys
然后将authorized_keys文件分别复制到liuyazhuang146、liuyazhuang147

[root@liuyazhuang145 ~]# scp .ssh/authorized_keys liuyazhuang146:/root/.ssh/authorized_keys
[root@liuyazhuang145 ~]# scp .ssh/authorized_keys liuyazhuang147:/root/.ssh/authorized_keys
删除liuyazhuang145节点上~/.ssh下的146/147文件
rm ~/.ssh/146
rm ~/.ssh/147
此时,完成了各台主机间的ssh免密码登录。
注意:一定是在root下配置 免密码登陆,不是的话,很麻烦 ! 每台都是!

四、Hadoop名词了解

4.1 背景 (hadoop2.x 使用的背景)

 在hadoop1.x 中使用的问题 :
(1)HDFS存在的问题:
    1.NameNode单点故障,难以应用与在线场景
    2.NameNode压力过大,且内存受限,影响系统扩展性
(2)MapReduce存在的问题:
    1.JobTracker访问压力大,影响系统拓展性
    2.难以支持除了MapReduce之外的计算框架,比如Spark,Storm等
        Spark :内存计算框架,Storm 流式计算框架;

Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)前期准备_第1张图片

4.2.Hadoop2.x

  1)HDFS :NN Federation , HA ;
  2)MapReduce : 运行 在YARN上的MR;
  3)YARN : 资源管理系统

4.3.HDFS 2.x

  1)解决了HDFS的单点故障和内存受限问题
  2)解决单点故障
     2.1) HDFS HA :通过主备NameNode解决
     2.2 )如果主NameNode发生故障,则切换到备NameNode上

4.4解决内存受限问题

    4.4.1 HDFSFederation
    4.4.2 水平拓展,支持多个NameNode
    4.4.3 每个NameNode分管一部分目录
    4.4.4 所有的NameNode共享所有的DataNode存储资源
    4.4.5.仅仅是架构上发生了变化,使用方式不变化;
    4.4.6.对HDFS使用者透明,Java API 还可以使用!

4.5.HDFS - Federation

  4.5.1 通过多个namenode / namespcae 把元数据的存储和管理分散到多个节点中,
使得namenode/namespace可以通过增加机器来进行水平拓展;
  4.5.2 能把单个namenode的负载分散到多个节点中,在HDFS数据规模较大的时候,不会也降低HDFS的性能。可以通过多个namespace来隔离不同类型的应用,把不同类型的应>用HDFS元数据存储和管理分派到不同的namenode中;
  4.5.3 每个NameNode独立工作,数据共享;

Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)前期准备_第2张图片

4.6 .HDFS 2.x HA

  主备NameNode
  4.6.1 解决单点故障问题
    (1)主NameNode对外提供服务,备NameNode同步主NameNode元数据以待切换;
    (2)所有的DataNode同时向两个NameNode汇报数据块信息
  4.6.2 两种切换选择
   (1)手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
   (2)自动切换:基于Zookeeper的实现
  4.6.3 基于Zookeeper自动切换方案
   (1)Zookeeper Failover Controller :监控NameNode的健康状态,并向Zookeeper注册NameNode
    (2) NameNode挂掉后, ZKFC 为NameNode竞争锁,获得ZKFC锁的NameNode变为active

4.7.YARN

  yarn : Yet Another Resource Negoiator
  4.7.1 Hadoop2.x  资源管理系统
    (1) 核心思想:将MRv1 中 的 JobTracker的资源管理和任务调度两个功能分开,>分别由ResourceManager和ApplicationMaster进程实现
    (2) ResourceManaer :负责整个集群的资源管理和调度
    (3) ApplicationMaster : 负责应用程序相关的事务,比如任务调度,任务监控和
容错;
  4.7.2 YARN的引入使得多个计算框架可以运行在一个集群中
    (1)每个应用程序对应一个ApplicationMaster
     (2) 目前多个计算框架可以运行在YARN上,比如MapReduce ,Spark ,Storm 等;

4.8 .MapReduc On YARN

  将MapReduce作业直接运行在YARN上,而不是由JObTracker和TaskTracker构建的MRv>系统中
  4.8.1 基本功能模块
    (1)YARN负责资源管理和调度
    (2)MRAppMaster :负责任务切分,任务调度,任务监控和容错等;
    (3)MapTask/ReduceTask :任务驱动,与MRv1一致;
  4.8.2 每个MapReduce作业对应一个MRAppMaster
    (1)MrAppMaster任务调度
   (2)YARN将资源分配给MRAPPMaster
    (3)MRAppMaster进一步将资源分配给内部的任务
  4.8.3 MRAppMater容错
    (1)失败:由YARN重新启动
    (2)任务失败后,MRAppMaster重新申请资源;

五、Hadoop名词进阶

5.1 hadoop1.0的单点问题

Hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作。在hadoop1时代,只有一个NameNode。如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了。这是hadoop1中的单点问题,也是hadoop1不可靠的表现。如下图所示,便是hadoop1.0的架构图;

Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)前期准备_第3张图片

5.2 hadoop2.0对hadoop1.0单点问题的解决

为了解决hadoop1中的单点问题,在hadoop2中新的NameNode不再是只有一个,可以有多个(目前只支持2个)。每一个都有相同的职能。一个是active状态的,一个是standby状态的。当集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为active状态的,就可以继续工作了。这就是高可靠。

5.3 使用JournalNode实现NameNode(Active和Standby)数据的共享

Hadoop2.0中,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,Quorum Journal Node(JournalNode)集群或者Nnetwork File System(NFS)进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,我们这里使用JournalNode集群进行数据共享(这也是主流的做法)。如下图所示,便是JournalNode的架构图。

Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)前期准备_第4张图片

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了

5.4 NameNode之间的故障切换

对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,这就需要利用使用ZooKeeper了。首先HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。

至此,我们完成了基于HA的Hadoop环境准备工作,您可以阅读下一篇博文《Hadoop之——Hadoop2.5.2 HA高可靠性集群搭建(Hadoop+Zookeeper)》了。

你可能感兴趣的:(Hadoop,HA,zookeeper,Hadoop,Zookeeper,Hadoop生态)