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

hive当中的参数变量,都是以命名空间开头
通过${}方式进行引用,其中systemenv下的变量必须以前缀开头

Hive 参数设置方式

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

set设置:
   set hive.cli.print.header=true;
set查看
   set hive.cli.print.header
hive参数初始化配置,启动客户端默认加载
   当前用户家目录下的.hiverc文件
   如:   ~/.hiverc
   配置:set hive.cli.print.header=true
   如果没有,可直接创建该文件(vi .hiverc),将需要设置的参数写到该文件中,hive启动运行时,会加载改文件中的配置。
hive历史操作命令集
   ~/.hivehistory

动态分区

LOAD数据时,把数据导入到不同目录下;
录数据时,不需要指定分区,所有数据都在原始表里放着!

开启支持动态分区

set hive.exec.dynamic.partition=true; 默认:false
set hive.exec.dynamic.partition.mode=nonstrict; 非严格模式
– 默认:strict(至少有一个分区列是静态分区)

原始表,加载数据

hive> 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'; 

hive> load data local inpath '/root/psn21.data' into table psn21;

动态分区,插入数据

hive> 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'; 


hive> from psn21
insert overwrite table psn22 partition(age, sex)
select id, name, likes, address, age, sex distribute by age, sex;
后面是分区字段,在psn22中也是在后面
插入数据,执行MapReduce任务



Loading data to table default.psn22 partition (age=null, sex=null)
     Time taken for load dynamic partitions : 856
    Loading partition {age=20, sex=boy}
    Loading partition {age=10, sex=boy}
    Loading partition {age=20, sex=man}
    Loading partition {age=10, sex=man}
     Time taken for adding to write entity : 8
Partition default.psn22{age=10, sex=boy} stats: [numFiles=1, numRows=3, totalSize=168, rawDataSize=165]
Partition default.psn22{age=10, sex=man} stats: [numFiles=1, numRows=2, totalSize=112, rawDataSize=110]
Partition default.psn22{age=20, sex=boy} stats: [numFiles=1, numRows=3, totalSize=167, rawDataSize=164]
Partition default.psn22{age=20, sex=man} stats: [numFiles=1, numRows=1, totalSize=51, rawDataSize=50]
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 3.26 sec   HDFS Read: 8861 HDFS Write: 726 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 260 msec
OK
id  name    likes   address age sex
Time taken: 46.652 seconds
hive>
[root@node005 ~]# hdfs dfs -cat /user/hive/warehouse/psn22/age=10/sex=boy/*
9,小明9,lol-book-movie,shenzhen:luohu-shanghai:pudong
8,小明8,lol-book-movie,shenzhen:luohu-shanghai:pudong
1,小明1,lol-book-movie,shenzhen:luohu-shanghai:pudong

《Hive参数和动态分区》 动态分区

相关参数

set hive.exec.max.dynamic.partitions.pernode;
– 每一个执行mr节点上,允许创建的动态分区的最大数量(100)
set hive.exec.max.dynamic.partitions;
– 所有执行mr节点上,允许创建的所有动态分区的最大数量(1000)
set hive.exec.max.created.files;
– 所有的mr job允许创建的文件的最大数量(100000)

《Hive参数和动态分区》 未分区

数据文件

1,小明1,10,boy,lol-book-movie,shenzhen:luohu-shanghai:pudong
2,小明2,10,man,lol-book-movie,shenzhen:luohu-shanghai:pudong
3,小明3,10,man,lol-book-movie,shenzhen:luohu-shanghai:pudong
4,小明4,20,man,lol-movie,shenzhen:luohu-shanghai:pudong
5,小明5,20,boy,lol-book-movie,shenzhen:luohu-shanghai:pudong
6,小明6,20,boy,lol-book-movie,shenzhen:luohu-shanghai:pudong
7,小明7,20,boy,lol-book-game,shenzhen:luohu-shanghai:pudong
8,小明8,10,boy,lol-book-movie,shenzhen:luohu-shanghai:pudong
9,小明9,10,boy,lol-book-movie,shenzhen:luohu-shanghai:pudong

报错:FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition co lumn. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

  • 设置Hive参数即可

Loading data to table default.psn22 partition (age=null, sex=null)
Failed with exception MetaException(message:For direct MetaStore DB connections, we don’t support retries at the client level.)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

  • 正确操作:进入mysqlmetastore 数据
  • alter table PARTITIONS convert to character set latin1;
  • alter table PARTITION_KEYS convert to character set latin1;
  • hive导入数据报错 – 知乎

参考资料

Hadoop集群上搭建Hive
Hive建表并加载数据 – 简书
Hive基础之Hive的存储类型
Hive静态分区表&动态分区表 – 瞌睡中的葡萄虎 – 博客园
Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

    原文作者:geekAppke
    原文地址: https://www.jianshu.com/p/463be8547159
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