- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在运行读取文件的 spark java 程序时遇到一些问题,进行一些操作,然后在给定路径生成输出文件。当主机和从机在同一台机器上时,一切正常。即:在独立集群模式下。但是当我在多机多节点集群设置中部署相同的程序时,问题就开始了。这意味着 master 运行在 x.x.x.102
而 slave 运行在 x.x.x.104
。主从都共享了他们的 SSH key 并且可以相互访问。
最初 slave 无法读取输入文件,因此我知道我需要在 sc.textFile()
之前调用 sc.addFile()
。那解决了问题。但现在我看到输出正在输出路径下的 _temporary 文件夹中的从机上生成。即:/tmp/emi/_temporary/0/task-xxxx/part-00000
在本地集群模式下,它工作正常并在 /tmp/emi/part-00000
中生成输出文件。
我开始知道我需要使用 SparkFiles.get()
。但我无法理解如何以及在何处使用此方法。
我现在还在用
DataFrame dataobj = ...
dataObj.javaRDD().coalesce(1).saveAsTextFile("file:/tmp/emi");
谁能告诉我如何调用 SparkFiles.get()
?
简而言之,我如何告诉 slave 在运行驱动程序的机器上创建输出文件?
请帮忙。
非常感谢。
最佳答案
这里没有什么意外的。每个worker分别写入自己的部分数据。使用 file
方案仅意味着从 worker 的角度来看,数据写入本地文件系统中的文件。
关于 SparkFiles
它不适用于这种特殊情况。 SparkFiles
可用于将公共(public)文件分发到不处理结果的工作机器。
如果出于某种原因你想在用于运行驱动程序代码的机器上执行写入,你必须首先将数据获取到驱动程序机器(collect
需要足够的内存来容纳所有数据或 toLocalIterator
,它当时收集分区并需要多个作业)和 use standard tools将结果写入本地文件系统。一般来说,虽然写给驱动程序不是一个好习惯,而且大多数时候根本没用。
关于apache-spark - 在 apache spark 的从机上生成输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223723/
我是一名优秀的程序员,十分优秀!