Hive学习之Hive配置管理

Hive是基于Hadoop的一种数据仓库,对查询和管理分布式存储中的超大数据集提供了很大帮助。正如绝大部分开源软件一样,Hive允许用户调整参数改变Hive的默认行为。用户可以使用下面三种方法中的任意一种对Hive进行配置管理:

  1. 在Hive的CLI(命令行接口)使用set命令在会话层级为后续语句设置参数值,比如:set hive.exec.scratchdir=/tmp/mydir,将后续语句的临时目录(该目录用于存储Hive的临时输出和计划)设置为/tmp/mydir。
  2. 使用--hiveconf选项为整个会话设置参数,比如:bin/hive --hiveconfhive.exec.scratchdir=/tmp/mydir,这样在启动hive后,在CLI中执行的所有语句的临时目录都为=/tmp/mydir。
  3. 最后一种(也是本人最喜欢的一种,一劳永逸)是修改hive-site.xml文件,该方式的作用范围较上述两种方式都要大,用于为整个Hive的配置管理设置参数值,意思是每次启动hive时其参数值都是不变的。比如:

        <property>

        <name>hive.exec.scratchdir</name>

        <value>/tmp/mydir</value>

        <description>Scratchspace for Hive jobs</description>

        </property>

        Hive提供了hive-default.xml.template,该文件位于HIVE_HOME/conf目录中,包含了各个配置参数的默认值,用户可以通过在conf目录中创建hive-site.xml并新增特定参数的值来覆盖默认值。

        概括起来,Hive的配置参数可以分为以下四类:

  1.  Hive管理参数
  2.  Hive元存储(Metastore)管理参数
  3. 与Hadoop交互的管理参数
  4. 用于传递运行时信息的参数

        下面根据上面的分类分别学习配置参数的含义及默认值,首先是Hive管理参数,如下面的表格所示:

参数名

描述

默认值

hive.ddl.output.format

用于DDL输出的数据格式,其值可以为text或者json

null

hive.exec.script.wrapper

hive调用的封装器,比如若该值设置为python,脚本将会按照python <脚本命令>的格式调用,若该值为null或者未设置,脚本将会按照<脚本命令>的格式调用。

null

hive.exec.plan

 Hive执行计划的文件路径

null

hive.exec.scratchdir

存储hive查询时不同map/reduce阶段的计划和这些阶段的中间输出结果的目录。

/tmp/hive-<user.name>

(Hive-0.8.1版本开始)

hive.exec.local.scratchdir

Hive以本地模式运行时存储临时文件的目录(Hive-0.10.0版本开始)。

/tmp/<user.name>

hive.exec.submitviachild

以非本地模式运行时map/reduce作业是否提交给独立的JVM

false – 默认情况下作业被提交给与编译器相同的JVM

hive.exec.script.maxerrsize

通过TRANSFORMMap或者Reduce调用用户脚本时允许的最大序列化错误数。

100000

hive.exec.compress.output

查询中最终Map/Reduce作业的输出是否进行压缩。

false

hive.exec.compress.intermediate

在某次查询中,中间Map/Reduce作业的输出是否被压缩。

false

hive.jar.path

hive-cli-<version>.jar的路径,该jar文件当在独立的JVM提交作业到时被使用。

 

hive.aux.jars.path

包含用户自定义函数和serdes 实现的jar文件的路径。

 

hive.map.aggr

Map是否进行聚集。

true

hive.join.emit.interval

在执行联接之前Hive可以在最右边的联接操作符中缓存多少行。

1000

hive.map.aggr.hash.percentmemory

 Map端聚集哈希表时所占用的内存比例。

(float)0.5

hive.default.fileformat

CREATE TABLE语句的默认文件格式,可选值为TextFile, SequenceFile, RCFile, and Orc

TextFile

hive.merge.mapfiles

在只有map的作业执行完毕时是否合并小的文件。

