大数据平台Hadoop之HDFS HA的搭建

大数据平台HadoopHDFS HA的搭建

摘要:Hadoop实现了一个分布式文件系统Hadoop Distributed File System),简称HDFSHDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

Hadoop 2.0.0之前,NameNodeHDFS集群中存在单点故障的问题。一个集群只有一个NameNode,如果NameNode所在的主机宕机或者进程不可用,整个集群将不可用,直到NameNode从新启动。这两个方面影响了HDFS集群的总体可用性:(1)如果NameNode所在主机崩溃,集群将不可用,直到操作员重新启动NameNode。(2NameNode机器上的计划维护事件(如软件或硬件升级)将导致集群停机。另外,仅一台NameNode存在内存受限的问题,影响系统扩展性。

HDFS HA通过在同一集群中运行两台NameNode来解决上述问题。其中一台NamNode处于活动状态,另一台处于备用状态。这允许在机器崩溃或计划维护的情况下快速故障切换到新的NameNode

关键词:Hadoop ; HDFS HA

 


1.工作原理

HDFS HA集群中,将两台独立的计算机配置为NameNodes,在任何时间点,其中一个NameNodes处于活动状态,另一个处于备用状态。处于活动状态的NameNode负责集群中的所有客户端操作,处于备用状态的NameNode的元数据需要与活动状态的NameNode的保持一致,以便在必要时提供快速故障转移。

为了使备用节点与活动节点保持同步,两个节点都与一组名为JournalNodes”(JN)的独立守护程序进行通信。将处于活动状态的NameNode产生的记录日志文件edits交由JN集群来管理,而处于备用状态的NameNode将不断观察记录日志文件的变换,并同步自己的命名空间。

为了实现自动故障转移,需要为HDFS部署添加了两个新组件:ZooKeeper集群和ZKFailoverController进程(简称为ZKFC)。 ZooKeeper是一种高度可用的服务,用于维护少量协调数据,通知客户该数据的更改,以及监控客户端的故障ZKFailoverControllerZKFC)是一个新的组件,它是一个ZooKeeper客户端,它还监视和管理NameNode的状态。运行NameNode的每台机器都运行一个ZKFC

 

1_1 HDFS HA 架构图

1.环境搭建

1.1使用VirtualBox安装CentOS 7

使用CentOS 764位)做为系统环境,安装4CentOS 7 虚拟主机。通过修改/etc目录下hostname文件来修改主机名,4台机器主机名分别修改为s1,s2,s3,s4

1.2配置静态IP地址

先将各台虚拟主机的网络改为桥接模式(桥接模式使得虚拟机能被分配得到网络中一个独立的IP,所有网络功能完全和网络中的真实机器一样),再为各台主机配置静态IP地址。第一步,通过修改/etc/sysconfig/network-scripts目录下ifcfg-enpS文件。将BOOTPROTO修改为staticONBOOT修改为yes。并添加配置IPADDRip地址),GATAWAY(网关),NETMASK(子网掩码),DNS(域名解析服务器),具体参数视所在局域网决定。

第二步,重启网络服务,通过命令service network restart来实现。

第三步,测试网络是否通畅,通过命令ping www.baidu.com来实现。

1.3关闭防火墙

由于防火墙会禁止端口访问网络,影响集群中各个主机之间的通信,所以要关闭防火墙。通过命令sudo systemctl stop firewalld.service关闭防火墙。通过命令sudo systemctl disable firewalld.service来关闭防火墙开机启动。

1.4安装ssh实现主机间免密码访问

在各台主机安装ssh,通过命令yum install openssh-server -y来实现

在各台主机使用rsa算法在.ssh目录下生成公匙(id_rsa.pub)和私匙(id_rsa),通过命令ssh-keygen -t rsa -P ‘ ’ -f ~/.ssh/id_rsa来实现。

通过scp命令将s1主机的公匙发给s2主机,并将公匙追加到s2authorized_keys,通过命令cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys实现。

s1现在可以免密码访问s2。以此类推,只需将A主机的公匙追加到B主机的authorized_keys,便可实现A主机免密码访问B主机。

1.5使用Xshell软件实现Windows主机访问Linux虚拟机

Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的,能够实现文件的上传、下载等功能。Xshell的使用:

1)新建一个会话,在XshellWindows客户端上连接各台CentOS 7虚拟机。

2)在各台虚拟机上,安装上传下载工具包rzsz。通过yum install -y lrzsz来实现。

3)在Windows客户端上传文件,上传命令是rz。从虚拟机下载文件,使用命令sz +文件名。

2.软件安装

