2023年11月26日发(作者:)

Hive常⽤操作⼤全

⽬录

⼀、常⽤操作

1、查看数据库:

show databases;

2、根据字段筛选和查找表:

show tables like '*?*'

3、查看表结构:

desc TABLE_NAME;

4、查看当前所在的数据库:

select current_database();

5、查看表的创建信息:

show create table 表名

6、删除表::purge直接删掉,不保留在回收站;

drop table 表名 [purge]

7、清空表数据::清空表数据(仅限内部表,外部表不需要)。

truncate table 表名

8、针对元数据修改表: 。后⾯可跟多种修改类型,具体操作如下图所⽰:

13、Hive存储的数据结构

⼆、建表操作

1、创建[外部]表:

create [external] table TABLE_NAME( 字段 字段类型) row format delimited fields terminated by '分隔符' [mapstruct等其他限制条

件,如果有]

2、CTAS建表:就是从⼀个SQL查询结果来创建⼀个表进⾏存储:,⼀般⽤在清洗脏表时

create table 新建表名称 row format ... as + 查询语句

新建表

3、CTE查询和建表:。在with前使⽤,则将查询结果作为新表内容存储到数据库中(永

with 表名 as (sql语句)+查询语句create table 表名 as

久,⾮临时),即为CTE建表

4、视图:新建视图:。视图是已经编译好的sql语句,依赖于表,随着表的变化⽽变化,类似于Excel

create view VIEW_NAME as +查询语句

⾥数据透视图或⽣成的柱状图等。可以通过来重构视图结构

alter view 视图名字 as +查询语句

5、临时表:在上⾯任何⼀种建表⽅式中,在create和表名之间加上temporary,即为临时表。临时表只对当前session(会话窗⼝)有效,

退出当前session时⾃动删除,表的路径在tmp⽬录下。建表语句为:

create temporary table 表名 ...

6、分区表:新建时,在row format前⾯加上partitioned by (字段 字段类型);导⼊数据时在最后⾯加partition(字段=分区名);查看分区

show partitions 表名;alter table 表名 drop partition (字段=分区名);分区表就是⼀个⽂件⽬录

6.2、外部分区表,⼀般分区表都是清洗后insert插进去,但有时我们需要根据已有数据建⼀个外部分区表,此时装载数据需要使⽤

alter

table _logs add partition (log_data='20210311') location '/upload/20210311';

,删除的话,把add替换为drop即可

7、分桶表:hive⾃动根据bucket数量分桶:⼿动指定reduce数量:

set ing = true;set s = num;set

= num;clustered by (TANLE_NAME) into N buckets

(不推荐⼿动),并在 create 后row format前增加:

8、分桶表抽样:;其中x为第⼏个部分,Y为分桶数量的整数倍或因⼦。如果Y为分桶

select * from 表名 tablesample(bucket X out of Y on id) s

数,则数据为第X个桶;如果Y为⼩于分桶数的因⼦,则数据为X+[n]Y的数据;如果Y为⼤于分桶数的倍数,则可以理解为重新分桶为Y,

数据为Y中的第X个桶。

9、CTL建表,like:创建⼀个表结构,意思是抄袭后⼀个表的表结构,建出来的是⼀个空表

create table 表名 like 表名;

或者

create table ... as select * from ... where 1=2

10、侧视图lateral view:侧视图⼀般和表⽣成函数(explode等)使⽤,对⾏⾥的数组、map、结构体进⾏拆分,⽤来规范⾏,或者解析

json格式的数据。案例:

select 字段,新别名1,新别名2,新别名3,新别名4,新别名5,新别名6

from 表名

lateral view explode(数组字段1) 别名1 as 新别名1

lateral view explode(map字段2) 别名2 as 新别名2,新别名3

lateral view inline(array(结构体)) 别名3as 新别名4,新别名5,新别名6;

三、建表注意点

1、有表头的⽂件,忽视掉表头:

tblproperties(""="1")

2、csv⽂件默认分隔符是逗号,但有的字段⾥也包含逗号,所以row format后要正则替换为

row format serde

'VSerde' with serdeproperties("separatorchar"=",","escapeChar"="")

