如何将应用于不同文件/表的相同/共享分区的 HDFS 文件块放置在同一数据节点上

How to place HDFS file blocks with same / shared partitioning applied for different files / tables on same Data Node

我有两个按日期列分区的大表。它们在 hdfs 中保存为 parquet 文件。每个分区都被 64 MB 的块划分,并在集群机器上复制 3 次。为了优化连接操作,我想在同一台机器上放置相同的日期分区(任何连接键值仅放置在一个日期分区中)。

在 Spark 中有一个 Partitioner 对象,它可以帮助在集群中分配不同 RDD 的块。它与我的问题非常相似,但我担心保存这些 RDD 的文件块后可能会被 hdfs 机制洗牌。 说明:RDD 是 Spark 实例,df 方法 saveAsTable(...) 调用(我想)一些选择数据节点并复制数据的低级函数。

任何人都可以帮助我知道我的表的块分布是否正确吗?

您的问题的答案是,就逻辑相关文件/表的分区而言,无法明确控制 "like / similar" 数据块的放置。 IE。您无法影响 HDFS 将数据块放置在哪些数据节点上。

这些分区/数据块可能巧合地驻留在相同的数据节点/工作节点上(由于 HDFS 的复制。

顺便说一句,对于 S3,这种方法在任何情况下都不起作用,因为不存在数据局部性优化的概念。