2.1 jdk安装

Java官网上下载Linux 64jdk压缩包jdk-8u121-linux-x64.tar.gz,并通过Xshell软件将压缩包上传到各台CentOS虚拟机。

在各台虚拟机usr目录下创建soft目录,用来存放用户安装的软件。并修改usr目录的权限,使得该目录可以被所有人写入,通过命令chmod a+w /usr/soft实现。

1)将jdk压缩包解压到soft目录下,通过命令tar -xzvf  jdk-8u121-linux-x64.tar.gz -C /usr/soft命令来实现。

2)配置Java环境变量。修改/etc目录下environment文件,添加JAVA_HOME=/usr/soft/jdk1.8.0_121(即jdk的解压路径),另起一行添加PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/soft/jdk1.8.0_121/bin:

3)使环境变量配置立即生效,使用source /etc/environment命令。

4)打印JAVA_HOMEPATH,查看环境变量配置是否生效。使用命令echo$JAVA_HOMEecho$PATH。若能够成功显示出配置的环境变量,则配置成功。

5)测试Java是否安装成功。通过命令java version来查看。

2.2 Hadoop软件安装

1)从Hadoop官网上下载Hadoop 2.7.3版,通过Xshell软件将压缩包上传到各台CentOS虚拟机。

2)将压缩包解压到soft目录下,通过命令tar -xzvf hadoop-2.7.3.tar.gz -C /usr/soft来实现。

3)配置Hadoop环境变量。修改/etc目录下environment文件,添加一行HADOOP_INSTALL=/usr/soft/hadoop-2.7.3(即Hadoop的解压路径)。并在PATH中添加/usr/soft/hadoop-2.7.3/sbin:/usr/soft/hadoop-2.7.3/bin:

4)使环境变量配置立即生效,使用source /etc/environment命令。

5)打印HADOOP_INSTALLPATH,查看环境变量配置是否生效。使用命令echo $HADOOP_INSTALLecho$PATH。若能够成功显示出配置的环境变量,则配置成功。

6)测试Hadoop是否安装成功。通过命令hadoop version来查看。

2.3 zookeeper安装

1)从zookeeper官网上下载zookeeper-3.4.9版,通过Xshell软件将压缩包上传到各台CentOS虚拟机。

2)将压缩包解压到soft目录下,通过命令tar -xzvf zookeeper-3.4.9.tar.gz-C /usr/soft来实现。

3)配置zookeeper环境变量。修改/etc目录下environment文件,添加一行ZOOKEEPER_HOME=/usr/soft/zookeeper-3.4.9(即zookeeper的解压路径)。并在PATH中添加/usr/soft/zookeeper-3.4.9/bin

4)使环境变量配置立即生效,使用source /etc/environment命令。

5)打印ZOOKEEPER_HOMEPATH,查看环境变量配置是否生效。使用命令echo $ZOOKEEPER_HOMEecho $PATH。若能够成功显示出配置的环境变量,则配置成功。

3.修改配置文件

HDFS配置文件在Hadoop解压目录下的/etc/hadoop目录下,需要修改hdfs-site.xmlcore-site.xmlyarn-site.xmlmapred-site.xmlslaves这些配置文件。集群中每个主机的配置文件都相同,配置完一台主机的配置文件,需要将配置文件同步到其他主机。

3.1 配置hdfs-site.xml 

#dfs.nameservices是自定义名称服务

<property>

  <name>dfs.nameservices</name>

  <value>sxt</value>

</property>

#dfs.ha.namenodes.sxt是用来确定集群NamdeNode ID

<property>

  <name>dfs.ha.namenodes.sxt</name>

  <value>nn1,nn2</value>

</property>

#配置两个NameNoderpc地址

<property>

  <name>dfs.namenode.rpc-address.sxt.nn1</name>

  <value>s1:8020</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.sxt.nn2</name>

  <value>s2:8020</value>

</property>

#配置两个NameNodehttp地址

<property>

  <name>dfs.namenode.http-address.sxt.nn1</name>

  <value>s1:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.sxt.nn2</name>

  <value>s2:50070</value>

</property>

#配置JournalNodes地址

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://s2:8485;s3:8485;s4:8485/sxt</value>

</property>

#配置自动故障转移的代理

<property>

  <name>dfs.client.failover.proxy.provider.sxt</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

#指定免密钥的方式为ssh

<property>

    <name>dfs.ha.fencing.methods</name>

    <value>sshfence</value>

</property>

#指定私钥文件的地址

<property>

    <name>dfs.ha.fencing.ssh.private-key-files</name>

    <value>/root/.ssh/id_rsa</value>

