为什么在Hive中要启动Metadata和hiveserver2服务
在浩如烟海里的文章中,遍布着如何启动Metadata和hiveserver2服务,以及启动后hive出现的问题,那么到底为什么要启动这两个服务呢?为什么hiveserver后面还有个2呢?做学问从来都不能浅尝辄止,必须知道他们的前世今生,走,咱们把这俩服务的祖坟刨了去!
Metadata
先看这个Metadata服务,因为元数据包含用hive创建的database、table等的信息,元数据存储在关系型数据库中,如derby、MySQL中,而metastore作用就是客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据,有了metastore服务,就可以有多个客户端同时连接,而且客户端不需要知道MySQL的用户名和密码,只需要连接metastore服务即可。
Metastore 有3中开启方式:
1、默认开启方式:
没有配置metaStore的时候,每当开启bin/hive;或者开启hiveServer2的时候,都会在内部启动一个metastore嵌入式服务;资源比较浪费,如果开启多个窗口,就会存在多个metastore server。
2、local mataStore(本地)
当metaStore和装载元数据的数据库(MySQL)存在同一机器上时配置是此模式,开启metastore服务就只需要开启一次就好,避免资源浪费!
3、Remote Metastore(远程)
当metaStore和装载元数据的数据库(MySQL)不存在同一机器上时配置是此模式,开启metastore服务就只需要开启一次就好,避免资源浪费!
hiveserver2
为什么它叫2呢,因为人家原来还真有个1,hiveServer和hiveServer2都允许远程客户端在不启动CLI的情况下对hive进行操作,其实hiveServer和hiveServer2都是基于thrift的,既然已经存在HiveServer,为什么还需要HiveServer2呢?这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供更好的支持。果然是长江后浪推前浪,前浪死在沙滩上!
总结
Metadata服务可以使得多客户端免密连接MySQL,因为他在中间起了一个桥梁的作用。
Hiveserver2服务可以实现多客户端的并发请求,支持了开放API客户端的JDBC的使用。
而在我们使用hive时一般有mysql和jdbc的两种方式进行访问,所以与这两个服务一一对应上了,俩人一个管一个,分工明确,不会打架。这就是为什么在Hive 2.x以上版本,要先启动这两个服务,否则会报错!