application_(state:ACCEPTED)的应用程序报告永远不会结束Spark Submit(在YARN上使用Spark 1.2.0)

时间:2015-06-14 11:35:35

标签: apache-spark yarn amazon-emr amazon-kinesis

我正在运行kinesis plus spark应用程序 https://spark.apache.org/docs/1.2.0/streaming-kinesis-integration.html

我的运行方式如下

ec2实例上的

命令:

 ./spark/bin/spark-submit --class org.apache.spark.examples.streaming.myclassname --master yarn-cluster --num-executors 2 --driver-memory 1g --executor-memory 1g --executor-cores 1  /home/hadoop/test.jar 

我在EMR上安装了火花。

EMR details
Master instance group - 1   Running MASTER  m1.medium   
1

Core instance group - 2 Running CORE    m1.medium

我越来越低于INFO,它永远不会结束。

15/06/14 11:33:23 INFO yarn.Client: Requesting a new application from cluster with 2 NodeManagers
15/06/14 11:33:23 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (2048 MB per container)
15/06/14 11:33:23 INFO yarn.Client: Will allocate AM container, with 1408 MB memory including 384 MB overhead
15/06/14 11:33:23 INFO yarn.Client: Setting up container launch context for our AM
15/06/14 11:33:23 INFO yarn.Client: Preparing resources for our AM container
15/06/14 11:33:24 INFO yarn.Client: Uploading resource file:/home/hadoop/.versions/spark-1.3.1.e/lib/spark-assembly-1.3.1-hadoop2.4.0.jar -> hdfs://172.31.13.68:9000/user/hadoop/.sparkStaging/application_1434263747091_0023/spark-assembly-1.3.1-hadoop2.4.0.jar
15/06/14 11:33:29 INFO yarn.Client: Uploading resource file:/home/hadoop/test.jar -> hdfs://172.31.13.68:9000/user/hadoop/.sparkStaging/application_1434263747091_0023/test.jar
15/06/14 11:33:31 INFO yarn.Client: Setting up the launch environment for our AM container
15/06/14 11:33:31 INFO spark.SecurityManager: Changing view acls to: hadoop
15/06/14 11:33:31 INFO spark.SecurityManager: Changing modify acls to: hadoop
15/06/14 11:33:31 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/14 11:33:31 INFO yarn.Client: Submitting application 23 to ResourceManager
15/06/14 11:33:31 INFO impl.YarnClientImpl: Submitted application application_1434263747091_0023
15/06/14 11:33:32 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:32 INFO yarn.Client:
         client token: N/A
         diagnostics: N/A
         ApplicationMaster host: N/A
         ApplicationMaster RPC port: -1
         queue: default
         start time: 1434281611893
         final status: UNDEFINED
         tracking URL: http://172.31.13.68:9046/proxy/application_1434263747091_0023/
         user: hadoop
15/06/14 11:33:33 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:34 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:35 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:36 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:37 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:38 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:39 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:40 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:41 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)

有人可以告诉我为什么它不起作用吗?

13 个答案:

答案 0 :(得分:18)

当多个用户尝试同时在我们的群集上运行时,我遇到了这个问题。解决方法是更改​​调度程序的设置。

在文件/etc/hadoop/conf/capacity-scheduler.xml中,我们将属性yarn.scheduler.capacity.maximum-am-resource-percent0.1更改为0.5

更改此设置会增加可用于分配给应用程序主服务器的资源比例,从而增加可能一次运行的主服务器数量,从而增加可能的并发应用程序数量。

答案 1 :(得分:12)