3、对于字段⾥的重复数据,如果需要在原有基础上更新为⾮重复的数据,可将原字段分区,这样重复的字段就会被分到⼀个区,然后对第

⼆个以后的数据分别做处理,即可。

4、不指定分隔符的话,hive表的默认分隔符是,字段:^A ,集合: ^B,映射: ^C

四、加载数据

1、导⼊数据:本地是复制,HDFS⾥如果没有指定location时会移动hdfs数据到warehouse⽬

load data [local] inpath 'PATH' into table NAME;

录下,指定的话就不移动

2、更新源数据:不写overwrite是追加

load data [local] inpath 'PATH' overwrite into table NAME;

3、新建数据库并把表加载进去的⽅法,把多个建表、导数据的sql语句写在代码内,然后在虚拟机下执⾏:,即可⼀次性

hive -f 代码⽂件名

建⽴好数据库并导⼊数据。

五、装载数据

1、INSERT表插⼊数据,⽀持overwrite(覆盖)和into(追加),数据插⼊的列数必须与指定列数相同

基本语法:

insert overwrite/into table 表名1 [partition(partcol1=val1, partcol2=val2 ...)] select fileds,... from 表名2;

⽀持插⼊值列表:

insert into 表名 values_list

insert into⽀持指定插⼊到哪些字段中:

insert into table(x,y,z) ...

多插⼊:

from 表名

insert overwrite 表名2 select *

insert overwrite 表名3 select *;

插⼊到分区:

from 表名

insert overwrite table 表名 partition(Field1,Field2)

select *,'part1','part2';

通过指定列插⼊(insert into可以省略table关键字)

insert into 表名(字段1) select 'John' from 表名2 limit 1;

通过指定值插⼊

insert into 表名(字段1) value('Judy'),('John');

使⽤insert语句将数据插⼊/导出到⽂件

2、把表导出到⽂件:;加上local为导出到虚拟机下的⽬录,去掉local为HDFS⾥;也可以

from 表名 insert overwrite [local] directory '...' select *

在路径和select之间添加row format delimited来指定分隔符。

3、把表导出到另⼀张表⾥:

from 表名 insert overwrite table 表名2 select *

4、导⼊导出:

把表导⼊到HDFS⽂件:

export table 表名 [partition(分区1,分区2)] to '...';

把⽂件导⼊到表⾥:

import table 表名 [partition(分区1,分区2)] from '...';

5、把⽂件直接加载到表⾥:

hdfs dfs -put '...file' '...file'

六、查询

1、order by:可以使⽤if和case when等系统函数,除聚合函数外,所选的其他列也必须包含在group by中,having是对group by聚合

的结果进⾏条件筛选

select if(salary>5000,'good','bad'),sum(salary)

from employee_contract

group by if(salary>5000,'good','bad')

结果:

±------±-------±-+

| _c0 | _c1 |

±------±-------±-+

| bad | 18000 |

| good | 44800 |

±------±-------±-+

2、distribute by+sort by = cluster by:分组排序,分组聚合,类似mysql⾥的group by。cluster by不⽀持desc|asc,⼀般为了充分

利⽤所有的reducer,先使⽤cluster by 再使⽤order by。但只能指定⼀个字段,即既按照该字段分区,⼜按照该字段排序,不常⽤。

七、部分错误解决⽅案:

orted SubQuery Expression ‘1’: SubQuery expression refers to Outer query expressions only.

⼦查询和外部查询具有相同的字段别名或者外部查询没有取别名,导致把内表的字段名识别为外部查询的别名(hql⾥对字段名的清晰度要

求⽐mysql更⾼)

icException [Error 10002]: Line 76:19 Invalid column reference ‘sid’

使⽤join表关联后,如果使⽤group by分组⼀个字段,则这个表的其他字段也需要聚合后才能使⽤,如果不聚合,则会报上⾯错误。这⼀点

和mysql不⼀样,hivesql更严格

。。。待更新

⼋、函数

点击:

九、项⽬实战流程总结

1、把数据上传到hdfs/也可以放在虚拟机本地

2、新建⼀个数据库/使⽤已有的数据库

3、根据数据⽂件⾥的每张表结构,创建对应的外部表。

