hive thriftserver(重要)
一图胜千言:
Thriftserver和Metastore(功能解释见下) 1: |
---|
知识点:
- hive最实用的部分 hive thriftserver和metastore,hive thriftserver 有时候也可以叫HiveServer,实际上脚本使用HiveServer2,后者是多并发版本。(官话解释见下2)
- 如果是java本地部署(不同部署方式见下3)或者cli命令等用jdbc直连数据库,但thrift也支持jdbc,其他组件像python sparksql一般使用thrift,hue查询也通过thrift而不通过jdbc,所以thriftserver请求多,需要负载均衡。它老出问题。
- 很多组件会依赖thriftserver管理元数据,避免重复造车
- metastore 有单独的命令 hive --service metastore & 这个一般是可选组件,但实际环境中肯定要支持其他非java程序,这个也要配置
- Hsql需要用到?看情况,如果通常环境下分析有spark flink和很多OLAP引擎,用Hsql没有优势,离线任务有时会用到,复杂业务有时候也会用到自定义函数
hive_site.xml配置
服务端配置方式
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hivedb?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>user</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
客户端配置文件
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.1.xxx:9083</value>
</property>
</configuration>
hive.metastore.warehouse.dir 在hadoop下默认地址是/user/hive/warehouse
Mysql下要在$HIVE_HOME/lib下配置mysql JDBC驱动 mysql JDBC驱动下载地址.
.hiverc
文件位置 $HOME/.hiverc 启动命令行自动加载,用于配置自定义jar包和环境变量,生效的环境变量在命令行下使用set
-
- Metastore:存储表、列和Partition等元数据。包括Metastore服务和后端的关系型数据库。
- Driver:管理HiveQL执行的生命周期并贯穿Hive任务整个执行期间。运行在HiveServer2进程中。它包括:
– Compiler:编译HiveQL并将其转化为一系列相互依赖的Map/Reduce任务。
– Optimizer:优化器,分为逻辑优化器和物理优化器,分别对HiveQL生成的执行计划和MapReduce任务进行优化。 - Execution Engine:按照任务的依赖关系分别执行Map/Reduce任务。
- ThriftServer:提供thrift接口,作为JDBC和ODBC的服务端,并将Hive和其他应用程序集成起来。运行在HiveServer2进程中。
- Clients:包含命令行接口(CLI), Web UI和JDBC/ODBC 接口,为用户访问提供接口。
-
- 通过HiveServer或者HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作。
两者都允许远程客户端使用多种编程语言如Java、Python向Hive提交请求,获取结果。
HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server,而HiveServer2却不会。 既然已经存在HiveServer为什么还需要HiveServer2呢?这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。
HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。
- 通过HiveServer或者HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作。
-
- 官方wiki详细介绍了这三种方式,其中local metastore(生产环境),一种为远端存储。其中本地和远程的区别在与服务端是否配置 hive.metastore.local参数
- 官方wiki详细介绍了这三种方式,其中local metastore(生产环境),一种为远端存储。其中本地和远程的区别在与服务端是否配置 hive.metastore.local参数