CDH中配置HDFS HA

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

最近又安装 hadoop 集群, 故尝试了一下配置 HDFS 的 HA,CDH4支持Quorum-based Storageshared storage using NFS两种HA方案,而CDH5只支持第一种方案,即 QJM 的 HA 方案。

关于 hadoop 集群的安装部署过程你可以参考 使用yum安装CDH Hadoop集群 或者 手动安装 hadoop 集群的过程

集群规划

我一共安装了三个节点的集群,对于 HA 方案来说,三个节点准备安装如下服务:

  • cdh1:hadoop-hdfs-namenode(primary) 、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc
  • cdh2:hadoop-hdfs-namenode(standby)、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc
  • cdh3: hadoop-hdfs-journalnode

根据上面规划,在对应节点上安装相应的服务。

安装步骤

停掉集群

停掉集群上所有服务。

$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep spark` ; do service $x stop ; done'
​$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep impala` ; do service $x stop ; done'
$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hive` ; do service $x stop ; done'
$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hbase` ; do service $x stop ; done'
$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hadoop` ; do service $x stop ; done'

cmd.sh代码内容见Hadoop集群部署权限总结一文中的/opt/shell/cmd.sh。

停止客户端程序

停止服务集群的所有客户端程序,包括定时任务。

备份 hdfs 元数据

a,查找本地配置的文件目录(属性名为 dfs.name.dir 或者 dfs.namenode.name.dir或者hadoop.tmp.dir )

grep -C1 hadoop.tmp.dir /etc/hadoop/conf/hdfs-site.xml

#或者
grep -C1 dfs.namenode.name.dir /etc/hadoop/conf/hdfs-site.xml

通过上面的命令,可以看到类似以下信息:

<property>
<name>hadoop.tmp.dir</name>
<value>/data/dfs/nn</value>
</property>

b,对hdfs数据进行备份

cd /data/dfs/nn
tar -cvf /root/nn_backup_data.tar .

安装服务

在 cdh1、cdh2、cdh3 上安装 hadoop-hdfs-journalnode

$ ssh cdh1 'yum install hadoop-hdfs-journalnode -y '
$ ssh cdh2 'yum install hadoop-hdfs-journalnode -y '
$ ssh cdh3 'yum install hadoop-hdfs-journalnode -y '

在 cdh1、cdh2 上安装 hadoop-hdfs-zkfc:

ssh cdh1 "yum install hadoop-hdfs-zkfc -y "
ssh cdh2 "yum install hadoop-hdfs-zkfc -y "

修改配置文件

修改/etc/hadoop/conf/core-site.xml,做如下修改:

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster:8020</value>
</property>
<property>
	<name>ha.zookeeper.quorum</name>
	<value>cdh1:21088,cdh2:21088,cdh3:21088</value>
</property>

修改/etc/hadoop/conf/hdfs-site.xml,删掉一些原来的 namenode 配置,增加如下:

<!--  hadoop  HA -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>cdh1:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>cdh2:8020</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>cdh1:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>cdh2:50070</value>
</property>
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://cdh1:8485,cdh2:8485,cdh3:8485/mycluster</value>
</property>
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/data/dfs/jn</value>
</property>
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence(hdfs)</value>
</property>
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/var/lib/hadoop-hdfs/.ssh/id_rsa</value>
</property>
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>

同步配置文件

将配置文件同步到集群其他节点:

$ sh /opt/syn.sh /etc/hadoop/conf /etc/hadoop/

在journalnode的三个节点上创建目录:

$ ssh cdh1 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'
$ ssh cdh2 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'
$ ssh cdh3 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'

配置无密码登陆

在两个NN上配置hdfs用户间无密码登陆:

对于 cdh1:

$ passwd hdfs
$ su - hdfs
$ ssh-keygen
$ ssh-copy-id  cdh2

对于 cdh2:

$ passwd hdfs
$ su - hdfs
$ ssh-keygen
$ ssh-copy-id   cdh1

启动journalnode

启动cdh1、cdh2、cdh3上的 hadoop-hdfs-journalnode 服务

$ ssh cdh1 'service hadoop-hdfs-journalnode start'
$ ssh cdh2 'service hadoop-hdfs-journalnode start'
$ ssh cdh3 'service hadoop-hdfs-journalnode start'

初始化共享存储

在namenode上初始化共享存储,如果没有格式化,则先格式化:

hdfs namenode -initializeSharedEdits

启动NameNode:

$ service hadoop-hdfs-namenode start

同步 Standby NameNode

cdh2作为 Standby NameNode,在该节点上先安装namenode服务

$ yum install hadoop-hdfs-namenode -y

再运行:

$ sudo -u hdfs hadoop namenode -bootstrapStandby

如果是使用了kerberos,则先获取hdfs的ticket再执行:

$ kinit -k -t /etc/hadoop/conf/hdfs.keytab hdfs/cdh1@JAVACHEM.COM
$ hadoop namenode -bootstrapStandby

然后,启动 Standby NameNode:

$ service hadoop-hdfs-namenode start

配置自动切换

在两个NameNode上,即cdh1和cdh2,安装hadoop-hdfs-zkfc

$ ssh cdh1 'yum install hadoop-hdfs-zkfc -y'
$ ssh cdh2 'yum install hadoop-hdfs-zkfc -y'

在任意一个NameNode上下面命令,其会创建一个znode用于自动故障转移。

$ hdfs zkfc -formatZK

如果你想对zookeeper的访问进行加密,则请参考 Enabling HDFS HA 中 Securing access to ZooKeeper 这一节内容。

然后再两个 NameNode 节点上启动zkfc:

$ ssh cdh1 "service hadoop-hdfs-zkfc start"
$ ssh cdh2 "service hadoop-hdfs-zkfc start"

测试

分别访问 http://cdh1:50070/ 和 http://cdh2:50070/ 查看谁是 active namenode,谁是 standyby namenode。

查看某Namenode的状态:

#查看cdh1状态
$ sudo -u hdfs hdfs haadmin -getServiceState nn1
active

#查看cdh2状态
$ sudo -u hdfs hdfs haadmin -getServiceState nn2
standby

执行手动切换:

$ sudo -u hdfs hdfs haadmin -failover nn1 nn2
Failover to NameNode at cdh2/192.168.56.122:8020 successful

再次访问 http://cdh1:50070/ 和 http://cdh2:50070/ 查看谁是 active namenode,谁是 standyby namenode。

配置HBase HA

先停掉 hbase,然后修改/etc/hbase/conf/hbase-site.xml,做如下修改:

<!-- Configure HBase to use the HA NameNode nameservice -->
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://mycluster:8020/hbase</value>       
  </property>

在 zookeeper 节点上运行/usr/lib/zookeeper/bin/zkCli.sh

$ ls /hbase/splitlogs
$ rmr /hbase/splitlogs

最后启动 hbase 服务。

配置 Hive HA

运行下面命令将hive的metastore的root地址的HDFS nameservice。

$ /usr/lib/hive/bin/metatool -listFSRoot 
Initializing HiveMetaTool..
Listing FS Roots..
hdfs://cdh1:8020/user/hive/warehouse  

$ /usr/lib/hive/bin/metatool -updateLocation hdfs://mycluster hdfs://cdh1 -tablePropKey avro.schema.url 
-serdePropKey schema.url  

$ metatool -listFSRoot 
Listing FS Roots..
Initializing HiveMetaTool..
hdfs://mycluster:8020/user/hive/warehouse

配置 Impala

不需要做什么修改,但是一定要记住 core-site.xml 中 fs.defaultFS 参数值要带上端口号,在CDH中为 8020。

配置 YARN

暂时未使用,详细说明请参考 MapReduce (MRv1) and YARN (MRv2) High Availability

配置 Hue

暂时未使用,详细说明请参考 Hue High Availability 

配置 Llama

暂时未使用,详细说明请参考 Llama High Availability 

相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
Web App开发 SQL 资源调度
CDH/CDP中开启kerberos后如何访问HDFS/YARN/HIVESERVER2 等服务的webui
CDH/CDP中开启kerberos后如何访问HDFS/YARN/HIVESERVER2 等服务的webui
|
6月前
|
分布式计算 Hadoop
Hadoop Hdfs配置过程全程报道
Hadoop Hdfs配置过程全程报道
|
7月前
|
存储 分布式计算 Hadoop
Hadoop配置手册2: 测试Hdfs和WordCount测试
Hadoop配置手册2: 测试Hdfs和WordCount测试
87 0
|
机器学习/深度学习 移动开发 分布式计算
配置 HDFS-配置 core-site-hdfs-size 以及 env.sh 等配置文件|学习笔记
快速学习配置 HDFS-配置 core-site-hdfs-size 以及 env.sh 等配置文件
340 0
|
分布式计算 资源调度 Hadoop
CDH 搭建_ Hadoop _ HDFS _主节点|学习笔记
快速学习 CDH 搭建_ Hadoop _ HDFS _主节点
326 0
CDH 搭建_ Hadoop _ HDFS _主节点|学习笔记
|
SQL 分布式计算 资源调度
CDH 搭建_ Hadoop _ HDFS _从节点和总结|学习笔记
快速学习 CDH 搭建_ Hadoop _ HDFS _从节点和总结
148 0
CDH 搭建_ Hadoop _ HDFS _从节点和总结|学习笔记
|
机器学习/深度学习 SQL 分布式计算
配置 HDFS-创建 Kerberos 对应的账户设置 Keytab 文件|学习笔记
快速学习配置 HDFS-创建 Kerberos 对应的账户设置 Keytab 文件
1592 0
|
机器学习/深度学习 分布式计算 资源调度
配置 HDFS-启动 HDFS 测试|学习笔记
快速学习配置 HDFS-启动 HDFS 测试
189 0
配置 HDFS-启动 HDFS 测试|学习笔记
|
分布式计算 安全 Hadoop
配置 HDFS-配置 https 证书以及 ssl 配置文件|学习笔记
快速学习配置 HDFS-配置 https 证书以及 ssl 配置文件
842 0
配置 HDFS-配置 https 证书以及 ssl 配置文件|学习笔记
|
资源调度 分布式计算 安全
配置 HDFS-编译 executor-container|学习笔记
快速学习配置 HDFS-编译 executor-container
355 0

相关实验场景

更多