</property>

#edits文件在JournalNode集群存放的路径

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/opt/journal/data</value>

</property>

#设置集群自动故障转移

<property>

  <name>dfs.ha.automatic-failover.enabled</name>

  <value>true</value>

</property>

3.2配置core-site.xml

#配置默认的文件系统名称,是请求hdfs的入口

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://sxt</value>

</property>

<property>

  <name>hadoop.tmp.dir</name>

  <value>/opt/hadoop</value>

</property>

#配置运行ZooKeeper服务的主机

<property>

  <name>ha.zookeeper.quorum</name>

  <value>s1:2181,s2:2181,s3:2181</value>

</property>

3.3配置slaves

slaves配置的是DataNode,将slaves编辑为s1 s2,将s1s2主机作为DataNode

3.4配置yarn-site.xml

 <property>

   <name>yarn.nodemanager.aux-services</name>

   <value>mapreduce_shuffle</value>

  </property>

#启用resourcemanager高可用

<property>

   <name>yarn.resourcemanager.ha.enabled</name>

   <value>true</value>

</property>

<property>

  <name>yarn.resourcemanager.cluster-id</name>

  <value>sxt2yarn</value>

</property>

<property>

  <name>yarn.resourcemanager.ha.rm-ids</name>

  <value>rm1,rm2</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname.rm1</name>

  <value>s3</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname.rm2</name>

  <value>s4</value>

</property>

#指定zookeeper集群地址

<property>

  <name>yarn.resourcemanager.zk-address</name>

  <value>s1:2181,s2:2181,s3:2181</value>

</property>

3.5配置mapred-site.xml

 <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

</property>

3.6 zookeeper配置文件的修改

Zookeeper配置文件在zookeeper解压目录下的conf目录下,zookeeper配置文件操作如下:

1)先从zoo_sample.cfg复制一份文件并明明为zoo.cfg,通过命令cp zoo_sample.cfg zoo.cfg来实现。

2)修改zoo.cfg配置文件,如下:

#配置数据存储路径

dataDir=/opt/zookeeper

#列出构成ZooKeeper服务的服务器

server.1=s1:2888:3888

server.2=s2:2888:3888

server.3=s3:2888:3888

(3)创建/opt/zookeeper目录(即配置文件dataDir路径),在该目录下创建myid文件。myid文件包含服务器的编号。s1主机的myid里编辑为1s2主机myid里编辑为2s3主机myid里编辑为3

4.启动集群

1)在s2s3s4主机上启动JournalNode,通过命令hadoop-daemon.sh start journalnode来实现。

2)在s1主机上格式化NameNode,通过命令hdfs namenode -format来实现。并启动该NameNode,通过命令hadoop-daemon.sh start namenode来实现。

3)同步另一台没有被格式化的NameNode,通过命令hadoop-daemon.sh start namenode -bootstrapStandby

4)启动zookeeper集群,在s1s2s3主机上执行zkServer.sh start来实现。

5)格式化zookeeper,在一台NameNode上执行hdfs zkfc -format命令。

6)启动HDFS集群。通过命令start-all.sh来实现。如果ResourceManager结点没有启动,可以通过命令yarn-daemon.sh start resourcemanager命令启动。浏览NameNodeWeb信息,通过访问地址 http// s150070 /s1是处于活动状态的NameNode浏览ResourceManagerWeb界面,通过访问地址http://s3:8088/s3是处于活动状态的ResourceManager

7)关闭集群。通过命令stop-all.sh先关闭HDFS集群,再通过命令zkServer.sh stop关闭zookeeper集群。

8)再次启动集群时,先启动zookeeper集群,再启动HDFS集群。

5.总结

HDFS HA集群是基于High Availability With QJM技术。共有两个NameNode,两个ResourceManager,都是一个处于活动状态,另一个处于备用状态。这样能有效解决单点故障的问题,当处于活动状态的NameNodeResourceManager)不可用时,处于备用状态的NameNodeResourceManager)能转化为活动状态,接替不可用结点的工作。下面是系统架构表:

 

NN

DN

JN

ZK

ZKFC

RM

S1

1

 

 

1

1

 

S2

1

 

1

1

1

 

S3

 

1

1

1

 

1

S4

 

1

1

 

 

1

5_1系统架构表

(注:NNNameNode的缩写,DNDataNode的缩写,JNJournalNode的缩写,ZKzookeeper的缩写,RMResourceManager的缩写。)

在真实的生产环境中一台结点对应一台真实机器。但是在实验环境里,将多个结点放在一台机器上。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

qq_28808697

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值