我正在尝试使用DCOS cli在mesos上启动一个火花流作业。我能开始工作了。我的程序期望将一个配置文件作为cli参数传递。如何使用dcos星火运行-提交args实现这一目标?
我试过了--文件http://server/path/to//file,希望它能下载文件,但这行不通。驱动程序启动,但由于缺少配置文件而失败。
我还试图将jar和config文件卷起来作为tar,并提交它。在Mesos日志中,我可以看到tar是被取下来的,并且是untar的。可以在工作目录中看到config和jar文件。但是ClassNotFoundException的工作失败了。我怀疑火花提交是如何开始的,有些地方不对劲。
dcos spark run --submit-args="--supervise --deploy-mode cluster --class package.name.classname http://file-server:8000/Streaming.tar.gz Streaming.conf"对如何进行有任何提示吗?另外,我可以在哪个日志文件中看到DCOS使用的基础submit命令?
发布于 2016-04-04 15:14:06
下面是一个命令的示例,为了使其工作,您应该启动该命令:
dcos spark run --submit-args='--conf spark.mesos.uris=https://s3-us-west-2.amazonaws.com/andrey-so-36323287/pi.conf --class JavaSparkPiConf https://s3-us-west-2.amazonaws.com/andrey-so-36323287/sparkPi_without_config_file.jar /mnt/mesos/sandbox/pi.conf'
哪里
--conf spark.mesos.uris=...:由Mesos启动驱动程序或执行器时将下载到沙箱中的URI的逗号分隔列表。这适用于粗粒度和细粒度模式。/mnt/mesos/sandbox/pi.conf主类作为第0参数接收到的下载文件的路径(请参阅下面的代码片段)。/mnt/mesos/sandbox/是容器内的一个标准路径,它被映射到协同响应的mesos任务沙箱。
public final class JavaSparkPiConf {
public static void main(String[] args) throws Exception {
SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi");
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
Scanner scanner = new Scanner(new FileInputStream(args[0]));
int slices;
if (scanner.hasNextInt()) {
slices = scanner.nextInt();
} else {
slices = 2;
}
int n = 100000 * slices;
List<Integer> l = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
l.add(i);
}
JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);
int count = dataSet.map(new Function<Integer, Integer>() {
@Override
public Integer call(Integer integer) {
double x = Math.random() * 2 - 1;
double y = Math.random() * 2 - 1;
return (x * x + y * y < 1) ? 1 : 0;
}
}).reduce(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer integer, Integer integer2) {
return integer + integer2;
}
});
System.out.println("Pi is roughly " + 4.0 * count / n);
jsc.stop();
}
}发布于 2016-03-31 17:10:02
Streaming.conf只是一个字符串,它将传递给您的驱动程序。你的司机一定能看见它。最简单的方法是将其放置在一个可访问的位置,指定您希望它通过spark.mesos.uris 1下载到沙箱中。您可以交替编写应用程序,以支持从远程位置读取,并在CLI上传递该位置。
--files用于将文件放在执行器上,但是您试图将一个文件传递给驱动程序,这样就不能工作了。
1
迈克尔·古梅尔特
中间层
https://stackoverflow.com/questions/36323287
复制相似问题