的方式 set hive.exec.mode.local.auto.tasks.max=10; 当这三个参数同时成立时候,才会采用本地mr. = 16; SET mapred.job.reuse.jvm.num.tasks = 10; SET hive.exec.dynamic.partition = true; SET hive.optimize.cp =false; 九、Hive调优配置项合集 参数 作用 hive.ddl.output.format hive的ddl语句的输出格式,默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置 每个reducer的大小,默认是1G,输入文件如果是10G,那么就会起10个reducer; hive.exec.reducers.max reducer的最大个数,如果在mapred.reduce.tasks :使用简单limit查询数据子集时,可抽样的最大文件数,默认是10; hive.limit.optimize.enable:使用简单limit抽样数据时是否开启优化选项,默认是false,关于limit
代码级别的调优 友情提示:小编扛着发烧写完这详细的总结,请一定要给一键三连呀各位大佬 explain 与 explain exented 优化 ```powershell explain select 任务越复杂,Hql代码越复杂,stage数量越多,程序运行的时间越长 join 优化 hive的查询永远都是小表(结果集)驱动大表(结果集) hive中的on连接只能是等值连接 注意点:hive是否配置普通的 =10 hive.limit.optimize.enable=false(如果limit较多时可以开启) hive.limit.optimize.fetch.max=50000 本地模式 hive.exec.mode.local.auto =org.apache.hadoop.hive.ql.io.CombineHiveInputFormat set mapreduce.job.reduces=10 hive.exec.reducers.max ,UDAF是多行处理,还有UDTF表级别的输出 5.合理减少job和task的数量 6.小表去join大表 7.大表join大表,过滤空key 8.设置并行数 9.设置关闭推测执行 10.设置索引 11
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. The default in Hive 0.14.0 and earlier is 1 GB, that is, if the input size is 10 GB then 10 reducers =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;命令查看到,该参数不能自定义修改); 举例: b) 多个小文件:假设input目录下有3个文件a,b,c大小分别为10m,20m,150m,那么hadoop会分隔成4个块(10m,20m,128m,22m),从而产生4个map数。 10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。 =256123456 b) 每个任务最大的reduce数,默认为1009 hive.exec.reducers.max=1009 c)计算reducer数的公式 N=min(参数2,总输入数据量/参数1
mr的方式,默认为4 set hive.exec.mode.local.auto.input.files.max=10; 案例实操: 开启本地模式,并执行查询语句 hive (default)> set delimited fields terminated by '\t'; load data local inpath '/home/admin/softwares/data/100万条大表数据(id除以10 data/加递增id的原始数据/ori' into table ori; load data local inpath '/home/admin/softwares/data/100万条大表数据(id除以10 table bigtable; 先关联再Where: SELECT a.id FROM bigtable a LEFT JOIN ori b ON a.id = b.id WHERE b.id <= 10 ; 正确的写法是写在ON后面:先Where再关联 SELECT a.id FROM ori a LEFT JOIN bigtable b ON (b.id <= 10 AND a.id = b.id);
前言 Hive on Spark是指使用Spark替代传统MapReduce作为Hive的执行引擎,在HIVE-7292提出。 Hive on Spark的效率比on MR要高不少,但是也需要合理调整参数才能最大化性能,本文简单列举一些调优项。为了符合实际情况,Spark也采用on YARN部署方式来说明。 若我们一共有10台32C/128G的节点,并按照上述配置(即每个节点承载7个Executor),那么理论上讲我们可以将spark.executor.instances设为70,以使集群资源最大化利用。 Hive参数 绝大部分Hive参数的含义和调优方法都与on MR时相同,但仍有两个需要注意。 而hive.auto.convert.join.noconditionaltask.size这个参数就是map join转化的阈值,在Hive on MR下默认为10MB。
Hive调优 一、本地模式 大多数的Hadoop Job是需要Hadoop提供的完整的可扩展性来处理大数据集的。不过,有时Hive的输入数据量是非常小的。 用户可以通过设置hive.exec.mode.local.auto的值为true,来让Hive在适当的时候自动启动这个优化。 local mr的方式,默认为4 set hive.exec.mode.local.auto.input.files.max=10; 案例实操: --1)开启本地模式,并执行查询语句 hive (default 三、并行执行 Hive会将一个查询转化成一个或者多个阶段。这样的阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段。或者Hive执行过程中可能需要的其他阶段。 四、严格模式 Hive提供了一个严格模式,可以防止用户执行那些可能意向不到的不好的影响的查询。 通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。
但是如果我们只局限于会使用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.tez.container.size 的 10%。 8 总结 Hive on Tez查询性能分析的第一步是检查Hive 和 Hive on Tez 服务的一些关键配置,然后对于一些SQL查询作业一般需要set一些参数来进行特定的性能调优,大部分参数在本文都列出来了 对于一些复杂SQL的调优,或者运行故障往往还需要对SQL的写法进行调整。
此次博主为大家带来的是Hive性能调优中的JVM重用。 JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。 通常在10-20之间,具体多少需要根据具体业务场景测试得出。 <property> <name>mapreduce.job.jvm.numtasks</name> <value>10</value> <description>How many tasks
此次博主为大家带来的是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性能调优中的严格模式。 Hive提供了一个严格模式,可以防止用户执行那些可能意想不到的不好的影响的查询。 通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。开启严格模式需要修改hive.mapred.mode值为strict,开启严格模式可以禁止3种类型的查询。 <property> <name>hive.mapred.mode</name> <value>strict</value> <description> The mode in which the Hive operations are being performed. 不幸的是,Hive并不会执行这种优化,因此,如果表足够大,那么这个查询就会出现不可控的情况。 好了,本次的分享到这里就结束了!!
此次博主为大家带来的是Hive性能调优中的数据倾斜。 一. 合理设置Map及Reduce数 1.通常情况下,作业会通过input的目录产生一个或者多个map任务。 设置最大切片值为100个字节 hive (default)> set mapreduce.input.fileinputformat.split.maxsize=100; hive (default)> set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; (2)在Map-Reduce的任务结束时合并小文件的设置 : 在map-only任务结束时合并小文件,默认true SET hive.merge.mapfiles = true; 在map-reduce任务结束时合并小文件,默认false SET hive.merge.mapredfiles merge SET hive.merge.smallfiles.avgsize = 16777216; 四.
,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数 即,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。 a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。 ; --10为重用个数 8.动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false) hive.exec.dynamic.partition=true; 动态分区属性:设置为nonstrict 配置 set hive.mapred.reduce.tasks.speculative.execution=true; 10.数据倾斜 表现:任务进度长时间维持在99%(或100%),查看任务监控页面, 其他参数调优 开启CLI提示符前打印出当前所在的数据库名 set hive.cli.print.current.db=true; 让CLI打印出字段名称 hive.cli.print.header=true
,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数 即,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。 a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。 ; --10为重用个数 8.动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false) hive.exec.dynamic.partition=true; 动态分区属性:设置为nonstrict 配置 set hive.mapred.reduce.tasks.speculative.execution=true; 10.数据倾斜 表现:任务进度长时间维持在99%(或100%),查看任务监控页面, 其他参数调优 开启CLI提示符前打印出当前所在的数据库名 set hive.cli.print.current.db=true; 让CLI打印出字段名称 hive.cli.print.header=true
此次博主为大家带来的是Hive性能调优中的推测执行。 </description> </property> 不过hive本身也提供了配置项来控制reduce-side的推测执行:默认是true <property> <name>hive.mapred.reduce.tasks.speculative.execution </description> </property> 关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。
第 9 章 企业级调优 9.1 Fetch 抓取 Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。 local mr的方式,默认为 4 set hive.exec.mode.local.auto.input.files.max=10; 案例实操: 1)开启本地模式,并执行查询语句 hive (default 9.7 JVM 重用 JVM 重用是 Hadoop 调优参数的内容,其对 Hive 的性能具有非常大的影响,特别是对于很难避免小文件的场景或 task 特别多的场景,这类场景大多数执行时间都很短。 通常在 10-20 之间,具体多少需要根据具体业务场景测试得出。 </description> </property> 关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。
JVM重用是Hadoop调优参数的内容,其对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短。 通常在10-20之间,具体多少需要根据具体业务场景测试得出。 <property> <name>mapreduce.job.jvm.numtasks</name> <value>10</value> <description>How many tasks </description> </property> 我们也可以在hive当中通过 set mapred.job.reuse.jvm.num.tasks=10; 这个设置来设置我们的
代码级别的调优 友情提示:小编扛着发烧写完这详细的总结,请一定要给一键三连呀各位大佬 explain 与 explain exented 优化 ```powershell explain select 任务越复杂,Hql代码越复杂,stage数量越多,程序运行的时间越长 join 优化 hive的查询永远都是小表(结果集)驱动大表(结果集) hive中的on连接只能是等值连接 注意点:hive是否配置普通的 =10 hive.limit.optimize.enable=false(如果limit较多时可以开启) hive.limit.optimize.fetch.max=50000 本地模式 hive.exec.mode.local.auto =org.apache.hadoop.hive.ql.io.CombineHiveInputFormat set mapreduce.job.reduces=10 hive.exec.reducers.max 6.小表去join大表 7.大表join大表,过滤空key 8.设置并行数 9.关闭推测执行 10.设置索引 11.在where字句中增加分区过滤器 12.当表为分区表时,where字句后没有分区字段和限制时