在这种情况下我遇到了这个错误:

  1. MASTER =纱线(或纱线客户)
  2. spark-submit在集群外部的计算机上运行,​​并且没有从集群到它的路由,因为它被路由器隐藏了
  3. 记录container_1453825604297_0001_02_000001(来自ResourceManager Web UI):

    16/01/26 08:30:38 INFO yarn.ApplicationMaster: Waiting for Spark driver to be reachable.
    16/01/26 08:31:41 ERROR yarn.ApplicationMaster: Failed to connect to driver at 192.168.1.180:33074, retrying ...
    16/01/26 08:32:44 ERROR yarn.ApplicationMaster: Failed to connect to driver at 192.168.1.180:33074, retrying ...
    16/01/26 08:32:45 ERROR yarn.ApplicationMaster: Uncaught exception: 
    org.apache.spark.SparkException: Failed to connect to driver!
        at org.apache.spark.deploy.yarn.ApplicationMaster.waitForSparkDriver(ApplicationMaster.scala:484) 
    

    我使用纱线群集模式解决它:MASTER = yarn-cluster。

    在以类似方式配置的另一台计算机上,但是可以从群集中访问IP,纱线客户端和纱线群集都可以工作。

    其他人可能会因为不同的原因而遇到此错误,我的观点是检查错误日志(在终端中看不到,但在这种情况下是ResourceManager Web UI)几乎总是有帮助。

答案 2 :(得分:6)

这表明YARN无法为您提交的新App分配资源。尝试减少您要求的容器的资源(请参阅here),或者在不太繁忙的群集上尝试此操作。

要尝试的另一件事是检查YARN是否可以作为服务正常运行:

sudo service hadoop-yarn-nodemanager status
sudo service hadoop-yarn-resourcemanager status

答案 3 :(得分:4)

我们可以通过三种方法来解决此问题。

  1. 检查机器上的火花过程并将其杀死。
  2. ps aux | grep spark
    

    使用spark进程获取所有进程ID并将其终止,例如

    sudo kill -9 4567 7865
    
    1. 检查群集上运行的spark应用程序的数量。
    2. 要检查这一点,请执行

      yarn application -list
      

      您将得到类似于此的输出:

      Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):1
                      Application-Id      Application-Name        Application-Type          User       Queue               State         Final-State         Progress                        Tracking-URL
      application_1496703976885_00567       ta da                SPARK        cloudera       default             RUNNING           UNDEFINED              20%             http://10.0.52.156:9090
      

      检查应用程序ID,如果它们超过1或超过2,则将其终止。您的群集无法同时运行2个以上的spark应用程序。我不是100%肯定这一点,但在集群上,如果你运行两个以上的spark应用程序,它将开始抱怨。所以,杀了他们 这样做是为了杀死他们:

      yarn application -kill application_1496703976885_00567
      
      1. 检查您的spark配置参数。 例如,如果您在spark应用程序上设置了更多执行程序内存或驱动程序内存或执行程序数,这可能也会导致问题。因此,减少它们中的任何一个并运行你的spark应用程序,这可能会解决它。

答案 4 :(得分:3)

我有一个资源有限的小型集群(每个节点约3GB)。通过将最小内存分配更改为足够低的数字来解决此问题。

自:

yarn.scheduler.minimum-allocation-mb: 1g
yarn.scheduler.increment-allocation-mb: 512m

要:

yarn.scheduler.minimum-allocation-mb: 256m
yarn.scheduler.increment-allocation-mb: 256m

答案 5 :(得分:2)

在我的情况下,我看到一些旧的spark进程(由Ctrl + Z停止)仍在运行,他们的AppMaster(驱动程序)可能仍然占用内存。因此,来自新spark命令的新AppMaster可能无限期地等待由YarnScheduler注册,因为spark.driver.memory不能在各自的核心节点中分配。当Max资源分配为true且驱动程序设置为使用可用于核心节点的最大资源时,也会发生这种情况。

所以,我确定了所有那些陈旧的火花客户端进程并杀死它们(可能已经杀死了它们的驱动程序并释放了内存)。

ps -aux | grep spark

hadoop    3435  1.4  3.0 3984908 473520 pts/1  Tl   Feb17   0:12  .. org.apache.spark.deploy.SparkSubmit --conf spark.driver.memory=1G --class org.apache.spark.examples.SparkPi /usr/lib/spark/lib/spark-examples.jar 10

hadoop   32630  0.9  3.0 3984908 468928 pts/1  Tl   Feb17   0:14 .. org.apache.spark.deploy.SparkSubmit --conf spark.driver.memory=1G --class org.apache.spark.examples.SparkPi /usr/lib/spark/lib/spark-examples.jar 1000

    kill -9 3435 32630

