【发布时间】:2021-02-06 22:29:12
【问题描述】:
我正在尝试通过具有 6 个节点(每个节点上有 8 个内核和 56GB 内存)的 EMR 集群执行 spark 作业。 Spark 作业对 Hive 表上的分区进行增量加载,最后它会刷新表以更新元数据。
刷新命令需要长达 3-6 小时才能完成,这太长了。
Hive 中数据的性质:
- 27Gb 数据位于 S3 上。
- 存储在镶木地板中。
- 在 2 列上分区。(例如:s3a//bucket-name/table/partCol1=1/partCol2=2020-10-12)。
注意 - 它是一个按日期划分的分区,不能更改。
使用的 Spark 配置:
- Num-executors= 15
- 执行器内存 =16Gb
- Executor-cores = 2
- 驱动程序内存 = 49Gb
- Spark-shuffle-partitions=48
- Hive.exec.dynamic.partition.mode=nonstrict
- Spark.sql.sources.partitionOverwriteMode=dynamic.
尝试过的事情:
- 调整 spark 内核/内存/执行器,但没有成功。
- 刷新表命令。
- Alter table 添加分区命令。
- Hive cli 需要 3-4 小时才能完成
MSCK repair table tablename
以上所有对于减少刷新 Hive 分区的时间都没有影响。
一些假设:
- 由于数据存储在 Amazon-S3 中,我是否在调整过程中遗漏了任何参数?
- 目前表上的分区数接近 10k,这是一个问题吗?
任何帮助将不胜感激。
【问题讨论】:
标签: apache-spark amazon-s3 pyspark hive amazon-emr