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 '分隔符' [map、struct等其他限制条
件,如果有]
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;在true时MR的任务结束时合并⼩⽂件
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任务达到并⾏处理的⽬的。每个任务都可能具有多个mapper和reducer任务,其中⾄少有⼀些是可以并⾏执
⾏的。
确定最佳的mapper个数和reducer个数取决于多个变量,例如输⼊的数据量⼤⼩以及对这些数据执⾏的操作类型等。
保持平衡性是很有必要的,对于Spark/Hadoop这样的⼤数据系统来讲,数据量⼤并不可怕,可怕的是数据倾斜,每个节点处理的运算不均衡。
如果有太多的mapper或reducer任务,就会导致启动阶段、调度和运⾏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 Tasks(Hadoop 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


发布评论