hive学习(六) 参数和动态分区
1.hive 参数、变量
1.1hive的命名空间:
hive当中的参数、变量,都是以命名空间开头
通过${}方式进行引用,其中system、env下的变量必须以前缀开头
1.2hive 参数设置方式
1、修改配置文件 ${HIVE_HOME}/conf/hive-site.xml
2、启动hive cli时,通过--hiveconf key=value的方式进行设置
例:hive --hiveconf hive.cli.print.header=true
3、进入cli之后,通过使用set命令设置
默认是false
1.3hive set命令
在hive CLI控制台可以通过set对hive中的参数进行查询、设置
set设置:
set hive.cli.print.header=true;
set hive.cli.print.header
hive参数持久化配置
当前用户家目录下的.hiverc文件
如: ~/.hiverc
进入hive客户端查看
如果没有,可直接创建该文件,将需要设置的参数写到该文件中,hive启动运行时,会加载改文件中的配置。
hive历史操作命令集
~/.hivehistory
2.hive动态分区
示例:
2.1数据文件data3
[root@node04 ~]# cat data3
1,小明1,10,boy,lol-book-movie,beijing:changping-shanghai:pudong
2,小明2,10,man,lol-book-movie,beijing:changping-shanghai:pudong
3,小明3,10,man,lol-book-movie,beijing:changping-shanghai:pudong
4,小明4,20,man,lol-book-movie,beijing:changping-shanghai:pudong
5,小明5,20,boy,lol-movie,beijing:changping-shanghai:pudong
6,小明6,20,boy,lol-book-movie,beijing:changping-shanghai:pudong
7,小明7,20,boy,lol-book,beijing:changping-shanghai:pudong
8,小明8,10,boy,lol-book,beijing:changping-shanghai:pudong
9,小明9,10,boy,lol-book-movie,beijing:changping-shanghai:pudong
2.2创建表psn21
create table psn21( id int, name string, age int, sex string, likes array<string>, address map<string,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' lines terminated by '\n';
2.3加载data3数据到psn21表
load data local inpath '/root/data3' into table psn21;
2.4创建一个带分区的表psn22
create table psn22( id int, name string, likes array<string>, address map<string,string> ) partitioned by(age int,sex string) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' lines terminated by '\n';
2.4将psn21的表导入到带分区的psn22表:
#在hive2.x版本如果直接将psn21查询到的对应字段插入到psn22表,会报错。3.x版本是可以的 from psn21 insert into psn22 select id,name,likes,address,age,sex; #正确操作应该用一个关键字 distribute by partition1,partition2 from psn21 insert into psn22 select id,name,likes,address,age,sex distribute by age,sex;
3.常用参数设置
3.1开启支持动态分区
默认:false
set hive.exec.dynamic.partition=true;
默认:strict(至少有一个分区列是静态分区)
set hive.exec.dynamic.partition.mode=nostrict;
3.2相关参数
每一个执行mr节点上,允许创建的动态分区的最大数量(100)
set hive.exec.max.dynamic.partitions.pernode;
所有执行mr节点上,允许创建的所有动态分区的最大数量(1000)
set hive.exec.max.dynamic.partitions;
所有的mr job允许创建的文件的最大数量(100000)
set hive.exec.max.created.files;