apache / apache/hudi

Efficient bootstrap and migration of existing non-Hudi dataset

Open
#14,665 0 comments 0 reactions 0 assignees View on GitHub
component:bootstrap from-jira priority:blocker type:epic
Dominant language
Java
Stars
6.2k
Forks
2.5k
Avg merge
2d 8h
Merged PRs (30d)
111

Description

This is an EPIC to revisit the logic of bootstrap for efficient migration of existing non-Hudi dataset, bridging any gaps with new features such as metadata table.

Here are the two modes of bootstrap and migration we suppose to support:
# Onboard for new partitions alone: Given an existing non-Hudi partitioned dataset (/path/parquet), Hudi manages new partitions under the same table path (/path/parquet) while keeping non-Hudi partitions untouched in place.  Query engine treats non-Hudi partitions differently when reading the data.  This works perfect for immutable data where there are no updates to old partitions and new data is only appended to the new partition.
# Metadata-only and full-record bootstrap: Given an existing parquet dataset (/path/parquet), Hudi generates the record-level metadata (Hudi meta columns) during the bootstrap process in a new table path (/path/parquet_hudi) different from the parquet dataset.  There are two modes; they can be chosen at the granularity of partition in a single bootstrap action.  This unlocks the ability for Hudi to do upsert for all partitions.
## Metadata-only: generates record-level metadata only per parquet file and a bootstrap index for mapping, without rewriting the actual data records. During query execution, the source data is merged with Hudi metadata to return the results.  This is the default mode.  
## Full-record: use bulk insert to generate record-level metadata, copy over and rewrite the source data with bulk insert.  During query execution, record-level metadata, i.e., meta columns, and the data columns are read from the same parquet, improving the read performance.

Important requirements:
* Query engine integration: Spark, Hive, Presto/Trino
* COW more important than MOR
* Address performance degradation due to treating the entire table as bootstrap
* Metadata table integration
* Support source dataset with Hive-style partitioning
* Support of non-Hudi partitions

Phase 1: Testing and verification of status-quo (1~1.5 week)

Writing:
* Two migration modes above
* COW and MOR
* 1 additional commit after bootstrap doing upsert for metadata-only and full-record bootstrap
* Spark datasource, Deltastreamer
* Partitioned and non-partitioned table
* Simple/complex key gen
* Hive-style partition
* w/ and w/o metadata table enabled
* Meta sync

Reading:
* Hive QL, Spark SQL, Spark datasource, Presto/Trino
* Snapshot, read-optimized, incremental query
* Queries in the original query testing plan: [https://docs.google.com/spreadsheets/d/1xVfatk-6-fekwuCCZ-nTHQkewcHSEk89y-ReVV5vHQU/edit#gid=1813901684]

Need to develop a validation tool for automated validation
* Metadata, i.e., meta columns and index in metadata table, is properly populated
* Data queried from Hudi table matches the parquet data

Add tests when needed
* HUDI-4125 Add integration tests around bootstrapped Hudi table

Phase 2: Functionality and correctness fix,  (2~3 weeks)

Known and possible issues:
* Spark cannot see non-Hudi partitions in first onboarding mode
* Bootstrap Relation does not support MOR; HUDI-2071 Support Reading Bootstrap MOR RT Table In Spark DataSource Table
* HUDI-915 Partition Columns missing in files upserted after Metadata Bootstrap
* HUDI-992 For hive-style partitioned source data, partition columns synced with Hive will always have String type
* HUDI-1369 Bootstrap Datasource jobs from hanging via spark-submit
* HUDI-3122  Presto query failed for bootstrap tables
* HUDI-1779  Fail to bootstrap/upsert a table which contains timestamp column

Phase 3: Performance (1~2 weeks)
* HUDI-1157 Optimization whether to query Bootstrapped table using HoodieBootstrapRelation vs Sparks Parquet datasource
* HUDI-4453 Support partition pruning for tables Bootstrapped from Source Hive Style partitioned tables
* HUDI-619 Avoid stitching meta columns and only load data columns for improving read performance
* HUDI-1158 Optimizations in parallelized listing behaviour for markers and bootstrap source files

 

## JIRA info

- Link: https://issues.apache.org/jira/browse/HUDI-1265
- Type: Epic

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with Phase 1 status-quo testing for the two bootstrap modes across COW/MOR, Spark datasource, Deltastreamer, table layouts, key generators, Hive-style partitions, metadata tables, and meta sync. Develop the proposed validation tool to verify metadata and query results against the source Parquet data, then use HUDI-4125 and the listed follow-up issues to track coverage and correctness.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spark
Domain
data-engineering, databases, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.