| commit | 48f89aeb1c732d1ba1a99832b908d99558ac7c9c | [log] [tgz] |
|---|---|---|
| author | Sivabalan Narayanan <n.siva.b@gmail.com> | Wed Sep 06 13:56:21 2023 -0400 |
| committer | GitHub <noreply@github.com> | Wed Sep 06 10:56:21 2023 -0700 |
| tree | 861fb10c1f46ca93c2dd5f80f825f0e090bc1a95 | |
| parent | eab00d570fdc986d865b511cc0402069b4b9ce2b [diff] |
[HUDI-6397][HUDI-6759] Fixing misc bugs w/ metadata table (#9546) 1. This commit allows users to disable metadata using write configs cleanly. 2. Valid instants consideration while reading from MDT is solid now. We are going to treat any special instant time (that has additional suffix compared to DT's commit time) as valid. Especially with MDT partition initialization, the suffix is dynamic, and so we can't really find exact match. So, might have to go with total instant time length and treat all special instant times as valid ones. In the LogRecordReader, we will first ignore any uncommitted instants. And then if it's completed in MDT timeline, we check w/ the instantRange. So it should be fine to return true for any special instant times.
Apache Hudi (pronounced Hoodie) stands for Hadoop Upserts Deletes and Incrementals. Hudi manages the storage of large analytical datasets on DFS (Cloud stores, HDFS or any Hadoop FileSystem compatible storage).
Hudi supports three types of queries:
Learn more about Hudi at https://hudi.apache.org
Prerequisites for building Apache Hudi:
# Checkout code and build git clone https://github.com/apache/hudi.git && cd hudi mvn clean package -DskipTests # Start command spark-3.2.3-bin-hadoop3.2/bin/spark-shell \ --jars `ls packaging/hudi-spark-bundle/target/hudi-spark3.2-bundle_2.12-*.*.*-SNAPSHOT.jar` \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \ --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog' \ --conf 'spark.kryo.registrator=org.apache.spark.HoodieSparkKryoRegistrar'
To build for integration tests that include hudi-integ-test-bundle, use -Dintegration-tests.
To build the Javadoc for all Java and Scala classes:
# Javadoc generated under target/site/apidocs mvn clean javadoc:aggregate -Pjavadocs
The default Spark 2.x version supported is 2.4.4. The default Spark 3.x version, corresponding to spark3 profile is 3.4.0. The default Scala version is 2.12. Refer to the table below for building with different Spark and Scala versions.
| Maven build options | Expected Spark bundle jar name | Notes |
|---|---|---|
| (empty) | hudi-spark3.2-bundle_2.12 | For Spark 3.2.x and Scala 2.12 (default options) |
-Dspark2.4 -Dscala-2.11 | hudi-spark2.4-bundle_2.11 | For Spark 2.4.4 and Scala 2.11 |
-Dspark3.0 | hudi-spark3.0-bundle_2.12 | For Spark 3.0.x and Scala 2.12 |
-Dspark3.1 | hudi-spark3.1-bundle_2.12 | For Spark 3.1.x and Scala 2.12 |
-Dspark3.2 | hudi-spark3.2-bundle_2.12 | For Spark 3.2.x and Scala 2.12 (same as default) |
-Dspark3.3 | hudi-spark3.3-bundle_2.12 | For Spark 3.3.x and Scala 2.12 |
-Dspark3.4 | hudi-spark3.4-bundle_2.12 | For Spark 3.4.x and Scala 2.12 |
-Dspark2 -Dscala-2.11 | hudi-spark-bundle_2.11 (legacy bundle name) | For Spark 2.4.4 and Scala 2.11 |
-Dspark2 -Dscala-2.12 | hudi-spark-bundle_2.12 (legacy bundle name) | For Spark 2.4.4 and Scala 2.12 |
-Dspark3 | hudi-spark3-bundle_2.12 (legacy bundle name) | For Spark 3.4.x and Scala 2.12 |
For example,
# Build against Spark 3.2.x mvn clean package -DskipTests # Build against Spark 3.4.x mvn clean package -DskipTests -Dspark3.4 # Build against Spark 2.4.4 and Scala 2.11 mvn clean package -DskipTests -Dspark2.4 -Dscala-2.11
Starting from versions 0.11, Hudi no longer requires spark-avro to be specified using --packages
The default Flink version supported is 1.17. The default Flink 1.17.x version, corresponding to flink1.17 profile is 1.17.0. Flink is Scala-free since 1.15.x, there is no need to specify the Scala version for Flink 1.15.x and above versions. Refer to the table below for building with different Flink and Scala versions.
| Maven build options | Expected Flink bundle jar name | Notes |
|---|---|---|
| (empty) | hudi-flink1.17-bundle | For Flink 1.17 (default options) |
-Dflink1.17 | hudi-flink1.17-bundle | For Flink 1.17 (same as default) |
-Dflink1.16 | hudi-flink1.16-bundle | For Flink 1.16 |
-Dflink1.15 | hudi-flink1.15-bundle | For Flink 1.15 |
-Dflink1.14 | hudi-flink1.14-bundle | For Flink 1.14 and Scala 2.12 |
-Dflink1.14 -Dscala-2.11 | hudi-flink1.14-bundle | For Flink 1.14 and Scala 2.11 |
-Dflink1.13 | hudi-flink1.13-bundle | For Flink 1.13 and Scala 2.12 |
-Dflink1.13 -Dscala-2.11 | hudi-flink1.13-bundle | For Flink 1.13 and Scala 2.11 |
For example,
# Build against Flink 1.15.x mvn clean package -DskipTests -Dflink1.15 # Build against Flink 1.14.x and Scala 2.11 mvn clean package -DskipTests -Dflink1.14 -Dscala-2.11 # Build against Flink 1.13.x and Scala 2.12 mvn clean package -DskipTests -Dflink1.13
Unit tests can be run with maven profile unit-tests.
mvn -Punit-tests test
Functional tests, which are tagged with @Tag("functional"), can be run with maven profile functional-tests.
mvn -Pfunctional-tests test
Integration tests can be run with maven profile integration-tests.
mvn -Pintegration-tests verify
To run tests with spark event logging enabled, define the Spark event log directory. This allows visualizing test DAG and stages using Spark History Server UI.
mvn -Punit-tests test -DSPARK_EVLOG_DIR=/path/for/spark/event/log
Please visit https://hudi.apache.org/docs/quick-start-guide.html to quickly explore Hudi's capabilities using spark-shell.
Please check out our contribution guide to learn more about how to contribute. For code contributions, please refer to the developer setup.