为何_spark_metadata的所有镶木地板分区文件都在0内,而群集中却有2个工作器?

时间:2018-09-04 09:32:40

标签: apache-spark apache-kafka spark-streaming parquet

我有一个小型火花簇,其中有一个主人和两个工人。我有一个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个活泼的镶木地板文件,文件名的前缀为part-00006-XXX.snappy.parquet

但是当我尝试使用以下命令读取此拼花地板文件时:

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

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

在日志中进一步检查时,可以观察到spark正在尝试仅从一个工作节点获取所有镶木文件,并且由于并非所有镶木文件都存在于一个工作器中,因此除了那些文件外,其他文件都被击中在上述的实木复合地板路径中找不到。

我在流查询中还是在读取数据时错过了一些关键步骤吗?

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

1 个答案:

答案 0 :(得分:1)

您需要共享文件系统。

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

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