提交Spark作业 - 等待(TaskSchedulerImpl:不接受初始作业)

时间:2016-07-13 19:06:45

标签: api apache-spark amazon-ec2

用于提交作业的API调用。响应状态 - 正在运行

在群集用户界面 -

  

工人(奴隶) - 工人-20160712083825-172.31.17.189-59433是活着的

     

核心1中的2个使用

     

内存使用6个中的1Gb

运行应用程序

  

app-20160713130056-0020 - 等待5小时后

     

核心 - 无限

申请的职位描述

活跃舞台

  

在/root/wordcount.py:23上的reduceByKey

待定阶段

  

在/root/wordcount.py:26采取订单

运行驱动程序 -

stderr log page for driver-20160713130051-0025 

WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

根据Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources 奴隶还没有开始 - 因此它没有资源。

但在我的情况下 - 奴隶1正在工作

根据Unable to Execute More than a spark Job "Initial job has not accepted any resources" 我使用的是deploy-mode = cluster(不是客户端)因为我有1个master 1 slave,并且通过Postman / anywhere调用Submit API

群集还有可用的核心,RAM,内存 - 静止作业会引发错误 由UI传达

根据TaskSchedulerImpl: Initial job has not accepted any resources; 我分配了

~/spark-1.5.0/conf/spark-env.sh

Spark环境变量

SPARK_WORKER_INSTANCES=1
SPARK_WORKER_MEMORY=1000m
SPARK_WORKER_CORES=2

复制那些跨越奴隶的人

sudo /root/spark-ec2/copy-dir /root/spark/conf/spark-env.sh

上述问题答案中的所有案例均适用仍未找到解决方案。因此,因为我正在使用API​​和Apache SPark - 可能需要一些其他帮助。

  

2016年7月18日编辑

     

Wordcount.py - 我的PySpark应用程序代码 -

from pyspark import SparkContext, SparkConf

logFile = "/user/root/In/a.txt"

conf = (SparkConf().set("num-executors", "1"))

sc = SparkContext(master = "spark://ec2-54-209-108-127.compute-1.amazonaws.com:7077", appName = "MyApp", conf = conf)
print("in here")
lines = sc.textFile(logFile)
print("text read")
c = lines.count()
print("lines counted")

错误

Starting job: count at /root/wordcount.py:11
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Got job 0 (count at /root/wordcount.py:11) with 2 output partitions
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Final stage: ResultStage 0 (count at /root/wordcount.py:11)
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Parents of final stage: List()
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Missing parents: List()
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Submitting ResultStage 0 (PythonRDD[2] at count at /root/wordcount.py:11), which has no missing parents
16/07/18 07:46:39 INFO storage.MemoryStore: Block broadcast_1 stored as values in memory (estimated size 5.6 KB, free 56.2 KB)
16/07/18 07:46:39 INFO storage.MemoryStore: Block broadcast_1_piece0 stored as bytes in memory (estimated size 3.4 KB, free 59.7 KB)
16/07/18 07:46:39 INFO storage.BlockManagerInfo: Added broadcast_1_piece0 in memory on 172.31.17.189:43684 (size: 3.4 KB, free: 511.5 MB)
16/07/18 07:46:39 INFO spark.SparkContext: Created broadcast 1 from broadcast at DAGScheduler.scala:1006
16/07/18 07:46:39 INFO scheduler.DAGScheduler: Submitting 2 missing tasks from ResultStage 0 (PythonRDD[2] at count at /root/wordcount.py:11)
16/07/18 07:46:39 INFO scheduler.TaskSchedulerImpl: Adding task set 0.0 with 2 tasks
16/07/18 07:46:54 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

根据Spark UI showing 0 cores even when setting cores in App

Spark WebUI声明使用零核心并且无限期地等待没有任务运行。该应用程序在运行时或核心期间也使用NO MEMORY,并在启动时立即达到等待状态

Spark版本1.6.1 Ubuntu的 亚马逊EC2

2 个答案:

答案 0 :(得分:1)

我也有同样的问题。以下是我发表的评论。

  

1:17:46 WARN TaskSchedulerImpl:初始工作没有接受任何   资源;检查群集UI以确保已注册工作人员   并有足够的资源

我注意到它只发生在scala shell的第一次查询中,我运行从hdfs获取数据的东西。

当问题发生时,webui说明没有任何正在运行的应用程序。

URL: spark://spark1:7077
REST URL: spark://spark1:6066 (cluster mode)
Alive Workers: 4
Cores in use: 26 Total, 26 Used
Memory in use: 52.7 GB Total, 4.0 GB Used
Applications: 1 Running, 0 Completed
Drivers: 0 Running, 0 Completed
Status: ALIVE

似乎某些事情无法启动,我无法确切地知道它是什么。

但是,第二次重新启动群集会将Applications值设置为1 一切都运作良好。

<div>
  <ul>
     <li>John</li>
     <li>sara</li>
     <li>mack</li>
     <li>jane<li>
</div>

我还在调查,这个快速的解决方法可以节省时间直到最终解决方案。

答案 1 :(得分:0)

您可以在类似的问题Apache Spark on Mesos: Initial job has not accepted any resources中查看我的答案:

  

虽然大多数其他答案都侧重于火花从站上的资源分配(内核,内存),但我想强调防火墙可能会导致完全相同的问题,尤其是当您在云平台上运行spark时。

     

如果您可以在Web UI中找到火花从属,您可能已经打开了标准端口8080,8081,7077,4040。但是,当您实际运行作业时,它使用SPARK_WORKER_PORT,spark.driver.port和spark。 blockManager.port,默认情况下是随机分配的。如果您的防火墙阻止了这些端口,则主服务器无法从从服务器检索任何特定于作业的响应并返回错误。

     

您可以通过打开所有端口来运行快速测试,并查看从属设备是否接受作业。