我在本地pc机上配置了一个主节点,在virtualbox中配置了一个工作节点,结果文件是在工作节点上创建的,而不是发送回主节点,我想知道这是为什么。
因为我的工作节点无法将结果发送回主节点?如何验证?
我使用spark2.2。我对主节点和工作节点使用相同的用户名。我还配置了ssh而不使用密码。
我尝试了——部署模式客户机和——部署模式集群
我试过一次,然后切换了主节点/工作节点,得到了相同的结果。
val result = joined.distinct()
result.write.mode("overwrite").format("csv")
.option("header", "true").option("delimiter", ";")
.save("file:///home/data/KPI/KpiDensite.csv")
另外,对于输入文件,我的加载方式如下:
val commerce = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true")
.option("delimiter", "|").load("file:///home/data/equip-serv-commerce-infra-2016.csv").distinct()
但是为什么我必须同时在主节点和工作节点的同一位置上呈现文件呢?我现在不使用Yarn或细棉纱。
1条答案
按热度按时间sqxo8psd1#
您正在导出到一个本地文件系统,它告诉spark在运行代码的机器的文件系统上编写它。在worker上,这将是worker机器的文件系统。
如果您想将数据存储在驱动程序的文件系统中(不是主驱动程序,您需要知道驱动程序在您的yarn集群上运行的位置),那么您需要收集rdd或Dataframe,并使用普通io代码将数据写入文件。
然而,最简单的选择是使用分布式存储系统,如hdfs(
.save("hdfs://master:port/data/KPI/KpiDensite.csv")
)或导出到数据库(写入jdbc或使用nosqldb);如果您在群集模式下运行应用程序。