Hive2.x体系结构

一、Hive服务

Hive的shell环境只是hive命令提供的其中一项服务。我们可以在运行时使用--service选项指明要使用哪种服务。键入hive --service help可以获得可用服务列表。下面介绍一些最有用的服务:

cli:

Hive的命令行接口(shell环境)。这是默认的服务。

hiveserver2:

让Hive以提供Thrift服务的服务器形式运行,允许用不同语言编写的客户端进行访问。hiveserver2在支持认证和多用户并发方面比原始的hiveserver有很大改进。使用Thrift、JDBC和ODBC连接器的客户端需要运行Hive服务器来和Hive进行通信。通过设置hive.server2.thrift.port配置属性来指明服务器所监听的端口号(默认为10000)。

beeline

以嵌入方式工作的Hive命令行接口(类似于常规的CLI),或者使用JDBC连接到一个HiveServer2进程。

hwi

Hive的Web接口。在没有安装任何客户端软件的情况下,这个简单的Web接口可以代替CLI。另外,Hue是一个功能更全面的Hadoop Web接口,其中包括运行Hive查询和浏览Hive metastore的应用程序。

jar

与hadoop jar等价。这是运行类路径中同时包含Hadoop和Hive类Java应用程序的简便方法。

metastore

默认情况下,metastore和HIve服务运行在同一个进程里。使用这个服务,可以让metastore作为一个单独的(远程)进程运行。通过设置METASTORE_PORT环境变量(或者使用-p命令行选项)可以指定服务器监听的端口号(默认为9083)。

二、Hive客户端

如果以服务器方式运行Hive(hive --service hiveserver2),可以在应用程序中以不同机制连接到服务器。Hive客户端和服务之间的联系如下图所示:
在这里插入图片描述
Thrift客户端:

Hive服务器提供Thrift服务的运行,因此任何支持Thrift的编程语言都可与之交互。有些第三方项目还提供Python和Ruby客户端。

JDBC驱动:

Hive提供了Type4(纯Java)的JDBC驱动,定义在org.apache.hadoop.hive.jdbc.HiveDriver类中。在以jdbc:hive2://host:port/dbname形式配置JDBC URI以后,Java应用程序可以在指定的主机和端口连接到另一个进程中运行的Hive服务器。驱动使用Java的Thrif绑定来调用由Hive Thrift客户端实现的接口。

你可能还希望通过URI jdbc:hive2://,用JDBC内嵌模式来连接Hive。在这个模式下,Hive和发出调用的应用程序在同一个JVM中运行。这时不需要以独立服务器方式运行Hive,这是因为此时应用程序并不使用Thrift服务或Hive的Thrift客户端。

Beeline CLI使用JDBC驱动与Hive通信。

ODBC驱动

Hive的ODBC驱动允许支持ODBC协议的应用程序(比如商业情报软件)连接到Hive。Apache Hive的发布版本中没有ODBC驱动,不过有些厂商会提供一个免费版的ODBC驱动。(和JDBC驱动类似,ODBC驱动使用Thrift和Hive服务器进行通信。)

三、MetaStore

metastore是Hive元数据的集中存放地。metastore包括两部分:服务和后台数据的存储。metastore有三种配置方式:内嵌、本地、远程。
在这里插入图片描述
1、内嵌metastore配置

默认情况下,metastore服务和Hive服务运行在同一个JVM中,它包含一个内嵌的以本地磁盘作为存储的Derby数据库实例。这称为内嵌metastore配置(embedded metastore configuration)。

使用内嵌metastore是Hive入门最简单的方法。但是,每次只有一个内嵌Derby数据库可以访问某个磁盘上的数据库文件,这就意味着一次只能为每个metastore打开一个Hive会话。如果要试着启动第二个会话,在它试图连接metastore时,会得到错误信息。

2、本地metastore配置

如果要支持多会话(以及多用户),需要使用一个独立的数据库。这种配置称为本地metastore配置,因为metastore服务仍然和Hive服务运行在同一个进程中,但连接的却是在另一个进程中运行的数据库,在同一台机器上或在远程机器上。任何JDBC兼容的数据库都可以通过javax.jdo.option.*配置属性来供metastore使用。

重要的metastore配置属性:

属性名称类型默认值描述
hive.metastore.warehouse.dirURI/user/hive/warehouse相对于fs.default.name的目录,托管表就存储在这里
hive.metastore.uris逗号分隔的URI未设定如果未设置(默认值),则使用当前的metastore,否则连接到URI列表指定要连接的远程metastore服务器。如果有多个远程服务器,则客户端便以轮询(round robin)方式连接
javax.jdo.option.ConnectionURLURLjdbc:derby:;database Name=metastored b;create=truemetastore数据库的JDBC URL
javax.jdo.option.ConnectionDriverName字符串org.apache.derby.jdbc.EmbeddedDriverJDBC驱动器的类名
javax.jdo.option.ConnectionUserName字符串APPJDBC用户名
javax.jdo.option.ConnectionPassword字符串mineJDBC密码

对于独立的metastore,MySQL是一种很受欢迎的选择。此时javax.jdo.option.ConnectionURL应该设为jdbc:mysql://host/dbname?createDatabaseIfNotExist=true,而javax.jdo.option.ConnectionDriverName则设为com.mysql.jdbc.Driver。当然,还需要设置用户名和密码。MySQL的JDBC驱动的JAR文件(Connector/J)必须在Hive的类路径中,把这个文件放入Hive的lib目录即可。

3、远程metastore配置

在这种配置下,一个或多个metastore服务器和Hive服务运行在不同的进程内。这样一来,数据库层可以完全置于防火墙后,客户端则不需要数据库凭据(用户名和密码)从而提供了更好的可管理性和安全。

可以通过吧hive.metastore.uris设为metastore服务器URI(如果有多个服务器,各个URI之间用逗号分隔),把Hive服务设为使用远程metastore。metastore服务器URI的形式为thrift://host:port。这里,端口号对应于启动metastore服务器时所设定的METASTORE_PORT值。

完毕。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值