4、csv⽂件默认是逗号分隔符,可能会与字段内容⾥的逗号冲突造成数据错乱,因此在创建表结构时读取⽂件的分隔符不能默认使⽤逗

号,需要把分隔符进⾏正则替换然后再处理。

5、很多表都是有表头的,建表时要设置tblproperties忽略第⼀⾏的字段。

6、导⼊数据。表⾥的数据有可能是未经过处理的,⽐如说要加密的字段,重复的id、等等,因此需要对有问题或者需要优化的地⽅进⾏数

据清洗,清洗完的数据放在⼀个新表⾥,然后根据新表进⾏查询操作。

7、⼀定要熟悉阅读表字段的内容,以及各张表之间的联系

8、LLAP:内存中读取缓存,辅助引擎提⾼性能,对串⾏化的升级,不代替引擎,⽬前只⽀持Tez

Hive常见set的配置设置

引⽤:

设置reduce数量(默认值-1)

set mapred.reduce.tasks=100;

set mapreduce.job.reduces=3;

修改表为内部表

set tblproperties('EXTERNAL'='FALSE');

开启分桶表(默认false)

set hive.enforce.bucketing=true;

开启Hive中间传输数据压缩功能

set hive.exec.cmpress.intermediate=true;

开启mapreduce 中map 输出压缩功能

set mapreduce.map.output.compress=true;

设置mapreduce 中map 输出数据的压缩⽅式

set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

开启hive 最终输出数据压缩功能

set hive.exec.compress.output=true;

开启mapreduce 最终输出数据压缩

set mapreduce.output.fileoutputformat.compress=true;

设置mapreduce 最终数据输出压缩⽅式

set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

设置mapreduce 最终数据输出压缩为块压缩

set mapreduce.output.fileoutputformat.compress.type=BLOCK;

设置Fetch抓取为more(默认为more)

set hive.fetch.task.conversion=more;

开启本地模式(默认关闭),在数据量⽐较⼩的时候,可以提⾼速度

set hive.exec.mode.local.auto=true;

设置local mr 的最⼤输⼊数据量,当输⼊数据量⼩于这个值时采⽤local mr 的

⽅式,默认为134217728,即128M

set hive.exec.mode.local.auto.inputbytes.max=50000000;

设置local mr 的最⼤输⼊⽂件个数,当输⼊⽂件个数⼩于这个值时采⽤local mr

的⽅式,默认为4

set hive.exec.mode.local.auto.input.files.max=10;

打开mapjoin 功能(默认是打开的)

set hive.auto.convert.join = true;

开启Map 端聚合参数设置

set hive.map.aggr = true;

在Map 端进⾏聚合操作的条⽬数⽬

set hive.groupby.mapaggr.checkinterval = 100000;

有数据倾斜的时候进⾏负载均衡(默认是false)

set hive.groupby.skewindata = true;

开启动态分区功能(默认开启)

set hive.exec.dynamic.partition=true;

设置为⾮严格模式(默认严格strict)

set hive.exec.dynamic.partition.mode=nonstrict;

在所有执⾏MR 的节点上,最⼤⼀共可以创建多少个动态分区。(1000)

set hive.exec.max.dynamic.partitions=1000;

在每个执⾏MR 的节点上,最⼤可以创建多少个动态分区(100)

set hive.exec.max.dynamic.partitions.pernode=100;

整个MR Job 中,最⼤可以创建多少个HDFS ⽂件。(100000)

set hive.exec.max.created.files=100000;

开启⼩⽂件合并(HiveInputFormat )——map端合并

set mapred.max.split.size=256*1024*1024;最⼤切⽚值

set mapred.min.split.size=128*1024*1024;最⼩切⽚值

set mapred.min.split.size.per.node=1;⼀个节点上split的最少值

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

开启⼩⽂件合并(HiveOutputFormat )——reduce端输出之前合并

set hive.merge.mapfiles=true;maponly的任务结束时合并⼩⽂件

set hive.merge.mapred.files=true;trueMR的任务结束时合并⼩⽂件

set hive.merge.size.per.task=250*1000*1000;合并⽂件的⼤⼩设置

set hive.merge.smallfiles.avgsize=16000000 #当输出⽂件的平均⼤⼩⼩于该值时,启动⼀个独⽴的map-reduce任务进⾏⽂件merge

