_spark_metadata为什么所有镶木地板分区文件都在0内,但集群有2个工人?

问题描述 投票:0回答:1

我有一个小火花簇,一个主人和两个工人。我有一个Kafka流媒体应用程序,它从Kafka传输数据并以镶木地板格式和附加模式写入目录。

到目前为止,我能够从Kafka流中读取并使用以下关键线将其写入镶木地板文件。

val streamingQuery = mydf.writeStream.format("parquet").option("path", "/root/Desktop/sampleDir/myParquet").outputMode(OutputMode.Append).option("checkpointLocation", "/root/Desktop/sampleDir/myCheckPoint").start()

我检查了两个工人。创建了3-4个snappy镶木地板文件,文件名前缀为part-00006-XXX.snappy.parquet

但是当我尝试使用以下命令读取这个镶木地板文件时:

val dfP = sqlContext.read.parquet("/root/Desktop/sampleDir/myParquet")

它显示一些镶木地板分割文件的文件未找到例外。奇怪的是,这些文件已存在于其中一个工作节点中。

当在日志中进一步检查时,可以观察到spark正试图从一个工作节点获取所有镶木地板文件,并且由于并非所有镶木地板文件都存在于一个工作程序中,因此不会发现这些文件未找到在提到的镶木地板的路径。

我在流式查询或阅读数据时缺少一些关键步骤吗?

注意:我没有HADOOP基础设施。我只想使用文件系统。

apache-spark apache-kafka spark-streaming parquet
1个回答
1
投票

您需要一个共享文件系统。

Spark假定所有节点(驱动程序和工作程序)都可以看到相同的文件系统。如果您使用的是基本文件系统,则每个节点都会看到自己的文件系统,该文件系统与其他节点的文件系统不同。

HDFS是获取通用共享文件系统的一种方式,另一种方法是使用通用NFS安装(即将相同的远程文件系统从所有节点安装到同一路径)。其他共享文件系统也存在。

© www.soinside.com 2019 - 2024. All rights reserved.