我正在阅读有关 LakeFS 的文档,现在还不清楚什么是 LakeFS 的合并甚至合并冲突。
假设我使用 Apache Hudi 对单个表提供 ACID 支持。我想引入多表 ACID 支持,为此我想将 LakeFS 与 Hudi 一起使用。
如果我理解正确的话,lakeFS 是一个与数据无关的解决方案,对数据本身一无所知。LakeFS 仅建立边界(版本控制)并以某种方式调节对数据的并发访问。
所以合理的问题是——如果 LakeFS 与数据无关,它如何支持合并操作?合并本身对 LakeFS 意味着什么?那里有可能发生合并冲突吗?
我正在尝试从 hudi 读取数据,但出现以下错误
Caused by: java.lang.ClassNotFoundException: Failed to find data source: hudi. Please find packages at http://spark.apache.org/third-party-projects.html
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令使用我的 jupyter 笔记本从 Hudi 读取数据
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder.config(
"spark.sql.catalogImplementation", "hive"
).config(
"spark.serializer", "org.apache.spark.serializer.KryoSerializer"
).enableHiveSupport().getOrCreate
import org.apache.hudi.DataSourceReadOptions
val hudiIncQueryDF = spark.read.format("hudi").load(
"path"
)
import org.apache.spark.sql.functions._
hudiIncQueryDF.filter(col("column_name")===lit("2022-06-01")).show(10,false)
Run Code Online (Sandbox Code Playgroud)
此 jupyter 笔记本是使用使用以下属性之一创建的集群打开的
--properties spark:spark.jars="gs://rdl-stage-lib/hudi-spark3-bundle_2.12-0.10.0.jar" \
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用同一集群的 Spark-Submit 运行作业时,出现上述错误。我还在我的作业属性中添加了spark.serializer=org.apache.spark.serializer.KryoSerializer。不确定是什么问题。
我使用 Spark 将 json 数据写入 s3。但是,我不断收到以下错误。我们使用 apache hudi 进行更新。这只发生在某些数据上,其他一切都正常。
Caused by: org.apache.parquet.io.ParquetDecodingException: Can not read value at 1 in block 0
in file s3a://<path to parquet file>
at org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.ja va:251)
App > at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:132)
App > at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:136)
App > at com.uber.hoodie.func.ParquetReaderIterator.hasNext(ParquetReaderIterator.java:45)
App > at com.uber.hoodie.common.util.queue.IteratorBasedQueueProducer.produce(IteratorBasedQueueProducer.java:44)
App > at com.uber.hoodie.common.util.queue.BoundedInMemoryExecutor.lambda$null$0(BoundedInMemoryExecutor.java:94)
App > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
App > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
App > ... 4 more
App > Caused by: java.lang.UnsupportedOperationException:org.apache.parquet.avro.AvroConverters$FieldLongConverter
Run Code Online (Sandbox Code Playgroud)
我无法理解。我跟踪了几个线程并在我的 Spark confs 中设置 --conf "spark.sql.parquet.writeLegacyFormat=true" 。但即使这样也无济于事。
有人在 Pyspark 环境中使用过 Apache Hudi 吗?如果可能的话,有可用的代码示例吗?
apache-hudi ×4
apache-spark ×2
data-lake ×1
delta-lake ×1
hoodie ×1
lakefs ×1
parquet ×1
pyspark ×1