vinothchandar opened a new pull request #2398:
URL: https://github.com/apache/hudi/pull/2398
- Introduced an internal metadata table, that stores file listings.
- metadata table is kept upto date with
- Fixed handling of CleanerPlan.
- [HUDI-842] Reduce parallelism to speed up the test.
- [HUDI-842] Implementation of CLI commands for metadata operations and
lookups.
- [HUDI-842] Extend rollback metadata to include the files which have been
appended to.
- [HUDI-842] Support for rollbacks in MOR Table.
- MarkerBasedRollbackStrategy needs to correctly provide the list of files
for which rollback blocks were appended.
- [HUDI-842] Added unit test for rollback of partial commits (inflight but
not completed yet).
- [HUDI-842] Handled the error case where metadata update succeeds but
dataset commit fails.
- [HUDI-842] Schema evolution strategy for Metadata Table. Each type of
metadata saved (FilesystemMetadata, ColumnIndexMetadata, etc.) will be a
separate field with default null. The type of the record will identify the
valid field. This way, we can grow the schema when new type of information is
saved within in which still keeping it backward compatible.
- [HUDI-842] Fix non-partitioned case and speedup initial creation of
metadata table.Choose only 1 partition for jsc as the number of records is low
(hundreds to thousands). There is more overhead of creating large number of
partitions for JavaRDD and it slows down operations like WorkloadProfile.
For the non-partitioned case, use "." as the name of the partition to
prevent empty keys in HFile.
- [HUDI-842] Reworked metrics pusblishing.
- Code has been split into reader and writer side. HoodieMetadata code to
be accessed by using HoodieTable.metadata() to get instance of metdata for the
table.
Code is serializable to allow executors to use the functionality.
- [RFC-15] Add metrics to track the time for each file system call.
- [RFC-15] Added a distributed metrics registry for spark which can be used
to collect metrics from executors. This helps create a stats dashboard which
shows the metadata table improvements in real-time for production tables.
- [HUDI-1321] Created HoodieMetadataConfig to specify configuration for the
metadata table. This is safer than full-fledged properties for the metadata
table (like HoodieWriteConfig) as it makes burdensome to tune the metadata.
With limited configuration, we can control the performance of the metadata
table closely.
[HUDI-1319][RFC-15] Adding interfaces for HoodieMetadata,
HoodieMetadataWriter (apache#2266)
- moved MetadataReader to HoodieBackedTableMetadata, under the
HoodieTableMetadata interface
- moved MetadataWriter to HoodieBackedTableMetadataWriter, under the
HoodieTableMetadataWriter
- Pulled all the metrics into HoodieMetadataMetrics
- Writer now wraps the metadata, instead of extending it
- New enum for MetadataPartitionType
- Streamlined code flow inside HoodieBackedTableMetadataWriter w.r.t
initializing metadata state
- [HUDI-1319] Make async operations work with metadata table (apache#2332)
- Changes the syncing model to only move over completed instants on data
timeline
- Syncing happens postCommit and on writeClient initialization
- Latest delta commit on the metadata table is sufficient as the watermark
for data timeline archival
- Cleaning/Compaction use a suffix to the last instant written to metadata
table, such that we keep the 1-1
- .. mapping between data and metadata timelines.
- Got rid of a lot of the complexity around checking for valid commits
during open of base/log files
- Tests now use local FS, to simulate more failure scenarios
- Some failure scenarios exposed HUDI-1434, which is needed for MOR to work
correctly
co-authored by: Vinoth Chandar <[email protected]>
## *Tips*
- *Thank you very much for contributing to Apache Hudi.*
- *Please review https://hudi.apache.org/contributing.html before opening a
pull request.*
## What is the purpose of the pull request
*(For example: This pull request adds quick-start document.)*
## Brief change log
*(for example:)*
- *Modify AnnotationLocation checkstyle rule in checkstyle.xml*
## Verify this pull request
*(Please pick either of the following options)*
This pull request is a trivial rework / code cleanup without any test
coverage.
*(or)*
This pull request is already covered by existing tests, such as *(please
describe tests)*.
(or)
This change added tests and can be verified as follows:
*(example:)*
- *Added integration tests for end-to-end.*
- *Added HoodieClientWriteTest to verify the change.*
- *Manually verified the change by running a job locally.*
## Committer checklist
- [ ] Has a corresponding JIRA in PR title & commit
- [ ] Commit message is descriptive of the change
- [ ] CI is green
- [ ] Necessary doc changes done or have another open PR
- [ ] For large changes, please consider breaking it into sub-tasks under
an umbrella JIRA.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]