热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ConfiguringHiveHighAvailability

Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeperServiceDiscovery)

Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port。本文描述了hive的metastore和HiveServer2的高可用配置。使用的Hive版本为2.3.2。
单实例的构成如下图:
Configuring Hive High Availability
如果使用HiveServer2的Client并发比较少,可以使用一个HiveServer2实例,绝对没问题。
而都多实例的构成如下图:
Configuring Hive High Availability
如图,本文在hdp01和hdp04上分别启用两个HiveServer2的实例,并通过zookeeper完成HA的配置(ZooKeeper已安装并配置)。
一、Hive Metastore HA配置
1、编辑hive-site.xml文件
配置很简单,只需要指定 hive.metastore.uris的值即可。多个server之间以逗号隔开,如下图:
Configuring Hive High Availability
完了之后,同步hive-site.xml到hdp04节点上:

[hadoop@hdp01 ~]$ scp /u01/hive/conf/hive-site.xml hdp04:/u01/hive/conf/

2、重启各个节点的hive服务

[hadoop@hdp01 ~]$ hive --service metastore >/dev/null &
[hadoop@hdp01 ~]$ hive --service hiveserver2 >/dev/null &
[hadoop@hdp04 ~]$ hive --service metastore >/dev/null &
[hadoop@hdp04 ~]$ hive --service hiveserver2 >/dev/null &

3、更新FS Roots
Hive的元数据信息是存放在关系型数据库中的,我们只要找到存放这些数据的Table,然后用SQL去修改就行了。但是这样比较麻烦,你还得去登录数据库,最重要的是这样还很容易出错,所以不推荐使用。
查看当前的FS Root信息:

[hadoop@hdp01 ~]$ hive --service metatool -listFSRoot
Listing FS Roots..
hdfs://hdp01:9000/user/hive/warehouse/hivedb.db
hdfs://hdp01:9000/user/hive/warehouse
[hadoop@hdp04 ~]$ hive --service metatool -listFSRoot
Listing FS Roots..
hdfs://hdp01:9000/user/hive/warehouse/hivedb.db
hdfs://hdp01:9000/user/hive/warehouse

使用下面的命令进行模拟更新:

[hadoop@hdp01 ~]$ hive --service metatool -updateLocation hdfs://hdp04:9000 hdfs://hdp01:9000 -dryRun
Initializing HiveMetaTool..
Looking for LOCATION_URI field in DBS table to update..
Dry Run of updateLocation on table DBS..
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db
old location: hdfs://hdp01:9000/user/hive/warehouse new location: hdfs://hdp04:9000/user/hive/warehouse
Found 2 records in DBS table to update
Looking for LOCATION field in SDS table to update..
Dry Run of updateLocation on table SDS..
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/exam_score new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/exam_score
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/tbdelivermsg new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/tbdelivermsg
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/hivedb__exam_score_exam_idx__ new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/hivedb__exam_score_exam_idx__
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/hivedb__xj_student_xj_student_idx__ new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/hivedb__xj_student_xj_student_idx__
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/xj_student new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/xj_student
Found 5 records in SDS table to update

如果模拟更换成功,则使用不加-dryRun参数进行实际替换:

[hadoop@hdp01 ~]$ hive --service metatool -updateLocation hdfs://hdp04:9000 hdfs://hdp01:9000
Initializing HiveMetaTool..
Looking for LOCATION_URI field in DBS table to update..
Successfully updated the following locations..
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db
old location: hdfs://hdp01:9000/user/hive/warehouse new location: hdfs://hdp04:9000/user/hive/warehouse
Updated 2 records in DBS table
Looking for LOCATION field in SDS table to update..
Successfully updated the following locations..
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/exam_score new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/exam_score
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/tbdelivermsg new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/tbdelivermsg
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/hivedb__exam_score_exam_idx__ new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/hivedb__exam_score_exam_idx__
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/hivedb__xj_student_xj_student_idx__ new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/hivedb__xj_student_xj_student_idx__
old location: hdfs://hdp01:9000/user/hive/warehouse/hivedb.db/xj_student new location: hdfs://hdp04:9000/user/hive/warehouse/hivedb.db/xj_student
Updated 5 records in SDS table
[hadoop@hdp04 ~]$ hive --service metatool -listFSRoot
Initializing HiveMetaTool..
Listing FS Roots..
hdfs://hdp04:9000/user/hive/warehouse/hivedb.db
hdfs://hdp04:9000/user/hive/warehouse

