用sparksql对大HIVE表进行排序,如何分配spark资源

问题描述 投票:0回答:1

我有一个包含 30 亿行的 HIVE 表。想要根据“金额”列的降序分配序列 ID。逻辑如下:

with table_of_3_billion_row(amount) as (
  VALUES ( 10.01 ), ( 1.25 ), ( 9.35 ), ( 8.64 ), ( 2.87 ), ( 4.13 ), ( 6.15 ), ( 5.66 )
)
select 
row_number() over(order by amount desc) id,
amount 
from table_of_3_billion_row 

预期输出:

id  amount
1   10.01
2    9.35
3    8.64
4    6.15
5    5.66
6    4.13
7    2.87
8    1.25

sparksql 作业卡住或花费很长时间。有什么建议分配 Spark 资源来微调此查询吗?

apache-spark sorting hive
1个回答
0
投票

考虑到行数很大,您需要在 Spark 配置中执行以下操作。

首先我会尝试使用一百万个数据,然后添加另外一百万个

  1. 分区: 太多的分区会增加开销,而两个分区太少会导致 OOM。 从 1000 开始,然后看看是否 OOM,然后增加它。
spark.sql.shuffle.partitions=5000
spark.sql.files.maxPartitionBytes=256m
  1. 执行器内存: 或者增加您的执行程序及其内存(根据集群节点大小进行调整)
spark.executor.memory=16g
spark.executor.memoryOverhead=4g
spark.executor.cores=4
spark.executor.instances=50
© www.soinside.com 2019 - 2024. All rights reserved.