博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDH中配置HDFS HA
阅读量:6585 次
发布时间:2019-06-24

本文共 5927 字,大约阅读时间需要 19 分钟。

原文发表在:

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

关于 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

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

安装步骤

停掉集群

停掉集群上所有服务。

bash$ 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代码内容见一文中的/opt/shell/cmd.sh。

停止客户端程序

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

备份 hdfs 元数据

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

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

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

xml
hadoop.tmp.dir
/data/dfs/nn

b,对hdfs数据进行备份

bashcd /data/dfs/nntar -cvf /root/nn_backup_data.tar .

安装服务

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

bash$ 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:

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

修改配置文件

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

xml
fs.defaultFS
hdfs://mycluster:8020
ha.zookeeper.quorum
cdh1:21088,cdh2:21088,cdh3:21088

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

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

同步配置文件

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

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

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

bash$ 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:

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

对于 cdh2:

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

启动journalnode

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

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

初始化共享存储

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

bashhdfs namenode -initializeSharedEdits

启动NameNode:

bash$ service hadoop-hdfs-namenode start

同步 Standby NameNode

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

bash$ yum install hadoop-hdfs-namenode -y

再运行:

bash$ sudo -u hdfs hadoop namenode -bootstrapStandby

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

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

然后,启动 Standby NameNode:

bash$ service hadoop-hdfs-namenode start

配置自动切换

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

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

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

bash$ hdfs zkfc -formatZK

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

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

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

测试

分别访问 和 查看谁是 active namenode,谁是 standyby namenode。

查看某Namenode的状态:

bash#查看cdh1状态$ sudo -u hdfs hdfs haadmin -getServiceState nn1active#查看cdh2状态$ sudo -u hdfs hdfs haadmin -getServiceState nn2standby

执行手动切换:

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

再次访问 和 查看谁是 active namenode,谁是 standyby namenode。

配置HBase HA

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

xml
hbase.rootdir
hdfs://mycluster:8020/hbase

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

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

最后启动 hbase 服务。

配置 Hive HA

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

bash$ /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

暂时未使用,详细说明请参考 。

配置 Hue

暂时未使用,详细说明请参考 。

配置 Llama

暂时未使用,详细说明请参考 。

转载地址:http://upano.baihongyu.com/

你可能感兴趣的文章
PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口
查看>>
IT基础架构规划方案之实际网络设计案例
查看>>
Navicat for MySQL 使用SSH方式链接远程数据库(二)
查看>>
poj 1274The Perfect Stall
查看>>
HDU 4720 Naive and Silly Muggles (外切圆心)
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
Ubuntu上运行Blender,在控制台上查看运行结果
查看>>
怎么检查网站的死链接呢?
查看>>
scrapy爬虫框架实例一,爬取自己博客
查看>>
React是UI的未来吗?
查看>>
中国人社部:2018年15个省(区、市)调整最低工资标准
查看>>
手把手教你通过Thrift 访问ApsaraDB for HBase
查看>>
MacOS安装MySQL 报错
查看>>
Vue+webpack+Element 兼容问题总结
查看>>
复杂recyclerView封装库
查看>>
见微知著 —— Redis 字符串内部结构源码分析
查看>>
Command './js-ant' failed to execute
查看>>
阿里云NFS NAS数据保护实战
查看>>
Spring cloud配置客户端
查看>>
Android API中文文档(111) —— MailTo
查看>>