[SUPPORT] Unable to read Hudi table after hudi upgrade
- Dominant language
- Java
- Stars
- 6.2k
- Forks
- 2.5k
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 111
Description
**Describe the problem you faced**
Migrated to Hudi 0.14.0 from Hudi version 0.8. While attempting to read Hudi table in parquet format from AWS S3 using Spark receiving the following error:-
`org.apache.hudi.internal.schema.HoodieSchemaException: Failed to convert avro schema to struct type:`
The underlying cause looks like classNotFound which is following:-
`Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.adapter.Spark2Adapter`
Note: The version of Hudi which wrote the table is also 0.14.0.
Attached stacktrace at the bottom.
**Expected behavior**
A clear and concise description of what you expected to happen.
Expected the spark to read the Hudi table and convert it to required Schema/Dataframe.
**Environment Description**
* Hudi version : 0.14.0
* Spark version : Tried with both 3.5 and 3.3
* Hive version : 3.1.3
* Hadoop version : 3.0.0
* Storage (HDFS/S3/GCS..) : S3
* Running on Docker? (yes/no) : No
* EMR version: 7.0.0
**Additional context**
Add any other context about the problem here.
**Stacktrace**
```Add the stacktrace of the error.```
```
org.apache.hudi.internal.schema.HoodieSchemaException: Failed to convert avro schema to struct type:
**Schema**
at org.apache.hudi.AvroConversionUtils$.convertAvroSchemaToStructType(AvroConversionUtils.scala:161)
at org.apache.hudi.HoodieBaseRelation.tableStructSchema$lzycompute(HoodieBaseRelation.scala:187)
at org.apache.hudi.HoodieBaseRelation.tableStructSchema(HoodieBaseRelation.scala:186)
at org.apache.hudi.BaseFileOnlyRelation.$anonfun$toHadoopFsRelation$3(BaseFileOnlyRelation.scala:193)
at scala.Option.orElse(Option.scala:447)
at org.apache.hudi.BaseFileOnlyRelation.toHadoopFsRelation(BaseFileOnlyRelation.scala:193)
at org.apache.hudi.DefaultSource$.resolveBaseFileOnlyRelation(DefaultSource.scala:331)
at org.apache.hudi.DefaultSource$.createRelation(DefaultSource.scala:262)
at org.apache.hudi.DefaultSource.createRelation(DefaultSource.scala:118)
at org.apache.hudi.DefaultSource.createRelation(DefaultSource.scala:74)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:346)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:229)
at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:211)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:186)
at com.amazon.insights.reader.HudiReader.$anonfun$readFull$1(HudiReader.scala:114)
at scala.util.Try$.apply(Try.scala:213)
at com.amazon.insights.reader.HudiReader.readFull(HudiReader.scala:114)
at com.amazon.insights.reader.HudiReader.readHistorical(HudiReader.scala:103)
at com.amazon.insights.reader.HudiReader.readDataFrame(HudiReader.scala:38)
at com.amazon.insights.spark.MyAggregationSparkJob.$anonfun$run$1(MyAggregationSparkJob.scala:57)
at com.amazon.insights.spark.MyAggregationSparkJob.$anonfun$run$1$adapted(MyAggregationSparkJob.scala:44)
at scala.collection.immutable.List.foreach(List.scala:431)
at com.amazon.insights.spark.MyAggregationSparkJob.run(MyAggregationSparkJob.scala:44)
at com.amazon.insights.DataAggregationApplication$.main(DataAggregationApplication.scala:30)
at com.amazon.insights.DataAggregationApplication.main(DataAggregationApplication.scala)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:741)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.adapter.Spark2Adapter
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
at org.apache.hudi.SparkAdapterSupport$.sparkAdapter$lzycompute(SparkAdapterSupport.scala:49)
at org.apache.hudi.SparkAdapterSupport$.sparkAdapter(SparkAdapterSupport.scala:35)
at org.apache.hudi.SparkAdapterSupport.sparkAdapter(SparkAdapterSupport.scala:29)
at org.apache.hudi.SparkAdapterSupport.sparkAdapter$(SparkAdapterSupport.scala:29)
at org.apache.hudi.HoodieSparkUtils$.sparkAdapter$lzycompute(HoodieSparkUtils.scala:66)
at org.apache.hudi.HoodieSparkUtils$.sparkAdapter(HoodieSparkUtils.scala:66)
at org.apache.hudi.AvroConversionUtils$.convertAvroSchemaToStructType(AvroConversionUtils.scala:156)
... 31 more
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the Hudi 0.14.0 read against the reported Spark 3.3 and 3.5 environments, using the stack trace through AvroConversionUtils.scala, HoodieBaseRelation.scala, and SparkAdapterSupport.scala. Check how SparkAdapterSupport resolves Spark2Adapter and verify the Hudi table can be loaded and converted to a DataFrame without the ClassNotFoundException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, hadoop, java, spark
- Domain
- cloud, data-engineering, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100