Skip to content

Commit 238628a

Browse files
authored
[HUDI-4902] Set default partitioner for SIMPLE BUCKET index (#6759)
1 parent 5e58421 commit 238628a

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieLayoutConfig.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public class HoodieLayoutConfig extends HoodieConfig {
4848
.noDefaultValue()
4949
.withDocumentation("Partitioner class, it is used to distribute data in a specific way.");
5050

51+
public static final String SIMPLE_BUCKET_LAYOUT_PARTITIONER_CLASS_NAME =
52+
"org.apache.hudi.table.action.commit.SparkBucketIndexPartitioner";
53+
5154
private HoodieLayoutConfig() {
5255
super();
5356
}
@@ -80,8 +83,14 @@ public HoodieLayoutConfig build() {
8083
}
8184

8285
private void setDefault() {
83-
if (layoutConfig.contains(HoodieIndexConfig.INDEX_TYPE.key()) && layoutConfig.getString(HoodieIndexConfig.INDEX_TYPE.key()).equals(HoodieIndex.IndexType.BUCKET.name())) {
86+
if (layoutConfig.contains(HoodieIndexConfig.INDEX_TYPE.key())
87+
&& layoutConfig.getString(HoodieIndexConfig.INDEX_TYPE.key()).equals(HoodieIndex.IndexType.BUCKET.name())) {
8488
layoutConfig.setDefaultValue(LAYOUT_TYPE, HoodieStorageLayout.LayoutType.BUCKET.name());
89+
90+
// Currently, the partitioner of the SIMPLE bucket index is supported by SparkBucketIndexPartitioner only.
91+
if ("SIMPLE".equals(layoutConfig.getString(HoodieIndexConfig.BUCKET_INDEX_ENGINE_TYPE))) {
92+
layoutConfig.setDefaultValue(LAYOUT_PARTITIONER_CLASS_NAME, SIMPLE_BUCKET_LAYOUT_PARTITIONER_CLASS_NAME);
93+
}
8594
}
8695
layoutConfig.setDefaultValue(LAYOUT_TYPE, LAYOUT_TYPE.defaultValue());
8796
}

hudi-client/hudi-client-common/src/test/java/org/apache/hudi/config/TestHoodieWriteConfig.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,23 @@ public void testConsistentBucketIndexInvalidClusteringConfig() {
398398
.withClusteringExecutionStrategyClass(HoodieClusteringConfig.SPARK_SORT_AND_SIZE_EXECUTION_STRATEGY).build()));
399399
}
400400

401+
@Test
402+
public void testSimpleBucketIndexPartitionerConfig() {
403+
HoodieWriteConfig writeConfig = HoodieWriteConfig.newBuilder().withPath("/tmp")
404+
.withIndexConfig(HoodieIndexConfig.newBuilder().withIndexType(HoodieIndex.IndexType.BUCKET)
405+
.withBucketIndexEngineType(HoodieIndex.BucketIndexEngineType.SIMPLE).build())
406+
.build();
407+
assertEquals(HoodieLayoutConfig.SIMPLE_BUCKET_LAYOUT_PARTITIONER_CLASS_NAME, writeConfig.getString(HoodieLayoutConfig.LAYOUT_PARTITIONER_CLASS_NAME));
408+
409+
HoodieWriteConfig overwritePartitioner = HoodieWriteConfig.newBuilder().withPath("/tmp")
410+
.withIndexConfig(HoodieIndexConfig.newBuilder().withIndexType(HoodieIndex.IndexType.BUCKET)
411+
.withBucketIndexEngineType(HoodieIndex.BucketIndexEngineType.SIMPLE)
412+
.build())
413+
.withLayoutConfig(HoodieLayoutConfig.newBuilder().withLayoutPartitioner("org.apache.hudi.table.action.commit.UpsertPartitioner").build())
414+
.build();
415+
assertEquals("org.apache.hudi.table.action.commit.UpsertPartitioner", overwritePartitioner.getString(HoodieLayoutConfig.LAYOUT_PARTITIONER_CLASS_NAME));
416+
}
417+
401418
private HoodieWriteConfig createWriteConfig(Map<String, String> configs) {
402419
final Properties properties = new Properties();
403420
configs.forEach(properties::setProperty);

0 commit comments

Comments
 (0)