true

hive.merge.mapredfiles

Map-reduce作业执行完毕时是否合并小的文件。

false

hive.merge.size.per.task

作业结束时合并文件的大小。

256000000

hive.merge.smallfiles.avgsize

当作业输出文件的平均大小小于该值时,Hive将会启动额外的map-reduce作业合并输出文件为较大的文件。对于只执行map的作业仅当hive.merge.mapfilestrue时该值有效,对于map-reduce作业仅当hive.merge.mapredfiles true时有效。

16000000

hive.querylog.enable.plan.progress

每次检查作业的进度时是否记录计划的进度到日志中。这些日志保存在hive.querylog.location指定的位置Hive-0.10版本开始)。

true

hive.querylog.location

结构化的Hive查询日志被创建的目录。在该目录中,每个会话有相应的文件。如果该参数被设置为空字符串,结构化日志将不会被创建。

/tmp/<user.name>

hive.querylog.plan.progress.interval

记录计划执行进度的时间间隔,单位是毫秒。如果map或者reduce的进度有整数百分比的变化,则不考虑该值而该进度被记入日志。

60000

hive.stats.autogather

INSERT OVERWRITE命令执行时是否自动收集统计信息的标记。

true

hive.stats.dbclass

存储临时Hive统计信息的方式。可选的值有fshbasecountercustomjdbc:.*

fs

hive.stats.dbconnectionstring

存储临时Hive统计信息的数据库的默认连接字符串。

jdbc:derby:;databaseName=TempStatsStore;create=true

hive.stats.jdbcdriver

存储临时Hive统计信息的数据库JDBC驱动程序。

org.apache.derby.jdbc.EmbeddedDriver

hive.stats.reliable

由于统计信息不能完整准确地收集完成查询是否失败。如果该值为true,在统计信息不能完整准确地收集完的情况下,从分区读写可能失败。

false

hive.enforce.bucketing

如果为true,插入数据到表中时,执行分组。

false

hive.variable.substitute

Hive语句中的置换参数,此前使用set命令,系统变量或者环境变量设置(Hive-0.7.0开始)。

true

hive.variable.substitute.depth

置换引擎将要替换的最大数量。

40

hive.vectorized.execution.enabled

控制是否启用查询执行的向量模式。(Hive-0.13.0版本开始)

false

        Hive元存储(Metastore)管理参数将会在后面学习,下面是与Hadoop交互的管理参数。

参数名

描述

默认值

hadoop.bin.path

Hadoop脚本的位置,该脚本在使用独立的JVM提交查询时被用来提交作业到hadoop

$HADOOP_HOME/bin/hadoop

hadoop.config.dir

Hadoop配置管理目录的位置。

$HADOOP_HOME/conf

fs.default.name

 

file:///

map.input.file

 

null

mapred.job.tracker

JobTrackerurl路径。如果该值为localmap/reduce以本地模式运行。

local

mapred.reduce.tasks

查询计划中每个map/reduce阶段reducer的数量。

1

mapred.job.name

map/reduce作业的名称。

null

        最后是用于传递运行时信息的参数,如下面的表格所示:

参数名

描述

默认值

hive.session.id

Hive会话ID

 

hive.query.string

传递给map/reduce作业的查询字符串。

 

hive.query.planid

map/reduce阶段的计划ID

 

hive.jobname.length

作业名称的最大长度。

50

hive.table.name

Hive表名称。该值通过脚本操作符传递给用户脚本。

 

hive.partition.name

Hive分区名称。该值通过脚本操作符传递给用户脚本。

hive.alias

正在处理的别名。该值通过脚本操作符传递给用户脚本。

        Hive还有大量的参数用于各种用途,可以参考HiveConf.java和hive-default.xml.template,而要想正确理解其含义就需要动手实践,并在必要时阅读源代码。

你可能感兴趣的:(hive,配置管理,大数据,数据仓库)