apache / apache/hudi

[SUPPORT] Unable to read Hudi table after hudi upgrade

Open
#11,492 9 comments 0 reactions 0 assignees View on GitHub
issue:version-compatibility status:triaged
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.