我正在尝试通过6个节点(每个节点上有8个内核和56gb内存)的emr集群执行spark作业。spark作业对配置单元表上的分区执行增量加载,最后执行刷新表以更新元数据。
刷新命令需要3-6小时才能完成,这太长了。
配置单元中数据的性质:
s3上有27gb的数据。
储存在Parquet地板中。
在2列上分区。(例如:s3a//bucket name/table/partcol1=1/partcol2=2020-10-12)。
注意-它是一个按日期划分的分区,不能更改。
使用的spark配置:
执行者数量=15
执行器内存=16gb
执行器核心=2
驱动程序内存=49gb
spark shuffle分区=48
hive.exec.dynamic.partition.mode=非严格
spark.sql.sources.partitionoverwritemode=动态。
尝试过的事情:
调整spark内核/内存/执行器,但运气不佳。
“刷新表”命令。
alter table add partition命令。
配置单元cli需要3-4小时才能完成 MSCK repair table tablename
以上所有这些对减少在hive上刷新分区的时间没有任何影响。
一些假设:
当数据存储在amazon-s3中时,在调优过程中是否缺少任何参数。?
目前表上的分区数接近10k,这是一个问题吗。?
任何帮助都将不胜感激。
1条答案
按热度按时间bttbmeg01#
在可能的情况下,将分区设置为1列。当我们有多层(多列分区)时,它就死了
使用r类型示例。与相同价格的m类型示例相比,它提供了更多的内存
如果有许多小文件,请使用coalesce合并源中的文件。
检查Map器任务数。任务越多,性能就越差
使用emrfs而不是s3来保存元数据信息
在下面使用
{“classification”:“spark”,“properties”:{“maximizeresourceallocation”:“true”}}
请按照以下链接中的一些说明进行操作