4、测试
将一个节点的metastore关闭,然后使用beeline命令进行测试,如下:

beeline> !connect jdbc:hive2://hdp04:10000 hadoop redhat org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://hdp04:10000
Connected to: Apache Hive (version 2.3.2)
Driver: Hive JDBC (version 2.3.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hdp04:10000> use hivedb;
OK
No rows affected (0.069 seconds)
0: jdbc:hive2://hdp04:10000> show tables;

Configuring Hive High Availability
二、Hive HA配置
1、Hive配置
各个节点上编辑hive-site.xml文件,设置以下参数的值:

[hadoop@hdp01 ~]$ vi /u01/hive/conf/hive-site.xml
hive.server2.support.dynamic.service.discovery=true
hive.server2.zookeeper.namespace=hivesrv2
hive.zookeeper.quorum=hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181
hive.zookeeper.client.port=2181
hive.server2.thrift.bind.host=0.0.0.0
hive.server2.thrift.port=10000

2、启动第一个节点hive服务
启动服务:

[hadoop@hdp01 ~]$ hive --service metastore >/dev/null &
[hadoop@hdp01 ~]$ hive --service hiveserver2 >/dev/null &
[hadoop@hdp01 ~]$ zkCli.sh

Configuring Hive High Availability
如图,hive服务已注册到ZooKeeper。
3、启动第二个节点的hive服务

[hadoop@hdp04 ~]$ hive --service hiveserver2 >/dev/null &
[hadoop@hdp04 ~]$ zkCli.sh

Configuring Hive High Availability
如图,第二个hive也注册成功。
4、连接测试
Beeline 是一个 Hive 客户端,包含在 HDInsight 群集的头节点上。 Beeline 使用 JDBC 连接到 HiveServer2,后者是 HDInsight 群集上托管的一项服务。 还可以使用 Beeline 通过 Internet 远程访问 Hive on HDInsight。

[hadoop@hdp01 ~]$ beeline -u "jdbc:hive2://hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hivesrv2" -n hadoop -p
Connecting to jdbc:hive2://hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hivesrv2;user=hadoop
Enter password for jdbc:hive2://hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181/: ******
17/12/13 15:48:16 [main]: INFO jdbc.HiveConnection: Connected to 0.0.0.0:10000
Connected to: Apache Hive (version 2.3.2)
Driver: Hive JDBC (version 2.3.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.2 by Apache Hive
0: jdbc:hive2://hdp01:2181,hdp02> show databases;
+----------------+
| database_name |
+----------------+
| default |
| hivedb |
+----------------+
2 rows selected (0.43 seconds)
0: jdbc:hive2://hdp01:2181,hdp02> use hivedb;
No rows affected (0.048 seconds)
0: jdbc:hive2://hdp01:2181,hdp02> show tables;
+--------------------------------------+
| tab_name |
+--------------------------------------+
| exam_score |
| hivedb__exam_score_exam_idx__ |
| hivedb__xj_student_xj_student_idx__ |
| tbdelivermsg |
| xj_student |
+--------------------------------------+
5 rows selected (0.143 seconds)

参考文献:
1、将 Beeline 客户端与 Apache Hive 配合使用
2、HiveServer2的高可用-HA配置

转:https://blog.51cto.com/candon123/2050259



推荐阅读
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 11月26日,由中国计算机协会(CCF)主办,CCF大数据专家委员会协办,CSDN承办的Hadoop与大数据技术大会(Hadoop&BigDataTechnology ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
author-avatar
舍舍与你-6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有