11.2.3 配置Hive
安装好Hive后,就可以进行简单的数据操作了。在实际应用中,不可避免地要进行参数的配置和调优,本节我们将对Hive参数的设置进行介绍。
首先,在进行操作前要确保目录权限配置正确:将/tmp目录配置成所有用户都有write权限,表所对应目录的owner必须是Hive启动用户。
其次,可以通过调整Hive的参数来调优HQL代码的执行效率或帮助管理员进行定位。参数设置可以通过配置文件、命令行参数或参数声明的方式进行。下面具体进行介绍。
1.配置文件
Hive的配置文件包括:
用户自定义配置文件,即$HIVE_CONF_DIR/hive-site.xml;
默认配置文件,即$HIVE_CONF_DIR/hive-default.xml。
要注意的是,用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的。
2.运行时配置
当运行Hive QL时可以进行参数声明。Hive的查询可通过执行MapReduce任务来实现,而有些查询可以通过控制Hadoop的配置参数来实现。在命令行接口(CLI)中可以通过SET命令来设置参数,例如:
hive>SET mapred.job.tracker=myhost.mycompany.com:50030
hive>set mapred.reduce.tasks=100;
hive>SET-v
通过SET-v命令可以查看当前设定的所有信息。需要指出的是,通过CLI的SET命令设定的作用域是Session级的,只对本次操作有作用。此外,SerDe参数必须写在建表语句中。例如:
create table if not exists t_Student(
name string
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES(
'field.delim'='\t',
'escape.delim'='\',
'serialization.null.format'=''
)STORED AS TEXTFILE;
类似serialization.null.format这样的参数,必须和某个表或分区关联。在DDL外部声明不起作用。
3.设置本地模式
对于大多数查询Query, Hive编译器会产生MapReduce任务,这些任务会被提交到MapReduce集群,这些集群可以用参数mapred.job.tracker指明。
需要说明的是,Hadoop支持在本地或集群中运行Hive提交的查询,这对小数据集查询的运行是非常有用的,可以避免将任务分布到大型集群中而降低效率。在将MapReduce任务提交给Hadoop之后,HDFS中的文件访问对用户来说是透明的。相反,如果是大数据集的查询,那么需要设定将Hive的查询交给集群运行,这样就可以利用集群的并行性来提高效率。我们可以通过以下参数设定Hive查询在本地运行:
hive>SET mapred.job.tracker=local;
最新的Hive版本都支持在本地自动运行MapReduce任务:
hive>SET hive.exec.mode.local.auto=false;
可以看到该属性默认是关闭的。如果设定为开启(enable),Hive就会先分析查询中的每个MapReduce任务,当任务的输入数据规模低于Hive.exec.mode.local.auto.inputb-ytes.max属性值(默认为128MB),并且全部的Map数少于hive.exec.mode.local.auto.tasks.max的属性值(默认为4),全部的Reduce任务数为1或0时,任务会自动选择在本地模式下运行。
4.Error Logs错误日志
Hive使用log4j记录日志。在默认情况下,日志文件的记录等级是WARN(即存储紧急程度为WARN及以上的错误信息),存储在/tmp/{user.n-ame}/hive.log文件夹下。如果用户想要在终端看到日志内容,则可以通过设置以下参数达到目的:
bin/hive-hiveconf hive.root.logger=INFO, console
同样,用户也可以改变日志记录等级:
bin/hive-hiveconf hive.root.logger=INFO, DRFA
Hive在Hadoop执行阶段的日志由Hadoop配置文件配置。通常来说,Hadoop会对每个Map和Reduce任务对应的执行节点生成一个日志文件。这个日志文件可以通过JobTracker的Web UI获得。错误日志对调试错误非常有用,当运行过程中遇到Bug时可以向hive-d-ev@hadoop.apache.org提交。