一,Spark读Hudi读不出数据
Hudi路径下有数据,但是用spark读不出来
原因是Hudi文件没有压缩,只能读RT,不能读RO,修改读方式:
.option(DataSourceReadOptions.QUERY_TYPE_OPT_KEY(),DataSourceReadOptions.QUERY_TYPE_INCREMENTAL_OPT_VAL())
.option(DataSourceReadOptions.BEGIN_INSTANTTIME_OPT_KEY(),"20211123215558")
此时读取数据报错:
Caused by: java.lang.ClassNotFoundException: org.apache.hudi.common.model.EventTimeAvroPayload
原因是Hudi版本不对,本地版本是0.9,同事写入Hudi时使用的是0.10,换jar包即可
二,spark读hudi时报错 org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
原因是少包,添加依赖即可:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>${spark.version}</version>
</dependency>
三,spark读取Hudi报错Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.catalyst.StructFilters
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.catalyst.StructFilters
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
spark版本不对,本地用3.0.2,实际上服务器用的是3.1.2,换成3.1.2即解决问题