每个Reduce 处理的数据量默认是256MB256000000)

set mapreduce.input.fileinputformat.split.maxsize=256000000;

每个任务最⼤的reduce 数,默认为1009

set hive.exec.reducers.max=1009;

开启并⾏执⾏(默认关闭)

set hive.exec.parallel=true;

同⼀个sql 允许最⼤并⾏度,默认为8。

set hive.exec.parallel.thread.number=16;

HiveServer2操作⽇志记录模式,忽略任何⽇志记录

set hive.server2.logging.operation.level=NONE;

设置后可以按照指定的列排序

set hive.groupby.orderby.position.alias=true

少量⼩⽂件:本地化

set hive.exec.mode.local.auto=true;

set hive.exec.mode.local.auto.inputbytes.max=500000;设计⽂件最⼤字节数

set hive.exec.mode.local.auto.input.files.max=5;最⼤⽂件数:default 4

set mapred.reduce.tasks=1

JVM重⽤:串⾏化(Map或Reduce)

set mapred.jb.reuse.jvm.num.tasks=5;默认为1

并⾏执⾏:⾮依赖关系的⼦查询可以并发执⾏:不需要并发时关闭

set hive.exec.parallel=true;默认false

set hive.exec.parallel.thread.number=16;默认为8

reducetask的数量

ReduceTasks(int N);

set =15;

默认

set r=1G;默认

set =999;默认999

reducetaskCount=(maxReduceCount,fileSize/bytePerReduce);

单节点开启动态分区时,可能会容量不够⽆法创建,需要以下设置

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

set hive.exec.max.dynamic.partitions.pernode=1000;

set hive.optimize.sort.dynamic.partition=true;

其他参数调优,来源⽹络:

Hive参数配置调优

hive通过将查询划分成⼀个或多个MapReduce任务达到并⾏处理的⽬的。每个任务都可能具有多个mapperreducer任务,其中⾄少有⼀些是可以并⾏执

⾏的。

确定最佳的mapper个数和reducer个数取决于多个变量,例如输⼊的数据量⼤⼩以及对这些数据执⾏的操作类型等。

保持平衡性是很有必要的,对于Spark/Hadoop这样的⼤数据系统来讲,数据量⼤并不可怕,可怕的是数据倾斜,每个节点处理的运算不均衡。

如果有太多的mapperreducer任务,就会导致启动阶段、调度和运⾏job过程中产⽣过多的开销;⽽如果设置的数量太少,那就有可能没充分利⽤好集群内在

并⾏性。

mapred.reduce.tasks

所提交 Job reduer 的个数,使⽤ Hadoop Client 的配置。

1

hive.mapred.mode

Map/Redure 模式,如果设置为 strict,将禁⽌3中类型的查询:

1.分区表的where筛选条件必须含有分区字段;

2.对使⽤了order by语句的查询,必须使⽤limit语句(order by语句为执⾏排序会将所有的结果集数据分发到同⼀个reducer中进⾏处理,增加limit语句可以防⽌re

ducer额外执⾏很长时间)

3.限制笛卡⼉积的查询,就是有where语句,⽽没有on语句。

'nonstrict'

'nonstrict'

hive.merge.mapfiles

Map-only的任务结束时合并⼩⽂件

是否开启合并 Map 端⼩⽂件,当Hive输⼊由很多个⼩⽂件组成,由于每个⼩⽂件都会启动⼀个map任务,如果⽂件过⼩,会使得map任务启动和初始化的时间

⼤于逻辑处理的时间,造成资源浪费,甚⾄OOM。为此,当我们启动⼀个任务,发现输⼊数据量⼩但任务数量多时,需要注意在Map前端进⾏输⼊合并。当然

,在我们向⼀个表写数据时,也需要注意输出⽂件⼤⼩

true

hive.merge.mapredfiles

是否开启合并 Map/Reduce ⼩⽂件,即是否在Map-Reduce的任务结束时合并⼩⽂件

false

hive.exec.parallel

是否开启 map/reduce job的并发提交。

false

hive.limit.optimize.enable

当使⽤LIMIT语句时,其可以对数据源进⾏抽样,避免执⾏整个查询语句,然后再返回部分结果

