目录
一、使用spark引擎
0、Hive on Spark
https://www.cnblogs.com/lq0310/p/9855245.html
1、spark资源申请
set spark.yarn.jar=hdfs://ip:port/spark/sparkJarForHive/*.jar
set hive.execution.engine=spark;
set spark.home=/etc/sparkForHive
set spark.master=yarn
set 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=40G
5、executor.memoryOverhead 一般为每个executor的内存大小的12%-20% ,即 40G * 15% = 6G , 所以实际设置为5G
6、executor.memory = 40G - 6G = 33G ,所以实际设置为 30G
7、每个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;
--上述设置为文件预合并大小为256MB
hive.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;
标签:set,--,hive,调优,executor,spark,true,参数设置
From: https://www.cnblogs.com/nthforsth/p/16470209.html