Yt的Hive参数调优

#设置这个spark任务名称

set spark.app.name=fun_seamless_newGP133_qianyi_sj;

#开启动态分区
set hive.exec.dynamic.partition=true;

#动态分区非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;

#每个Map最大输入大小 256000000是官方默认值
set mapred.max.split.size=256000000; 

#节点中可以处理的最小的文件大小
set mapred.min.split.size.per.node=100000000;

#机架中可以处理的最小文件大小
set mapred.min.split.size.per.rack=100000000; 

#默认输入格式为CombineHiveInputFormat
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.auto.convert.join=false;
set spark.executor.memory=15G;
set spark.executor.memoryOverhead=6G;
set spark.driver.memory=15G;
set spark.executor.cores=2;
set spark.default.parallelism=500;
set spark.serializer=org.apache.spark.serializer.KryoSerializer;
set hive.groupby.skewindata=true;
set spark.dynamicAllocation.maxExecutors=70;
set spak.reducer.maxSizeInFlight=96m;
set spark.shuffle.file.buffer=64k;

6. 性能参数配置规范
1. 性能配置参数需注意以下几点:
(1)	生产环境请在脚本上线时提供作业读取数据量,由平台组统一配置性能参数。
(2)	禁止私自修改生产作业性能参数配置,因私自修改性能参数导致的作业失败责任自负。
(3)	测试环境虽然开放给大家所有权限,但请在配置资源使用量时多考虑其他人,避免一个人的作业配置过大资源量,导致其他人的测试作业无法执行。遇到影响其他人的测试工作的占用过大资源配置的作业,一律无告知第一时间查杀。资源过大评价标准:内存使用量超2T,CPU核数超256个,遇特殊情况需使用超大资源量进行测试时请先与平台组沟通。
2. 重要的性能参数含义及资源计算方式:
注意,该计算方式仅提供给大家在使用测试环境时能明确自己的资源使用方式,生产环境关于性能参数的配置请统一由平台组处理。
(1)	首先明确作业资源使用量的计算方式:
①	内存总使用量 ≈ Executor数量 * 单个Executor的内存使用量。
②	CPU总使用个数 ≈ Executor数量 * 单个Executor的CPU使用个数。
(2)	spark.dynamicAllocation.maxExecutors:最大可用Executor数量,建议值32 ~ 96。集群目前使用的是动态资源分配,该配置决定了作业可使用的最大Executor数量。作业并非一定会使用该配置量指定的Executor数量,而是会根据运行情况动态增减Executor数量。指定Executor数量时请统一使用该配置。
(3)	spark.executor.instances:禁止使用该参数,会造成资源浪费!该配置指定Executor数量为固定值,也就是说一旦设置,作业整个执行过程中都会使用指定个数的Executor。
(4)	spark.executor.memory:指定单个Executor使用的内存量,建议值8G ~ 16G。
(5)	spark.executor.cores:指定单个Executor使用的CPU核数,建议值1 ~ 4。
(6)	spark.executor.cores和spark.executor.memory的配比应该是1:8,对于计算密集型的作业(即存在大量JOIN、GroupBy、开窗等操作的作业)可以配比为1:4;也即是说,1个CPU核应对应8G内存,举例说明,当配置spark.executor.cores为2时,应将spark.executor.memory配置为16G。
(7)	spark.default.parallelism:计算并行度,建议配置为CPU总使用个数的2 ~ 3倍。该值决定了作业计算时的并行效率,越大的并行度能实现越大的吞吐效率。建议500-1000
(8)	举例说明资源配置策略:
①	首先确定作业总体输入源数据读取量,假设为512G。
②	接下来确定作业是属于计算密集型的还是存储密集型的。计算密集型指的是存在大量JOIN、GroupBy、开窗等操作的作业,存储密集型是指读写数据操作次数多、量大,或存在大量INSERT落表操作的作业。假设作业是计算密集型的,可以适当增加spark.executor.cores配置,例如配置为2。
③	根据第2步得到的spark.executor.cores配置确定spark.executor.memory;按计算密集型配比1:4进行配置,spark.executor.memory = spark.executor.cores * 4,即8G。
④	根据第1步及第3步得到的spark.executor.memory配置确定spark.dynamicAllocation.maxExecutors。按照总体输入源数据读取量冗余1 ~ 2倍,这里取1.5倍,即512G * 1.5 = 768G,除以单个Executor内存使用量,即768G / 8G,得到最大Executor数量约等于96。
⑤	根据第2步和第4步得到的spark.executor.cores和spark.dynamicAllocation.maxExecutors配置确定spark.default.parallelism;可知作业使用的CPU总量约为spark.dynamicAllocation.maxExecutors * spark.executor.cores,即96 * 4 = 192,可将spark.default.parallelism设为CPU总使用个数的2 倍,即192 * 2 = 384。
⑥	最终得出主要的参数配置如下:
1)	spark.executor.cores:2
2)	spark.executor.memory:8G
3)	spark.dynamicAllocation.maxExecutors:96
4)	spark.default.parallelism:384

猜你喜欢

转载自blog.csdn.net/someInNeed/article/details/108974969