最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

hive调优之参数设置

来源:博客园


(相关资料图)

目录
  • 一、使用spark引擎
    • 0、Hive on Spark
    • 1、spark资源申请
    • 2、作业过程中的相关参数

一、使用spark引擎

0、Hive on Spark

https://www.cnblogs.com/lq0310/p/9855245.html

1、spark资源申请

set spark.yarn.jar=hdfs://ip:port/spark/sparkJarForHive/*.jarset hive.execution.engine=spark;set spark.home=/etc/sparkForHiveset spark.master=yarnset spark.app.name=测试set spark.executor.instances=40;set spark.executor.memory=30g;set spark.executor.memoryOverhead=5g;set spark.executor.cores=4;set spark.default.parallelism=300;set spark.sql.shuffle.partitions=300;set spark.driver.memory=12g;set spark.driver.memoryOverhead=1g;set hive.spark.client.server.connect.timeout=300000;

1、集群资源,33节点,2.5TB内存2、需求申请500G左右内存3、申请 cores=4 ,一般core申请4-5个4、申请的 executor = 集群节点数/cores数 = 33/4 = 8 ,这样每个 executor 的内存 = 需求内存大小/executor数 ,即每个executor 的内存有 500G/8=40G5、executor.memoryOverhead 一般为每个executor的内存大小的12%-20% ,即 40G * 15% = 6G , 所以实际设置为5G6、executor.memory = 40G - 6G = 33G ,所以实际设置为 30G7、每个executor 可以运行 4 个任务,每个core 一个 task。那么每个task的平均内存是 35/4 = 9G , X=500G。如果 X > 50G ,driver内存申请12G;如果 50G>X > 12G ,driver内存申请4G;如果 12G>X > 1G ,driver内存申请1G;如果 1G>X ,driver内存申请256MB。8、根据 第7点,我们实际申请 driver.memory=12G,memoryOverhead = memory*15% ,实际申请 driver.memoryOverhead= 1G

关于spark资源申请的个人总结:1)资源申请一定是越多越好,资源越多任务跑得越快,此时限制任务速度的是资源分配方式、硬件等方面。2)资源不足的情况下,根据团队规定,单个任务资源申请不超过总资源的15%。3)普通任务(10分钟内跑完)可申请总资源的5%。如总内存2.5T,总核900,一般每个节点申请3~5核,所以申请 cores=4,那么 instances=9005%/4=11,executor.memory=25005%/11=11G。4)每个任务的虚拟核数和内存大小比例应根据任务实际运行情况而定,有些任务并不需要太多的核,如一些stage中大部分时间只有一个节点的核在工作。

2、作业过程中的相关参数

--开启小文件合并hive.merge.sparkfiles=true;hive.merge.rcfile.block.level=true;--上述设置为文件预合并大小为256MBhive.merge.size.per.task=256000000;--作业输出文件小于上述设置160MB时,会合并为更大的文件(mapfiles为true,对于map reduce作业,如果为hive.merge.mapredfiles为true。)hive.merge.smallfiles.avgsize=16000000;--是否自动转换成mapjoin。转换前会有reduce,中间结果会进行落盘;转换后没有了reduce阶段,map直接输出join结果,此时又多少maptask就产生多少个文件hive.auto.convert.join=true;--大表小表的阀值设置(默认25M一下认为是小表),一旦开启map端join配置,Hive会自动检查小表是否大于此参数配置的大小,如果大于则转为普通的join,如果小于则转为map端join。hive.mapjoin.smalltable.filesize=25000000;--是否将多个mapjoin合并成1个hive.auto.convert.join.noconditionaltask=true;--多个mapjoin合并成1个时,所有小表的文件大小综合的最大值(1G)hive.auto.convert.join.noconditionaltask.size=1000000000;--开启hive中间文件压缩hive.exec.compress.intermediate=true;hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;hive.intermediate.compression.type=BLOCK;--hive的默认查询执行引擎一次处理一行,而矢量化查询执行是一种hive特性,目的是按照每批1024行读取数据,并且一次性对整个记录整合(而不是对单条记录)应用操作,注意:要使用矢量化查询执行,就必须以ORC格式存储数据。hive.vectorized.execution.enabled=true;--谓词下推hive.optimize.ppd=true;--列裁剪hive.optimize.cp=true;

关键词: 直接输出 个人总结 自动检查