(1)开启本地mr set hive.exec.mode.local.auto=true; (2)设置local mr的最大输入数据量,当输入数据量小于这个值的时候会采用local mr的方式 set =false; 九、Hive调优配置项合集 参数 作用 hive.ddl.output.format hive的ddl语句的输出格式,默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置 用户脚本转换输入到输出时的SerDe约束,默认是org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; hive.script.recordreader 序列化fetch输出时需要的SerDe,默认是org.apache.hadoop.hive.serde2.DelimitedJSONSerDe; hive.exec.mode.local.auto:是否由 host1@example.com:cdrwa,sasl:hive/host2@example.com:cdrwa; hive.use.input.primary.region:从一张input表创建表时
hive参数配置详情可查官方文档:Hive Configuration+Properties 本文针对 reducer 调优,主要涉及一下三个参数: hive.exec.reducers.bytes.per.reducer In: Hive 0.2.0; default changed in 0.14.0 with HIVE-7158 (and HIVE-7917) Size per reducer. 官方默认值:1G 查看配置的默认值: hive> set hive.exec.reducers.bytes.per.reducer; hive.exec.reducers.bytes.per.reducer =1024000000 临时调参: hive> set hive.exec.reducers.bytes.per.reducer=15364000000; hive> set hive.exec.reducers.bytes.per.reducer 查看配置的默认值: hive> set hive.exec.reducers.max; hive.exec.reducers.max=1099 临时调参: hive> set hive.exec.reducers.max
往期回顾之Hive性能调优系列: Hive性能调优 | Fetch抓取 Map数 通常情况下,作业会通过input的目录产生一个或者多个map任务。 主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M,可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 举例: map数量需要遵循两个原则:使大数据量利用合适的map数;使单个map任务处理合适的数据量; 调整reduce数 调整reduce个数方法一 a) 每个Reduce 处理的数据量默认是256MB hive.exec.reducers.bytes.per.reducer =256123456 b) 每个任务最大的reduce数,默认为1009 hive.exec.reducers.max=1009 c)计算reducer数的公式 N=min(参数2,总输入数据量/参数1 ) 参数1:每个Reduce处理的最大数据量 参数2:每个任务最大Reduce数量 调整reduce个数方法二 在hadoop的mapred-default.xml文件中修改 设置每个job的Reduce
我们在刚开始学习hive的时候,都知道hive可以降低程序员的学习成本和开发成本,具体表现就在于可以将SQL语句转换成MapReduce程序运行。 在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,在全局查找、字段查找 hive (default)> set hive.fetch.task.conversion=none; hive (default)> select * from score; hive (default hive (default)> set hive.fetch.task.conversion=more; hive (default)> select * from score; hive (default Map: 1 Reduce: 4 Cumulative CPU: 13.07 sec HDFS Read: 120749896 HDFS Write: 464 SUCCESS Stage-Stage-2:
一、问题描述 开发者利用jdbc连接hiveserver2(或者利用jdbc连接 spark HiveThriftServer2,由于两者都是提供jdbc连接到hive,因此,后面都统一称为利用jdbc 而且卡死分成两种现象: 故障现象1: 通过jdbc无法正常连接到hiveserver2; 故障现象2: 能够很顺利通过jdbc连接到hiveserver2,但是无法执行任何sql任务。 经过与公司内熟悉hiveserver2和spark HiveThriftServer2的同事沟通,之前在公司内部环境也经常遇到卡死的情况,定位原因主要是两类: (1)主要是由于jdbc连接hiveserver2 这种情况是由于hiveserver2自身的复杂压力大,内存损耗严重,严重GC进而导致hiveserver2故障。 以下是hiveserver2发生卡死,jdbc无法连接到hiveserver2的时候,统计GC的结果: 可以看到,当hiveserver2发生严重卡死时,也就是hiveserver2 进程发生严重GC
前言 Hive on Spark是指使用Spark替代传统MapReduce作为Hive的执行引擎,在HIVE-7292提出。 Hive on Spark的效率比on MR要高不少,但是也需要合理调整参数才能最大化性能,本文简单列举一些调优项。为了符合实际情况,Spark也采用on YARN部署方式来说明。 再按8:2比例划分的话,最终spark.executor.memory设为约13166MB,spark.yarn.executor.memoryOverhead设为约4389MB。 Hive参数 绝大部分Hive参数的含义和调优方法都与on MR时相同,但仍有两个需要注意。 hive.merge.sparkfiles 小文件是HDFS的天敌,所以Hive原生提供了合并小文件的选项,在on MR时是hive.merge.mapredfiles,但是on Spark时会改成hive.merge.sparkfiles
但是如果我们只局限于会使用Hive,而不考虑性能问题,就难搭建出一个完美的数仓,所以Hive性能调优是我们大数据从业者必须掌握的技能。本文将给大家讲解Hive参数与性能调优的一些方法及技巧。 1. JVM优化 JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。 =true 关于调优这些推测执行变量,还很难给一个具体的建议。 Hive的数据倾斜一般的处理方案: 常见的做法,通过参数调优: set hive.map.aggr=true; set hive.groupby.skewindata = ture; 当选项设定为 其他参数调优 开启CLI提示符前打印出当前所在的数据库名 set hive.cli.print.current.db=true; 让CLI打印出字段名称 hive.cli.print.header=true
Hive的标准调优清单,我们可以对照着来做我们的查询优化!
调优Hive on Tez查询没有一个通用的方法,查询的性能取决于数据的大小、文件类型、查询设计和查询模式。 1 通用调优 有时从CDH升级到CDP后,会发现Hive on Tez作业会比老的MR或者Spark要慢,这往往是因为没有对Tez作业进行调优导致的,另外在老的CDH平台中,因为一般都持续稳定运行一段时间了 由以下两个属性控制: • hive.prewarm.enabled • hive.prewarm.numcontainers 7 通用Tez调优参数 在处理Hive on Tez查询性能问题时,可以优先检查以下参数 8 总结 Hive on Tez查询性能分析的第一步是检查Hive 和 Hive on Tez 服务的一些关键配置,然后对于一些SQL查询作业一般需要set一些参数来进行特定的性能调优,大部分参数在本文都列出来了 对于一些复杂SQL的调优,或者运行故障往往还需要对SQL的写法进行调整。
Hive调优 一、本地模式 大多数的Hadoop Job是需要Hadoop提供的完整的可扩展性来处理大数据集的。不过,有时Hive的输入数据量是非常小的。 selected (1.568 seconds) --2)关闭本地模式,并执行查询语句 hive (default)> set hive.exec.mode.local.auto=false; 开启Map端聚合参数设置 --(1)是否在Map端进行聚合,默认为True set hive.map.aggr = true; --(2)在Map端进行聚合操作的条目数目 set hive.groupby.mapaggr.checkinterval 2、Count(distinct) 数据量小的时候无所谓,数据量大的情况下,由于COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大,就会导致整个 2)对于使用了order by语句的查询,要求必须使用limit语句。
此次博主为大家带来的是Hive性能调优中的严格模式。 Hive提供了一个严格模式,可以防止用户执行那些可能意想不到的不好的影响的查询。 通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。开启严格模式需要修改hive.mapred.mode值为strict,开启严格模式可以禁止3种类型的查询。 in which the Hive operations are being performed. 2. 对于使用了order by语句的查询,要求必须使用limit语句。 不幸的是,Hive并不会执行这种优化,因此,如果表足够大,那么这个查询就会出现不可控的情况。 好了,本次的分享到这里就结束了!!
此次博主为大家带来的是Hive性能调优中的数据倾斜。 一. 合理设置Map及Reduce数 1.通常情况下,作业会通过input的目录产生一个或者多个map任务。 2.是不是map数越多越好? 答案是否定的。 2. set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; (2)在Map-Reduce的任务结束时合并小文件的设置 (2)每个任务最大的reduce数,默认为1009 hive.exec.reducers.max=1009 (3)计算reducer数的公式 N=min(参数2,总输入数据量/参数1) 4.2 调整
此次博主为大家带来的是Hive性能调优中的并行执行。 Hive会将一个查询转化成一个或者多个阶段。这样的阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段。 或者Hive执行过程中可能需要的其他阶段。默认情况下,Hive一次只会执行一个阶段。 通过设置参数hive.exec.parallel值为true,就可以开启并发执行。不过,在共享集群中,需要注意下,如果job中并行阶段增多,那么集群利用率就会增加。 set hive.exec.parallel=true; //打开任务并行执行 set hive.exec.parallel.thread.number=16; //同一个sql
此次博主为大家带来的是Hive性能调优中的JVM重用。 JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。
此次博主为大家带来的是Hive性能调优中的推测执行。 </description> </property> 不过hive本身也提供了配置项来控制reduce-side的推测执行:默认是true <property> <name>hive.mapred.reduce.tasks.speculative.execution </description> </property> 关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。
JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。 </description> </property> 我们也可以在hive当中通过 set mapred.job.reuse.jvm.num.tasks=10; 这个设置来设置我们的
第 9 章 企业级调优 9.1 Fetch 抓取 Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。 )> select ename from emp; hive (default)> select ename from emp limit 3; 2)把 hive.fetch.task.conversion =256000000 (2)每个任务最大的 reduce 数,默认为 1009 hive.exec.reducers.max=1009 (3)计算 reducer 数的公式N=min(参数 2,总输入数据量 9.7 JVM 重用 JVM 重用是 Hadoop 调优参数的内容,其对 Hive 的性能具有非常大的影响,特别是对于很难避免小文件的场景或 task 特别多的场景,这类场景大多数执行时间都很短。 </description> </property> 关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。
--- 设置最大的采样样本数 缺点:有可能部分数据永远不会被处理到 2. (默认128MB) - 2.job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4) - 3.job的reduce数必须为0或者1 可用参数 主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2. 原因 1)、key分布不均匀 2)、业务数据本身的特性 3)、建表时考虑不周 4)、某些SQL语句本身就有数据倾斜 ? 解决方案:参数调节 hive.map.aggr=true 11. 其他参数调优 开启CLI提示符前打印出当前所在的数据库名 set hive.cli.print.current.db=true; 让CLI打印出字段名称 hive.cli.print.header=true
--- 设置最大的采样样本数 缺点:有可能部分数据永远不会被处理到 2. (默认128MB) - 2.job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4) - 3.job的reduce数必须为0或者1 可用参数 主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2. 原因 1)、key分布不均匀 2)、业务数据本身的特性 3)、建表时考虑不周 4)、某些SQL语句本身就有数据倾斜 解决方案:参数调节 hive.map.aggr=true 11. 其他参数调优 开启CLI提示符前打印出当前所在的数据库名 set hive.cli.print.current.db=true; 让CLI打印出字段名称 hive.cli.print.header=true
对于较小的数据集,这种性能技术可能不是必需的,但是为长期运行做一些额外的调优总是好的。 在本文中,我将讨论如何解决这些问题和性能调优技术,以提高 Hive 表的数据访问速度。 与 Cassandra 和 Spark 等其他大数据技术类似,Hive 是一个非常强大的解决方案,但需要数据开发人员和运营团队进行调优,才能在对 Hive 数据执行查询时获得最佳性能。 摄入的数据是原始数据,在摄入过程开始之前考虑所有调优因素非常重要。 组织 Hadoop 数据 第一步是组织 Hadoop 数据。我们从摄入/流作业开始。首先,需要对数据进行分区。 Hive 参数设置 当你通过 map-reduce 作业读取 Hive 表的数据时,有一些方便的调优参数。要了解更多关于这些调优参数的信息,请查阅 Hive调优参数。 统计数据 在不使用任何调优技术的情况下,从 Hive 表读取数据的查询时间根据数据量不同需要耗费 5 分钟到几个小时不等。 图 5:统计数据 合并之后,查询时间显著减少,我们可以更快地得到结果。