Hive2

Hive2

1、hive中有哪些类型的hive参数

hive当中的参数、变量,都是以命名空间开头

命名空间 读写权限 含义
hiveconf 可读写 hive-site.xml当中的各配置变量例:hive --hiveconf hive.cli.print.header=true
system 可读写 系统变量,包含JVM运行参数等例:system:user.name=root
env 只读 环境变量例:env:JAVA_HOME
hivevar 可读写 例:hive -d val=key

通过${}方式进行引用,其中system、env下的变量必须以前缀开头

hive 参数设置方式

1、修改配置文件 ${HIVE_HOME}/conf/hive-site.xml
2、启动hive cli时,通过--hiveconf key=value的方式进行设置
例:hive --hiveconf hive.cli.print.header=true
3、进入cli之后,通过使用set命令设置

hive set命令

在hive CLI控制台可以通过set对hive中的参数进行查询、设置
	set设置:
		set hive.cli.print.header=true;
	set查看
		set hive.cli.print.header
	hive参数初始化配置
		当前用户家目录下的.hiverc文件
		如:   ~/.hiverc
		如果没有,可直接创建该文件,将需要设置的参数写到该文件中,hive启动运行时,会加载改文件中的配置。
	hive历史操作命令集
		~/.hivehistory

2、详述动态分区以及SQL

​ 从普通表向分区表中以Insert方式插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,可以基于查询参数的位置去推断分区的名称,从而建立分区。但是Hive的动态分区功能需要进行手动配置。

(1)创建分区表

create table tb_partitioned(id bigint, name string) partitioned by (time bigint) row format delimited fields terminated by '\t';
(2)加载数据到分区表中

load data local inpath '/root/data1' into table ori_partitioned partition(time='20111230000010') ; 
3)创建目标分区表

create table ori_partitioned_target(id bigint, time bigint, uid string,keyword string, url_rank int, click_num int, click_url string) PARTITIONED BY (time STRING) row format delimited fields terminated by '\t';
(4)设置动态分区

set hive.exec.dynamic.partition = true;set hive.exec.dynamic.partition.mode = nonstrict;set hive.exec.max.dynamic.partitions = 1000;set hive.exec.max.dynamic.partitions.pernode = 100;set hive.exec.max.created.files = 100000;set hive.error.on.empty.partition = false;insert overwrite table tb_partitioned_target partition (time) select id, name, time from tb_partitioned;

3、详述分桶机制以及列出分桶SQL

​ 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
​ 对于hive中每一个表、分区都可以进一步进行分桶。
​ 由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。

​ hive分桶的原理

	跟MR中的HashPartitioner的原理一模一样

    	MR中:按照key的hash值去模除以reductTask的个数

   		Hive中:按照分桶字段的hash值去模除以分桶的个数

​ hive分桶的作用

		好处:
			1、方便抽样
			2、提高join查询效率 

​ hive分桶和分区的区别

分桶表和分区表的 桶数 和 分区数的 决定机制:

分桶表的个数:由用户的HQL语句所设置的reduceTask的个数决定

表的分区的个数:也能由用户自定义指定。也能由程序自动生成, 分区是可以动态增长的

分桶表和分区表的个数的区别:
分桶表是一经决定,就不能更改,所以如果要改变桶数,要重新插入分桶数据
分区数是可以动态增长的
log日志
一天存一个分区

分桶表和分区表中数据的表现:
1、分桶表中的每个分桶中的数据可以有多个key值

2、分区表中的每个分区只有一个 key值

分桶相关SQL

(1)配置开启分桶

set hive.enforce.bucketing=true;

(2) 创建普通表

CREATE TABLE psn31( id INT, name STRING, age INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

测试数据:
1,tom,11
2,cat,22
3,dog,33
4,hive,44
5,hbase,55
6,mr,66
7,alice,77
8,scala,88

(3)创建分桶表

CREATE TABLE psnbucket( id INT, name STRING, age INT)
CLUSTERED BY (age) INTO 4 BUCKETS 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

(4)向分桶表添加数据

insert into table psnbucket select id, name, age from psn31;

(5)抽样

select id, name, age from psnbucket tablesample(bucket 2 out of 4 on age);

4、列出权限管理用到的SQL语句

三种授权模型:
1、Storage Based Authorization in the Metastore Server
基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
2、SQL Standards Based Authorization in HiveServer2
基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。
3、Default Hive Authorization (Legacy Mode)
hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
角色的添加、删除、查看、设置:
CREATE ROLE role_name;  -- 创建角色
DROP ROLE role_name;  -- 删除角色
SET ROLE (role_name|ALL|NONE);  -- 设置角色
SHOW CURRENT ROLES;  -- 查看当前具有的角色
SHOW ROLES;  -- 查看所有存在的角色
权限设置
SELECT privilege – gives read access to an object.
INSERT privilege – gives ability to add data to an object (table).
UPDATE privilege – gives ability to run update queries on an object (table).
DELETE privilege – gives ability to delete data in an object (table).
ALL PRIVILEGES – gives all privileges (gets translated into all the above privileges).
将角色授予某个用户、角色:
GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];
移除某个用户、角色的角色:
REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;
查看授予某个用户、角色的角色列表
SHOW ROLE GRANT (USER|ROLE) principal_name;
查看属于某种角色的用户、角色列表
SHOW PRINCIPALS role_name;
将权限授予某个用户、角色:
GRANT
    priv_type [, priv_type ] ...
    ON table_or_view_name
    TO principal_specification [, principal_specification] ...
    [WITH GRANT OPTION];
移除某个用户、角色的权限:
REVOKE [GRANT OPTION FOR]
    priv_type [, priv_type ] ...
    ON table_or_view_name
    FROM principal_specification [, principal_specification] ... ;	
查看某个用户、角色的权限:
SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)
上一篇:【环境安装】Hive2.x


下一篇:配置hive server2鉴权和beeline无密码链接hive数据仓库