Hive基本运行配置
- Hive安装解压安装即可
说明:Hive实际上可理解为一个MapReduce的客户端,只需在一个节点上安装即可 - Hive运行环境配置
只需配置hive-env.sh(初始文件为hive-env.sh.template)
在文件中指定HADOOP_HOME以及HIVE_CONF_DIR(Hadoop的安装路径以及Hive配置文件夹)
3)Hive中元数据存储数据库配置
说明:Hive默认自带的元数据存储数据库为derby,不支持并发进行操作,将元数据存储数据库修改为MySQL。
- 安装MySQL
- 配置hive-site.xml(注该文件默认不存在,存在hive-default.xml)
在hive-site.xml中写入相关配置信息(实际上采用JDBC将hive与MySQL数据库进行连接)
4)查询信息显示配置(操作时显示当前所使用的数据库名以及查询的表头名)
<!—显示当前表头 —>
hive.cli.print.header
true
说明:建议使用第三种,其次第二种,其次第一种,但是对于某些系统级别的配置(和系统启动相关,如log4j的配置),必须在启动前进行配置,则必须采用第一种或第二种。
3) hive常用运行参数配置
-
设置reduceTask进程开启数
默认值为-1,此时hive会自动计算所需的reduceTask进程数
Set mapreduce.job.reduces=-1 -
设置mapTask进程开启数量
注:mapTask进程数量不可直接设置,由Mapreduce中InputFormat环节的切片机制依据hdfs块大小和相关参数共同决定。
说明:设置如下参数可达到控制切片大小的目的,从而决定mapTask开启数量
Set mapreduce.input.fileinputformat.split.maxsize=256000000
Set mapreduce.input.fileinputformat.split.minsize=1
Math.max(minSize,Math.min(maxSize,blockSize));//此公式决定切片大小,注意还有当文件大小小于1.1默认切片大小时,任然视为一个切片
切片大小默认为块大小,若想调小切片大小,只需调小maxSize,使之小于块大小,若想调大切片大小,只需调大minSize,使之大于块大小。以此达到控制mapTask进程数。 -
压缩优化配置
1> map输出阶段启动压缩
① 开启hive中间传输数据压缩
set hive.exec.compress.intermediate=true;
② 开启map输出压缩
set mapreduce.map.output.compress=true;
③ 设置map输出数据的压缩方式
Set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;//Snappy压缩方式需配置
2> Reduce输出阶段启动压缩
① 开启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; -
fetch抓取设置
Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELECT * FROM employees;在这种情况下,Hive 可以简单地读取 employee 对应的存储目录下的文 件,然后输出查询结果到控制台。
在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive 默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走 mapreduce。
set hive.fetch.task.conversion=none; -
本地模式设置(local mr)
set hive.exec.mode.local.auto=true;//此次设置只在当此hive启动有效
可以在hive-site.xml中添加属性配置使hive根据处理的文件大小决定是否启动本地模式
hive.exec.mode.local.auto=true; //开启本地 mr
hive.exec.mode.local.auto.inputbytes.max= 134217728;//当输入数据量小于该值(128MB,默认值)时启动local mr
hive.exec.mode.local.auto.input.files.max=4;//当输入文件数量小于该值时启动local mr -
动态分区优化设置
(1)开启动态分区功能(默认 true,开启)
hive.exec.dynamic.partition=true
(2) 设置为非严格模式(动态分区的模式,默认 strict,表示必须指定至少一个分区为静态分区,nonstrict 模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict
(3)在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。
hive.exec.max.dynamic.partitions=1000
(4)在每个执行 MR 的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即 day 字段有 365 个值,那么该参数就需要设置成大于 365,如果使用默认值 100,则会报错。
hive.exec.max.dynamic.partitions.pernode=100
(5)整个 MR Job 中,最大可以创建多少个 HDFS 文件。
hive.exec.max.created.files=100000
(6)当有空分区生成时,是否抛出异常。一般不需要设置。
hive.error.on.empty.partition=false -
严格模式设置
Hive 提供了一个严格模式,可以防止用户执行那些可能意向不到的不好的影响的查询。
set hive.mapred.mode=strict;(默认为nostrict)
说明:
1) 对于分区表,除非 where 语句中含有分区字段过滤条件来限制范围,否则不允许执行。
2)对于使用了 order by 语句的查询,要求必须使用 limit 语句。(注意hive中limit的用法和MySQL有区别)
3)限制笛卡尔积的查询。 -
设置JVM重用
说明:JVM 重用可以使得 JVM 实例在同一个 job 中重新使用 N 次。(设置合理的JVM重用次数可以避免JVM启动带来的开销,从而达到优化的目的)
Set mapreduce.job.jvm.numtasks=1; -
推测执行机制
方式一:
Set mapreduce.map.speculative=true;
Set mapreduce.reduce.speculative=true;
方式二:对hive配置
Set hive.mapred.reduce.tasks.speculative.execution=true;