但这个功能有个缺点,有可能输⼊中有⽤的数据永远不会被处理到。

hive.exec.reducers.bytes.per.reducer

每⼀个 reducer 的平均负载字节数。

1000000000

hive.exec.reducers.max

设置reducer个数的上限,可以阻⽌某个查询消耗过多的reducer资源,对这个属性值⼤⼩的设定,⼀个建议的计算公式如下:

(集群总Reduce槽位个数*1.5) / (执⾏中查询的平均个数)

1.5倍数是⼀个经验系数,⽤于防⽌未充分利⽤集群的情况。

999

hive.exec.rowoffset

hive提供了2种虚拟列:⼀种⽤于将要进⾏划分的输⼊⽂件名,另⼀种⽤于⽂件中的块内偏移量。当hive产⽣了⾮预期的或null的返回结果时,可以通过这些虚拟

列诊断查询。通过这些字段,⽤户可以查看到哪个⽂件甚⾄哪些数据导致出现问题:

SELECT

INPUT_FILE_NAME,

BLOCK_OFFSET_INSIDE_FILE,

ROW_OFFSET_INSIDE_BLOCK,

line

FROM hive_text

WHERE line LIKE '%hive%' LIMIT 2;

true

hive.multigroupby.singlemr

⼀个特别的优化,是否将查询中的多个group by操作组装到单个MapReduce任务中。

false

hive.exec.dynamic.partition

是否打开动态分区。

false

hive.exec.dynamic.partition.mode

打开动态分区后,动态分区的模式,有 strict nonstrict 两个值可选,strict 要求⾄少包含⼀个静态分区列,nonstrict 则⽆此要求。

strict

hive.exec.max.dynamic.partitions

所允许的最⼤的动态分区的个数。

1000

hive.exec.max.dynamic.partitions.pernode

单个 reduce 结点所允许的最⼤的动态分区的个数。

100

hive.exec.default.partition.name

默认的动态分区的名称,当动态分区列为''或者null时,使⽤此名称。''

'__HIVE_DEFAULT_PARTITION__'

'__HIVE_DEFAULT_PARTITION__'

hive.exec.mode.local.auto

决定 Hive 是否应该⾃动地根据输⼊⽂件⼤⼩,在本地运⾏(在GateWay运⾏)

true

hive.exec.mode.local.auto.inputbytes.max

如果 hive.exec.mode.local.auto true,当输⼊⽂件⼤⼩⼩于此阈值时可以⾃动在本地模式运⾏,默认是 128兆。

134217728L

hive.exec.mode.local.auto.tasks.max

如果 hive.exec.mode.local.auto true,当 Hive TasksHadoop Jobs)⼩于此阈值时,可以⾃动在本地模式运⾏。

4

hive.auto.convert.join

是否根据输⼊⼩表的⼤⼩,⾃动将 Reduce 端的 Common Join 转化为 Map Join,从⽽加快⼤表关联⼩表的 Join 速度。

false

hive.mapred.local.mem

Mapper/Reducer 在本地模式的最⼤内存量,以字节为单位,0为不限制。

0

hive.exec.scratchdir

HDFS路径,⽤于存储不同 map/reduce 阶段的执⾏计划和这些阶段的中间输出结果。

/tmp/<user.name>/hive

hive.metastore.warehouse.dir

Hive 默认的数据⽂件存储路径,通常为 HDFS 可写的路径。

"

data

决定 group by 操作是否⽀持倾斜的数据。

false

rmat

Hive 默认的输出⽂件格式,与创建表时所指定的相同,可选项为 'TextFile' 'SequenceFile' 或者 'RCFile'

'TextFile'

d

Hive 是否开启权限认证。

false

Hive 执⾏计划的路径,会在程序中⾃动进⾏设置

null

viachild

决定 map/reduce Job 是否应该使⽤各⾃独⽴的 JVM 进⾏提交(Child进程),默认情况下,使⽤与 HQL compiler 相同的 JVM 进⾏提交。

false

size

通过 TRANSFROM/MAP/REDUCE 所执⾏的⽤户脚本所允许的最⼤的序列化错误数。

100000

ption

