Hive的Metastore与Hiveserver2

Metastore

原生Hive(内嵌模式)

请添加图片描述
Derby的内嵌模式:Derby数据库与应用程序共享同一个JVM,通常由应用程序负责启动和停止,对除启动它的应用程序外的其它应用程序不可见,即其它应用程序不可访问它;

不同路径下启动hive,不同路径下都会生成metastore_db文件,每一个路径下的hive拥有一套自己的元数据,无法共享。

spark和Hive一样,都是默认使用derby数据库创建的本地存储。

尝试了一下在同一目录同时启动两个spark-sql,开启第二个客户端会报错(当前目录只能有一个metastore_db):

Caused by: ERROR XJ040: Failed to start database 'metastore_db' with class loader sun.misc.Launcher$AppClassLoader@3d82c5f3, see the next exception for details.
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /home/hadoop/app/spark-2.4.3-bin-hadoop2.6/bin/metastore_db.

采用外部数据库(本地模式)

请添加图片描述创建hive-site.xml文件:

[hadoop@hadoop000 conf]$ cat hive-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://hadoop000:3306/hadoop_hive?createDatabaseIfNotExist=true</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>root</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>123456</value>
</property>
</configuration>

缺点:每启动一次hive服务,都内置启动了一个metastore,在hive-site.xml中暴露的数据库的连接信息。

单独起metastore服务(远程模式)

请添加图片描述在hive-site.xml文件加入:

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://hadoop000:9083</value>
</property>

启动metastore服务:nohup hive --service metastore &
为了高可用,可启动多个metastore。

开启的进程:

[hadoop@hadoop000 bin]$ jps -m
10626 SecondaryNameNode
10420 DataNode
14006 Jps -m
10280 NameNode
13286 RunJar /home/hadoop/app/hive-1.1.0-cdh5.15.1/lib/hive-service-1.1.0-cdh5.15.1.jar org.apache.hadoop.hive.metastore.HiveMetaStore
13836 RunJar /home/hadoop/app/hive-1.1.0-cdh5.15.1/lib/hive-cli-1.1.0-cdh5.15.1.jar org.apache.hadoop.hive.cli.CliDriver --hiveconf hive.aux.jars.path=file:///home/hadoop/app/hive-1.1.0-cdh5.15.1/auxlib/hive-exec-1.1.0-cdh5.15.1-core.jar

metastore服务实际上就是一种thrift服务,通过它我们可以获取到hive原数据,并且通过thrift获取原数据的方式,屏蔽了数据库访问需要驱动,url,用户名,密码等等细节。

Hiveserver2

请添加图片描述命令行

[hadoop@hadoop000 bin]$ ./beeline 
beeline> !connect jdbc:hive2://localhost:10000/default

beeline方式也是通过JDBC连接的,驱动为hive2。

开启的进程:

[hadoop@hadoop000 hive-1.1.0-cdh5.15.1]$ jps -m
10626 SecondaryNameNode
10420 DataNode
14996 Jps -m
10280 NameNode
14163 RunJar /home/hadoop/app/hive-1.1.0-cdh5.15.1/lib/hive-service-1.1.0-cdh5.15.1.jar org.apache.hadoop.hive.metastore.HiveMetaStore
14324 RunJar /home/hadoop/app/hive-1.1.0-cdh5.15.1/lib/hive-service-1.1.0-cdh5.15.1.jar org.apache.hive.service.server.HiveServer2 --hiveconf hive.aux.jars.path=file:///home/hadoop/app/hive-1.1.0-cdh5.15.1/auxlib/hive-exec-1.1.0-cdh5.15.1-core.jar
14779 RunJar /home/hadoop/app/hive-1.1.0-cdh5.15.1/lib/hive-beeline-1.1.0-cdh5.15.1.jar org.apache.hive.beeline.BeeLine

请添加图片描述

  • Hive的jdbc驱动种类为网络协议驱动。
    这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,后者再将其请求转化为所需的具体API调用。

  • Mysql的jdbc驱动种类为本地协议驱动。
    这种类型的驱动使用Socket,直接在客户端和数据库间通信。

参考博客:
Hive-元数据
hive安装(内置数据库derby)
Hive安装前扫盲之Derby和Metastore

JDBC驱动加载
浅析JDBC四种类型
HiveServer2 架构源码详解
Hive源码剖析之HiveServer2服务启动过程
JDBC原理&浅析HIVE-JDBC

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值