我在本地pc上配置一个主服务器,在virtualbox中配置一个工作节点,结果文件一直在工作节点创建,发送回主节点的实例,我想知道为什么会这样。
因为我的工作节点无法将结果发送回主节点?怎么验证?
我使用spark2.2。
我对master和worker节点使用相同的用户名。
我还配置了没有密码的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()
但为什么我必须在主节点和工作节点的同一位置预先发送文件?我现在不使用纱线或中号。
答案 0 :(得分:1)
您正在导出到本地文件系统,该系统告诉Spark将其写入运行代码的计算机的文件系统上。在worker上,这将是worker机器的文件系统。
如果您希望将数据存储在驱动程序的文件系统中(不是主数据库,您需要知道驱动程序在纱线群集上的运行位置),那么您需要收集RDD或数据框架并使用普通的IO代码将数据写入文件。
最简单的选择是使用分布式存储系统,例如HDFS(.save("hdfs://master:port/data/KPI/KpiDensite.csv")
)或导出到数据库(写入JDBC或使用nosql db);如果您正在以群集模式运行应用程序。