是否允许脚本只处理部分数据,如果设置为 true ,因 broken pipe 等造成的数据未处理完成将视为正常。

false

决定查询中最后⼀个 map/reduce job 的输出是否为压缩格式。

false

ediate

决定查询的中间 map/reduce job (中间 stage)的输出是否为压缩格式。

false

中间 map/reduce job 的压缩编解码器的类名(⼀个压缩编解码器可能包含多种压缩类型),该值可能在程序中被⾃动设置。

中间 map/reduce job 的压缩类型,如 "BLOCK" "RECORD"

语句层⾯,整条 HQL 语句在执⾏前的 hook 类名。

"

hive.exec.post.hooks

语句层⾯,整条 HQL 语句在执⾏完成后的 hook 类名。

hive.exec.parallel.thread.number

并发提交时的并发线程的个数。

8

hive.mapred.reduce.tasks.speculative.execution

是否开启 reducer 的推测执⾏,与 mapred.reduce.tasks.speculative.execution 作⽤相同。

false

hive.exec.counters.pull.interval

客户端拉取 progress counters 的时间,以毫秒为单位。

1000L

hadoop.bin.path

Hadoop Client 可执⾏脚本的路径,该路径⽤于通过单独的 JVM 提交 job,使⽤ Hadoop Client 的配置。

$HADOOP_HOME/bin/hadoop

hadoop.config.dir

Hadoop Client 配置⽂件的路径,使⽤ Hadoop Client 的配置。

$HADOOP_HOME/conf

fs.default.name

Namenode URL,使⽤ Hadoop Client 的配置。

file:///

map.input.file

Map 的输⼊⽂件,使⽤ Hadoop Client 的配置。

null

mapred.input.dir

Map 的输⼊⽬录,使⽤ Hadoop Client 的配置。

null

mapred.input.dir.recursive

输⼊⽬录是否可递归嵌套,使⽤ Hadoop Client 的配置。

false

mapred.job.tracker

Job Tracker URL,使⽤ Hadoop Client 的配置,如果这个配置设置为 'local',将使⽤本地模式。

local

mapred.job.name

Map/Reduce job 名称,如果没有设置,则使⽤⽣成的 job name,使⽤ Hadoop Client 的配置。

null

mapred.reduce.tasks.speculative.execution

Map/Reduce 推测执⾏,使⽤ Hadoop Client 的配置。

null

hive.metastore.metadb.dir

Hive 元数据库所在路径。

"

Hive 元数据的 URI,多个 thrift://地址,以英⽂逗号分隔。

"

hive.metastore.connect.retries

连接到 Thrift 元数据服务的最⼤重试次数。

3

javax.jdo.option.ConnectionPassword

JDO 的连接密码。

"

JDO 连接 URL Hook 的类名,该 Hook ⽤于获得 JDO 元数据库的连接字符串,为实现了 JDOConnectionURLHook 接⼝的类。

"

javax.jdo.option.ConnectionURL

元数据库的连接 URL

"

ts

当没有 JDO 数据连接错误后,尝试连接后台数据存储的最⼤次数。

1

al

每次尝试连接后台数据存储的时间间隔,以毫秒为单位。

1000

是否强制重新加载元数据配置,⼀但重新加载,该值就会被重置为 false

false

s

Thrift 服务线程池的最⼩线程数。

8

s

Thrift 服务线程池的最⼤线程数。

0x7fffffff

ive

Thrift 服务是否保持 TCP 连接。

true

al

⽤于归档压缩的原始中间⽬录的后缀,这些⽬录是什么并不重要,只要能够避免冲突即可。

'_INTERMEDIATE_ORIGINAL'

ed

⽤于归档压缩的压缩后的中间⽬录的后缀,这些⽬录是什么并不重要,只要能够避免冲突即可。

'_INTERMEDIATE_ARCHIVED'

ted

⽤于归档压缩的解压后的中间⽬录的后缀,这些⽬录是什么并不重要,只要能够避免冲突即可。

'_INTERMEDIATE_EXTRACTED'

是否忽略错误,对于包含多的 SQL ⽂件,可以忽略错误的⾏,继续执⾏下⼀⾏。

false

当前会话的标识符,格式为⽤户名_时间⽤于记录在 job conf 中,⼀般不予以⼿动设置。

