在客户端模式下运行应用程序时,在哪里触发读取本地文件

时间:2018-07-05 09:18:22

标签: apache-spark

我正在部署一个火花 Standalone 集群。172.16.133.15是一台Master,其中两个工人全部在一台计算机上,并且已部署在ubuntu14.10中。

正如文档所说,我可以在“客户端模式”或“集群模式”下运行应用程序。

我的问题是:

1)在客户端模式下(在Windows计算机中)运行应用程序时在哪里加载文件?

ICellEditorValidator

运行代码时,出现异常:

SparkConf conf = new SparkConf().setAppName("Test")
                                .setMaster("172.16.133.15")
                                .set("spark.submit.deployMode", "client");
JavaSparkContext sc = new JavaSparkContext(conf);
String path = "file:///C:\\Users\\Me\\Desktop\\demo\\1530699196271";
JavaPairRDD<String, String> rdd = sc.wholeTextFiles(path);

 JavaPairRDD<String, String> transformed = rdd.mapToPair(tuple2 ->{
       String fname = tuple2._1();
       String content = tuple2._2();
       content = YUVSimpleTrans.transform(content);
       return new Tuple2<>(fname, content);
 });
 transformed.saveAsTextFile("file:///C:/Users/Me/Desktop/demo/out");

我不知道为什么要使用“ ls -F”。

因此,我在172.16.133.15中使用samba构建了一个cifs目录,并上载了目录“ / usr / local / test / 1530699196271”中的所有文件,并修改了“ path”变量,然后抛出异常:

Caused by: java.lang.RuntimeException: Error while running command to get 
file permissions : java.io.IOException: (null) entry in command string: null ls -F C:\Users\Me\Desktop\demo\1530699196271\split_0.yuv
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:762)
....
test.sparker4m.Sparker4mApplication.main(Sparker4mApplication.java:51)
...

我非常困惑“客户端模式”到底在做什么。


  1. 使用“ spark-submit”时,“集群模式”是否将jar文件上传到主服务器?

如果是真的,如果我运行我的代码,请在群集模式下使用“ spark-submit”(上传文件)  交给拥有两个工人的师父(172.16.133.15)可以工作吗?

1 个答案:

答案 0 :(得分:1)

从与其他任何模式完全相同的位置开始。它在每个节点(驱动程序节点和每个执行者节点)上解析。

因此,如果您使用本地路径,则每个执行程序都将尝试在给定路径中读取其自身文件系统上的本地文件。显然,您的Ubuntu节点上没有"file:///C:\\Users\\Me\\Desktop\\demo\\1530699196271"-因此出现了预期的故障。

要么使用分布式文件系统,要么使用同质集群,并在同一路径上的每个节点上输入副本(显然不适用于Windows和Linux混合节点)。