spark流集群模式:java.lang.runtimeexception:找不到stream jar

vcudknz3  于 2021-06-26  发布在  Mesos
关注(0)|答案(0)|浏览(274)

目标:

在mesos上以集群模式运行spark流应用程序,使用hdfs和检查点。

群集:

有3个从属的Mesos星团。
一个调度器连接到集群。
一个外部hdfs和安装在每个从机上的所有二进制文件。
版本:mesos 1.2.0 spark 2.0.1 hdfs 2.7
应用程序源:application.jar、检查点和存储在hdfs上的spark二进制文件。

上下文:

使用以下配置启动应用程序:
“spark\u executor\u uri”:hdfs://hdfshost/spark.tgz
“spark.submit.deploymode”:“集群”
“spark.master”:spark://dispatcherhost"
“spark.mesos.rough”:“真”
mainclass:“enterprise.com.class”
jar:“hdfs://hdfshost/application.jar"
首次启动(无检查点数据):工作
一个驱动程序以一个新的mesos框架id和应用程序的名称开始。
一个(或多个)任务正在另一个或同一个从机上运行。
已在hdfs中正确创建检查点。
第二次启动(使用检查点数据):不工作
一个驱动程序以一个新的mesos框架id和应用程序的名称开始。
一个(或多个)任务正在另一个或同一个从机上运行。
如果驱动程序与存储的chekpoint不在同一台从机上启动,则会出现以下异常:

错误消息:

java.lang.RuntimeException: Stream '/jars/application.jar' was not found.
at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:222)
...

发生此错误的原因是,负责向执行者公开应用程序jar的驱动程序正试图从检查点(从hdfs加载并存储在mesos workdir path=sandbox中)存储的jar路径公开它,而该检查点在当前节点中不存在。

Downloading resource with Hadoop client from 'hdfs://*hdfsHost*/application.jar' to '/var/lib/mesos/slaves/<ID>/frameworks/<frameworkID>/executors/<driverID>/runs/<runID>/application.jar'
...
INFO SparkContext: Added JAR file:/var/lib/mesos/slaves/<checkpointedID>/frameworks/<checkpointedFrameworkID>/executors/<checkpointedDriverID>/runs/<runID>/spark/../application.jar at spark://<driverHost>/jars/application.jar with timestamp 1498051933921

我被这种行为弄糊涂了。

问题

a) 为什么spark在使用hdfs时使用rpc接口将应用程序jar公开给执行器,而不是直接从源代码加载执行器?
b) 为什么检查点存储mesos应用程序框架路径并尝试恢复它?
c) 如何解决这个问题并在mesos上运行流应用程序,在多个从属服务器上使用hdfs和checkpoint?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题