"

hive.session.silent

当前会话是否在 silent 模式运⾏。 如果不是 silent 模式,所以 info 级打在⽇志中的消息,都将以标准错误流的形式输出到控制台。

false

hive.query.string

当前正在被执⾏的查询字符串。

"

当前正在被执⾏的查询的ID

"

hive.query.planid

当前正在被执⾏的 map/reduce plan ID

"

当前 job name 的最⼤长度,hive 会根据此长度省略 job name 的中间部分。

50

50

通过单独的 JVM 提交 job 时,hive_ 所在的路径

"

hive.aux.jars.path

各种由⽤户⾃定义 UDF SerDe 构成的插件 jar 包所在的路径。

"

ADD FILE 所增加的⽂件的路径。

"

hive.added.jars.path

ADD JAR 所增加的⽂件的路径。

"

ADD ARCHIEVE 所增加的⽂件的路径。

"

hive.table.name

当前的 Hive 表的名称,该配置将通过 ScirptOperator 传⼊到⽤户脚本中。

"

当前的 Hive 分区的名称,该配置将通过 ScriptOperator 传⼊到⽤户脚本中。

"

hive.script.auto.progress

脚本是否周期性地向 Job Tracker 发送⼼跳,以避免脚本执⾏的时间过长,使 Job Tracker 认为脚本已经挂掉了。

false

hive.script.operator.id.env.var

⽤于识别 ScriptOperator ID 的环境变量的名称。

'HIVE_SCRIPT_OPERATOR_ID'

hive.alias

当前的 Hive 别名,该配置将通过 ScriptOpertaor 传⼊到⽤户脚本中。

"

决定是否可以在 Map 端进⾏聚合操作

true

al

Hive Join 操作的发射时间间隔,以毫秒为单位。

1000

Hive Join 操作的缓存⼤⼩,以字节为单位。

25000

Hive Map Join 桶的缓存⼤⼩,以字节为单位。

100

Hive Map Join 每⼀⾏键的⼤⼩,以字节为单位。

10000

s

Hive Map Join 所缓存的⾏数。

25000

nterval

对于 Group By 操作的 Map 聚合的检测时间,以毫秒为单位。

100000

tmemory

Hive Map 端聚合的哈稀存储所占⽤虚拟机的内存⽐例。

0.5

ion

ion

Hive Map 端聚合的哈稀存储的最⼩ reduce ⽐例。

0.5

ss

Hive UDTF 是否周期性地报告⼼跳,当 UDTF 执⾏时间较长且不输出⾏时有⽤。

false

Hive 是否检查输出的⽂件格式。

true

on

Hive 实时查询⽇志所在的⽬录,如果该值为空,将不创建实时的查询⽇志。

'/tmp/$USER'

Hive ⽤户脚本的 SerDe

'mpleSerDe'

reader

Hive ⽤户脚本的 RecordRedaer

'cordReader'

writer

Hive ⽤户脚本的 RecordWriter

'cordWriter'

HWI 所绑定的 HOST 或者 IP

'0.0.0.0'

HWI 所监听的 HTTP 端⼝。

9999

HWI war ⽂件所在的路径。

$HWI_WAR_FILE

是否以测试模式运⾏ Hive

false

Hive 测试模式的前缀。

'test_'

freq

Hive 测试模式取样的频率,即每秒钟取样的次数。

32

lelist

Hive 测试模式取样的排除列表,以逗号分隔。

"

hive.merge.size.per.task

每个任务合并后⽂件的⼤⼩,根据此⼤⼩确定 reducer 的个数,默认 256 M

256000000

hive.merge.smallfiles.avgsize

需要合并的⼩⽂件群的平均⼤⼩,默认 16 M

16000000

hive.optimize.skewjoin

是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理。

false

hive.skewjoin.key

倾斜键数⽬阈值,超过此值则判定为⼀个倾斜的 Join 查询。

1000000

hive.skewjoin.mapjoin.map.tasks

处理数据倾斜的 Map Join Map 数上限。

10000

hive.skewjoin.mapjoin.min.split

处理数据倾斜的 Map Join 的最⼩数据切分⼤⼩,以字节为单位,默认为32M

33554432

