Hive应用开发简介
Hive介绍
Hive是一个开源的,建立在Hadoop上的数据仓库框架,提供类似SQL的HQL语言操作结构化数据,其基本原理是将HQL语言自动转换成Mapreduce任务或Spark任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。
Hive主要特点如下:
- 通过HQL语言非常容易地完成数据提取、转换和加载(ETL)。
- 通过HQL完成海量结构化数据分析。
- 灵活的数据存储格式,支持JSON、CSV、TEXTFILE、RCFILE、ORCFILE、SEQUENCEFILE等存储格式,并支持自定义扩展。
- 多种客户端连接方式,支持JDBC接口。
Hive主要应用于海量数据的离线分析(如日志分析,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。
为保证Hive服务的高可用性、用户数据的安全及访问服务的可控制,在开源社区的Hive-3.1.0版本基础上,Hive新增如下特性:
- 基于Kerberos技术的安全认证机制。
- 数据文件加密机制。
- 完善的权限管理。
开源社区的Hive特性,请参见https://cwiki.apache.org/confluence/display/hive/designdocs。
常用概念
- keytab文件
存放用户信息的密钥文件。应用程序采用此密钥文件在MRS产品中进行API方式认证。
- 客户端
客户端直接面向用户,可通过Java API、Thrift API访问服务端进行Hive的相关操作。
- HQL语言
Hive Query Language,类SQL语句。
- HCatalog
HCatalog是建立在Hive元数据之上的一个表信息管理层,吸收了Hive的DDL命令。为Mapreduce提供读写接口,提供Hive命令行接口来进行数据定义和元数据查询。基于MRS的HCatalog功能,Hive、Mapreduce开发人员能够共享元数据信息,避免中间转换和调整,能够提升数据处理的效率。
- WebHCat
WebHCat运行用户通过Rest API来执行Hive DDL,提交Mapreduce任务,查询Mapreduce任务执行结果等操作。
权限要求
操作类型/作用对象 | 操作 | 权限要求 |
|---|---|---|
DATABASE | CREATE DATABASE dbname [LOCATION "hdfs_path"] | 如果指定了HDFS路径hdfs_path,需要是路径hdfs_path的所有者和具有RWX权限。 |
DROP DATABASE dbname | 拥有数据库dbname的所有权。 | |
ALTER DATABASE dbnameSET OWNERuser_or_role | 具有admin权限。 | |
TABLE | CREATE TABLE table_a | 拥有数据库的CREATE权限。 |
CREATE TABLE table_aAS SELECTtable_b | 拥有数据库的CREATE权限,对表table_b拥有SELECT权限。 | |
CREATE TABLE table_a LIKEtable_b | 拥有数据库的CREATE权限。 | |
CREATE [EXTERNAL] TABLE table_a LOCATION "hdfs_path" | 拥有数据库的CREATE权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 | |
DROP TABLE table_a | 是表table_a的所有者。 | |
ALTER TABLE table_a SET LOCATION "hdfs_path" | 是表table_a的所有者,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 | |
ALTER TABLE table_aSETFILEFORMAT | 是表table_a的所有者。 | |
TRUNCATE TABLE table_a | 是表table_a的所有者。 | |
ANALYZE TABLE table_a COMPUTE STATISTICS | 对表table_a拥有SELECT和INSERT权限。 | |
SHOW TBLPROPERTIES table_a | 对表table_a拥有SELECT权限。 | |
SHOW CREATE TABLE table_a | 对表table_a拥有SELECT且带有WITH GRANT OPTION的权限。 | |
Alter | ALTER TABLE table_a ADD COLUMN | 是表table_a的所有者。 |
ALTER TABLE table_a REPLACE COLUMN | 是表table_a的所有者。 | |
ALTER TABLE table_a RENAME | 是表table_a的所有者。 | |
ALTER TABLE table_a SET SERDE | 是表table_a的所有者。 | |
ALTER TABLE table_a CLUSTER BY | 是表table_a的所有者。 | |
PARTITION | ALTER TABLE table_a ADD PARTITIONpartition_spec LOCATION "hdfs_path" | 对表table_a拥有INSERT权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 |
ALTER TABLE table_a DROP PARTITIONpartition_spec | 对表table_a拥有DELETE权限。 | |
ALTER TABLE table_a PARTITIONpartition_spec SET LOCATION "hdfs_path" | 是表table_a的所有者,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 | |
ALTER TABLE table_aPARTITIONpartition_spec SET FILEFORMAT | 是表table_a的所有者。 | |
LOAD | LOAD INPATH 'hdfs_path' INTO TABLE table_a | 对表table_a拥有INSERT权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 |
INSERT | INSERT TABLE table_a SELECT FROMtable_b | 对表table_a拥有INSERT权限,对表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。 |
SELECT | SELECT * FROM table_a | 对表table_a拥有SELECT权限。 |
SELECT FROM table_aJOINtable_b | 对表table_a、表table_b拥有SELECT权限,拥有Yarn的default队列的Submit权限。 | |
SELECT FROM (SELECT FROM table_aUNION ALL SELECT FROMtable_b) | 对表table_a、表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。 | |
EXPLAIN | EXPLAIN [EXTENDED|DEPENDENCY] query | 对相关表目录具有RX权限。 |
VIEW | CREATE VIEW view_name AS SELECT ... | 对相关表拥有SELECT且带有WITH GRANT OPTION的权限。 |
ALTER VIEW view_name RENAME TOnew_view_name | 是视图view_name的所有者。 | |
DROP VIEW view_name | 是视图view_name的所有者。 | |
FUNCTION | CREATE [TEMPORARY] FUNCTION function_name AS 'class_name' | 具有admin权限。 |
DROP [TEMPORARY] function_name | 具有admin权限。 | |
MACRO | CREATE TEMPORARY MACRO macro_name ... | 具有admin权限。 |
DROP TEMPORARY MACRO macro_name | 具有admin权限。 |

- 以上所有的操作只要拥有Hive的admin权限以及对应的HDFS目录权限就能做相应的操作。
- 如果当前组件使用了Ranger进行权限控制,需基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略章节。

