Mesos 集群上的 Spark - 任务失败

Spark on Mesos Cluster - Task Fails

我正在尝试 运行 Mesos 集群中的 Spark 应用程序,我有一个主服务器和一个从服务器。从服务器为 Mesos 分配了 8GB RAM。 master 正在 运行 连接 Spark Mesos Dispatcher。

我使用以下命令提交一个Spark应用程序(这是一个流式应用程序)。

spark-submit --master mesos://mesos-master:7077 --class com.verifone.media.ums.scheduling.spark.SparkBootstrapper --deploy-mode cluster scheduling-spark-0.5.jar

我看到以下输出表明提交成功。

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/09/01 12:52:38 INFO RestSubmissionClient: Submitting a request to launch an application in mesos://mesos-master:7077.
15/09/01 12:52:39 INFO RestSubmissionClient: Submission successfully created as driver-20150901072239-0002. Polling submission state...
15/09/01 12:52:39 INFO RestSubmissionClient: Submitting a request for the status of submission driver-20150901072239-0002 in mesos://mesos-master:7077.
15/09/01 12:52:39 INFO RestSubmissionClient: State of driver driver-20150901072239-0002 is now QUEUED.
15/09/01 12:52:40 INFO RestSubmissionClient: Server responded with CreateSubmissionResponse:
{
  "action" : "CreateSubmissionResponse",
  "serverSparkVersion" : "1.4.1",
  "submissionId" : "driver-20150901072239-0002",
  "success" : true
}

然而,这在 Mesos 中失败了,当我查看 Spark 集群时 UI,我看到以下消息。

task_id { value: "driver-20150901070957-0001" } state: TASK_FAILED message: "" slave_id { value: "20150831-082639-167881920-5050-4116-S6" } timestamp: 1.441091399975446E9 source: SOURCE_SLAVE reason: REASON_MEMORY_LIMIT 11: "5-^E7)N771:1\fm52"

似乎与内存有关,但我不确定是否必须在此处进行配置才能使其正常工作。

更新 我查看了 slave 中的 mesos 日志,我看到了以下消息。

E0901 07:56:26.086618  1284 fetcher.cpp:515] Failed to run mesos-fetcher: Failed to fetch all URIs for container '33183181-e91b-4012-9e21-baa37485e755' with exit status: 256

所以我认为这可能是因为 Spark Executor URL,所以我修改了 spark-submit 如下,并增加了 driver 和 slave 的内存,但我仍然看到同样的错误.

spark-submit \
    --master mesos://mesos-master:7077 \
    --class com.verifone.media.ums.scheduling.spark.SparkBootstrapper \
    --deploy-mode cluster \
    --driver-memory 1G \
    --executor-memory 4G \
    --conf spark.executor.uri=http://d3kbcqa49mib13.cloudfront.net/spark-1.4.1-bin-hadoop2.6.tgz \
    scheduling-spark-0.5.jar

更新 2

我按照@hartem 的建议(见评论)克服了这一点。任务现在 运行ning,但实际的 Spark 应用程序仍然不在集群中 运行。当我查看日志时,我看到以下内容。在最后一行之后,似乎 Spark 不再继续。

15/09/01 10:33:41 INFO SparkContext: Added JAR file:/tmp/mesos/slaves/20150831-082639-167881920-5050-4116-S8/frameworks/20150831-082639-167881920-5050-4116-0004/executors/driver-20150901103327-0002/runs/47339c12-fb78-43d6-bc8a-958dd94d0ccf/spark-1.4.1-bin-hadoop2.6/../scheduling-spark-0.5.jar at http://192.172.1.31:33666/jars/scheduling-spark-0.5.jar with timestamp 1441103621639
I0901 10:33:41.728466  4375 sched.cpp:157] Version: 0.23.0
I0901 10:33:41.730764  4383 sched.cpp:254] New master detected at master@192.172.1.10:7077
I0901 10:33:41.730908  4383 sched.cpp:264] No credentials provided. Attempting to register without authentication

能否请您在启动slave 之前执行export GLOG_v=1 并查看slave 日志中是否有任何有趣的内容?我还会在从属工作目录下查找 stdout 和 stderr 文件,看看它们是否包含任何线索。

我遇到了类似的问题,问题是 slave 找不到 运行 class 文件 (SparkPi) 所需的 jar。所以我给了它工作的 jar 的 http URL,它要求将 jar 放在分布式系统而不是本地文件系统上。

/home/centos/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
  --name SparkPiTestApp \
  --class org.apache.spark.examples.SparkPi \
  --master mesos://xxxxxxx:7077 \
  --deploy-mode cluster \
  --executor-memory 5G --total-executor-cores 30 \
  http://downloads.mesosphere.com.s3.amazonaws.com/assets/spark/spark-examples_2.10-1.4.0-SNAPSHOT.jar 100