mapred.min.split.size

Map Reduce Job 的最⼩输⼊切分⼤⼩,与 Hadoop Client 使⽤相同的配置。

1

hive.mergejob.maponly

是否启⽤ Map Only 的合并 Job

true

hive.heartbeat.interval

Hive Job 的⼼跳间隔,以毫秒为单位。

1000

hive.mapjoin.maxsize

Map Join 所处理的最⼤的⾏数。超过此⾏数,Map Join进程会异常退出。

1000000

hive.hashtable.initialCapacity

Hive Map Join 会将⼩表 dump 到⼀个内存的 HashTable 中,该 HashTable 的初始⼤⼩由此参数指定。

100000

hive.hashtable.loadfactor

Hive Map Join 会将⼩表 dump 到⼀个内存的 HashTable 中,该 HashTable 的负载因⼦由此参数指定。

0.75

hive.mapjoin.followby.gby.localtask.max.memory.usage

MapJoinOperator后⾯跟随GroupByOperator时,内存的最⼤使⽤⽐例

0.55

hive.mapjoin.localtask.max.memory.usage

Map Join 的本地任务使⽤堆内存的最⼤⽐例

0.9

hive.mapjoin.localtask.timeout

Map Join 本地任务超时,淘宝版特有特性

600000

hive.mapjoin.check.memory.rows

设置每多少⾏检测⼀次内存的⼤⼩,如果超过 hive.mapjoin.localtask.max.memory.usage 则会异常退出,Map Join 失败。

100000

hive.debug.localtask

是否调试本地任务,⽬前该参数没有⽣效

false

hive.task.progress

是否开启 counters ,以记录 Job 执⾏的进度,同时客户端也会拉取进度 counters

false

hive.input.format

Hive 的输⼊ InputFormat

默认是org.apache.hadoop.hive.ql.io.HiveInputFormat,其他还有org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

hive.enforce.bucketing

是否启⽤强制 bucketing

false

hive.enforce.sorting

是否启⽤强制排序。

false

hive.mapred.partitioner

hive.mapred.partitioner

Hive Partitioner 类。

'tHivePartitioner'

hive.exec.script.trust

Hive Script Operator For trust

false

hive.hadoop.supports.splittable.combineinputformat

是否⽀持可切分的 CombieInputFormat

false

hive.optimize.cp

是否优化列剪枝。

true

hive.optimize.ppd

是否优化谓词下推。

true

hive.optimize.groupby

是否优化 group by

true

hive.optimize.bucketmapjoin

是否优化 bucket map join

false

hive.optimize.bucketmapjoin.sortedmerge

是否在优化 bucket map join 时尝试使⽤强制 sorted merge bucket map join

false

hive.optimize.reducededuplication

是否优化 reduce 冗余。

true

hive.hbase.wal.enabled

是否开启 HBase Storage Handler

true

hive.archive.enabled

是否启⽤ har ⽂件。

false

hive.archive.har.parentdir.settable

是否启⽤ har ⽂件的⽗⽬录可设置。

false

hive.outerjoin.supports.filters

是否启动外联接⽀持过滤条件。

true

hive.fetch.output.serde

对于 Fetch Task SerDe

'tedJSONSerDe'

hive.semantic.analyzer.hook

Hive 语义分析的 Hook,在语义分析阶段的前后被调⽤,⽤于分析和修改AST及⽣成的执⾏计划,以逗号分隔。

null

hive.cli.print.header

是否显⽰查询结果的列名,默认为不显⽰。

false

hive.cli.encoding

Hive 默认的命令⾏字符编码。

Hive 默认的命令⾏字符编码。

'UTF8'

hive.log.plan.progress

是否记录执⾏计划的进度。

true

hive.exec.script.wrapper

Script Operator 脚本调⽤的封装,通常为脚本解释程序。例如,可以把该变量值的名称设置为"python",那么传递到 Script Operator 的脚本将会以"python <

script command>"的命令形式进⾏调⽤,如果这个值为null或者没有设置,那么该脚本将会直接以"<script command>"的命令形式调⽤。

null

hive.check.fatal.errors.interval

客户端通过拉取 counters 检查严重错误的周期,以毫秒为单位,淘宝特有配置项。

5000L