之后我没有看到这些消息。

答案 6 :(得分:1)

我使用CDH 5.4进行了略微不同的设置。我认为我的设置上的这个问题的原因是由于错误(文件已经存在等)而陷入困境,因为这发生在我的代码错误的其他部分出来之后并尝试修复并再次启动它。

我可以通过在cloudera管理器中重新启动集群上的所有服务来解决这个问题,所以我同意之前的答案,可能是因为资源被分配给错误输出的内容而你需要回收那些能够再次运行的资源,或者以不同的方式分配它们。

e.g。我的群集有4个执行器可用。在一个进程的SparkConf中,我将spark.executor.instances设置为4.当该进程仍在运行时,由于某种原因可能挂起,我启动另一个工作(以相同的方式,或使用spark-submit),使用spark。 executor.instances设置为1(" - num-executors 1"如果使用spark-submit)。我只有4个,并且4个被分配给前面的进程,所以这个要求1个执行器的那个必须排队等候。

答案 7 :(得分:1)

在一个例子中,我遇到了这个问题,因为我要求的资源太多了。这是在一个小型独立集群上。原始命令是

spark-submit --driver-memory 4G --executor-memory 7G -class "my.class" --master yarn --deploy-mode cluster --conf spark.yarn.executor.memoryOverhead my.jar

我成功地超越了“接受”'进入'跑步'改为

spark-submit --driver-memory 1G --executor-memory 3G -class "my.class" --master yarn --deploy-mode cluster --conf spark.yarn.executor.memoryOverhead my.jar

在其他情况下,由于编写代码的方式,我遇到了这个问题。我们在使用它的类中实例化了spark上下文,并且它没有被关闭。我们通过首先实例化上下文,将其传递给数据并行化的类等,然后关闭调用者类中的上下文(sc.close())来解决问题。

答案 8 :(得分:1)

我在他们的HDinsight火花集群中遇到了同样的问题MS Azure集群 终于发现问题是集群无法与驱动程序通话。 我假设您在提交作业时使用了客户端模式,因为您可以提供此调试日志。

为什么火花执行器必须与驱动程序通信,并且TCP连接必须是双向的。因此,如果您的驱动程序在通过主机名或IP无法访问的VM(ec2实例)中运行(您必须在spark conf中指定,默认为hostname),您的状态将永远被接受。

答案 9 :(得分:0)

使用yarn-cluster运行时,所有应用程序日志记录和标准输出都将位于指定的纱线应用程序主文件中,并且不会显示为spark-submit。流式传输应用程序通常也不会退出。检查Hadoop资源管理器Web界面,查看可从Hadoop ui获得的Spark Web UI和日志。

答案 10 :(得分:0)

我在带有火花1.4和纱线的本地hadoop集群上遇到了同样的问题,试图运行spark-shell。它有足够的资源。

在群集上的交互式lsf作业中运行相同的操作有什么帮助。 因此,从头节点运行纱线可能存在一些网络限制......

答案 11 :(得分:0)

当我尝试执行pyspark shell时,我在clouera quickstart VM中遇到了同样的问题。当我看到资源管理器中的作业日志时,我看到了

17/02/18 22:20:53 ERROR yarn.ApplicationMaster: Failed to connect to driver at RM IP. 

这意味着作业无法连接到RM(资源管理器),因为默认情况下pyspark尝试在cloudera VM中以纱线模式启动。

pyspark --master local 

为我工作。甚至开始RM也解决了这个问题。

谢谢

答案 12 :(得分:0)

遇到类似的问题

像其他答案一样,这是资源可用性问题

在我的情况下,我正在做一个etl流程,每次都丢弃前一次运行中的旧数据。但是,新删除的数据已存储在控制用户的/user/myuser/.Trash文件夹中。查看Ambari仪表板,我可以看到整个HDFS磁盘使用率接近容量,这导致了资源问题。

因此,在这种情况下,请使用-skipTrash选项来hadoop fs -rm ...旧数据文件(否则将占用垃圾桶中的空间,大约等于etl存储目录中存储的所有数据的大小(有效地增加了一倍)总计应用程序使用的空间并导致资源问题)。