복붙노트

[HADOOP] 원사 클러스터에서 Spark 작업 제출

HADOOP

원사 클러스터에서 Spark 작업 제출

나는 다음과 같은 문제로 2 일 이상 고생하고있다.

Scala에서 기본 "HelloWorld"스크립트를 작성했습니다.

object Hello extends App{
  println("WELCOME TO A FIRST TEST WITH SCALA COMPILED WITH SBT counting fr. 1:15 with sleep 1")
  val data = 1 to 15

  for( a <- data ){
    println( "Value of a: " + a )
    Thread sleep 1000
  }

그런 다음 JAR 컴파일 버전을 얻기 위해 SBT로 컴파일했습니다.

그런 다음 HDP 2.2.4.2를 사용하여 클러스터 (가상 Linux 시스템에서 실행되는 Hortonworks 샌드 박스)의 모든 것을 전송했습니다.

실제로 실 클라이언트를 사용하여 클러스터에서 다음 명령으로 작업을 실행할 수 있습니다.

spark-submit --verbose --master yarn-client --class Hello SCALA/hello.jar

그러나 다음 명령으로 원사 클러스터에서 동일한 helloWorld 작업을 제출하려고 시도하는 동안

spark-submit --verbose --master yarn-cluster--class Hello SCALA/hello.jar

작업이 처음 제대로 실행되면 (출력이 예상 한 것이므로 0을 종료 함) 작업을 다음과 같이 중지하십시오.

15/06/05 15:52:09 INFO Client: Application report for application_1433491352951_0010 (state: FAILED)

15/06/05 15:52:09 INFO Client:
         client token: N/A
         diagnostics: Application application_1433491352951_0010 failed 2 times due to AM Container for appattempt_1433491352951_0010_000002 exited with  exitCode: 0
For more detailed output, check application tracking page:http://sandbox.hortonworks.com:8088/proxy/application_1433491352951_0010/Then, click on links to logs of each attempt.
Diagnostics: Failing this attempt. Failing the application.
         ApplicationMaster host: N/A
         ApplicationMaster RPC port: -1
         queue: default
         start time: 1433519471297
         final status: FAILED
         tracking URL: http://sandbox.hortonworks.com:8088/cluster/app/application_1433491352951_0010
         user: root
Error: application failed with exception
org.apache.spark.SparkException: Application finished with failed status
        at org.apache.spark.deploy.yarn.ClientBase$class.run(ClientBase.scala:522)
        at org.apache.spark.deploy.yarn.Client.run(Client.scala:35)
        at org.apache.spark.deploy.yarn.Client$.main(Client.scala:139)
        at org.apache.spark.deploy.yarn.Client.main(Client.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:367)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:77)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

그런 다음 다음 명령 줄을 사용하여 로그를 확인하기로 결정했습니다.

yarn logs -applicationId application_1433491352951_00010

그리고 나는 얻는다 :

15/06/05 15:56:33 INFO impl.TimelineClientImpl: Timeline service address: http://sandbox.hortonworks.com:8188/ws/v1/timeline/
15/06/05 15:56:33 INFO client.RMProxy: Connecting to ResourceManager at sandbox.hortonworks.com/192.168.182.129:8050
15/06/05 15:56:35 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
15/06/05 15:56:35 INFO compress.CodecPool: Got brand-new decompressor [.deflate]


Container: container_e08_1433491352951_0010_01_000001 on sandbox.hortonworks.com_45454
========================================================================================
LogType:stderr
Log Upload Time:Fri Jun 05 15:52:10 +0000 2015
LogLength:2050
Log Contents:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/hadoop/yarn/local/usercache/root/filecache/28/spark-assembly-1.2.1.2.2.4.2-2-hadoop2.6.0.2.2.4.2-2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hdp/2.2.4.2-2/hadoop/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/hadoop/yarn/local/usercache/root/filecache/29/hello.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
15/06/05 15:51:18 INFO yarn.ApplicationMaster: Registered signal handlers for [TERM, HUP, INT]
15/06/05 15:51:20 INFO yarn.ApplicationMaster: ApplicationAttemptId: appattempt_1433491352951_0010_000001
15/06/05 15:51:21 INFO spark.SecurityManager: Changing view acls to: yarn,root
15/06/05 15:51:21 INFO spark.SecurityManager: Changing modify acls to: yarn,root
15/06/05 15:51:21 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(yarn, root); users with modify permissions: Set(yarn, root)
15/06/05 15:51:21 INFO yarn.ApplicationMaster: Starting the user JAR in a separate Thread
15/06/05 15:51:21 INFO yarn.ApplicationMaster: Waiting for spark context initialization
15/06/05 15:51:21 INFO yarn.ApplicationMaster: Waiting for spark context initialization ... 0
15/06/05 15:51:31 INFO yarn.ApplicationMaster: Waiting for spark context initialization ... 1
15/06/05 15:51:36 INFO yarn.ApplicationMaster: Final app status: SUCCEEDED, exitCode: 0
15/06/05 15:51:41 ERROR yarn.ApplicationMaster: SparkContext did not initialize after waiting for 100000 ms. Please check earlier log output for errors. Failing the application.
15/06/05 15:51:41 INFO yarn.ApplicationMaster: Unregistering ApplicationMaster with SUCCEEDED
15/06/05 15:51:41 INFO yarn.ApplicationMaster: Deleting staging directory .sparkStaging/application_1433491352951_0010

LogType:stdout
Log Upload Time:Fri Jun 05 15:52:10 +0000 2015
LogLength:300
Log Contents:
WELCOME TO A FIRST TEST WITH SCALA COMPILED WITH SBT counting fr. 1:15 with sleep 1
Value of a: 1
Value of a: 2
Value of a: 3
Value of a: 4
Value of a: 5
Value of a: 6
Value of a: 7
Value of a: 8
Value of a: 9
Value of a: 10
Value of a: 11
Value of a: 12
Value of a: 13
Value of a: 14
Value of a: 15



Container: container_e08_1433491352951_0010_02_000001 on sandbox.hortonworks.com_45454
========================================================================================
LogType:stderr
Log Upload Time:Fri Jun 05 15:52:10 +0000 2015
LogLength:2050
Log Contents:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/hadoop/yarn/local/usercache/root/filecache/28/spark-assembly-1.2.1.2.2.4.2-2-hadoop2.6.0.2.2.4.2-2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hdp/2.2.4.2-2/hadoop/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/hadoop/yarn/local/usercache/root/filecache/29/hello.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
15/06/05 15:51:45 INFO yarn.ApplicationMaster: Registered signal handlers for [TERM, HUP, INT]
15/06/05 15:51:47 INFO yarn.ApplicationMaster: ApplicationAttemptId: appattempt_1433491352951_0010_000002
15/06/05 15:51:48 INFO spark.SecurityManager: Changing view acls to: yarn,root
15/06/05 15:51:48 INFO spark.SecurityManager: Changing modify acls to: yarn,root
15/06/05 15:51:48 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(yarn, root); users with modify permissions: Set(yarn, root)
15/06/05 15:51:48 INFO yarn.ApplicationMaster: Starting the user JAR in a separate Thread
15/06/05 15:51:48 INFO yarn.ApplicationMaster: Waiting for spark context initialization
15/06/05 15:51:48 INFO yarn.ApplicationMaster: Waiting for spark context initialization ... 0
15/06/05 15:51:58 INFO yarn.ApplicationMaster: Waiting for spark context initialization ... 1
15/06/05 15:52:03 INFO yarn.ApplicationMaster: Final app status: SUCCEEDED, exitCode: 0
15/06/05 15:52:08 ERROR yarn.ApplicationMaster: SparkContext did not initialize after waiting for 100000 ms. Please check earlier log output for errors. Failing the application.
15/06/05 15:52:08 INFO yarn.ApplicationMaster: Unregistering ApplicationMaster with SUCCEEDED
15/06/05 15:52:08 INFO yarn.ApplicationMaster: Deleting staging directory .sparkStaging/application_1433491352951_0010

LogType:stdout
Log Upload Time:Fri Jun 05 15:52:10 +0000 2015
LogLength:300
Log Contents:
WELCOME TO A FIRST TEST WITH SCALA COMPILED WITH SBT counting fr. 1:15 with sleep 1
Value of a: 1
Value of a: 2
Value of a: 3
Value of a: 4
Value of a: 5
Value of a: 6
Value of a: 7
Value of a: 8
Value of a: 9
Value of a: 10
Value of a: 11
Value of a: 12
Value of a: 13
Value of a: 14
Value of a: 15

누군가가 제안하고 다시 컴파일 한 후 다시 시도한 HelloWorld 프로젝트를 가져 왔습니다. 이제 다른 문제가 발생했습니다. 다음 명령으로 작업을 제출할 때 :

spark-submit --verbose --master yarn-cluster SCALA/hello.jar

다음 주석이 무한대로 실행됩니다.

15/06/08 16:42:35 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

프로그램이 샌드 박스의 Hadoop 클러스터에서 실행되어야하는 동안 서버가 응답하지 않는 것처럼 보이기 때문에 실제로 이해하지 못합니다.

해결법

  1. ==============================

    1.제 경우에는 다음과 같이 사용했습니다 :

    제 경우에는 다음과 같이 사용했습니다 :

    val config = new SparkConf()
    config.setMaster("local[*]") 
    

    다음을 사용하여 작업을 제출했습니다.

    spark-submit --master yarn-cluster ..
    

    코드에서 config.setMaster를 제거하면 문제가 해결되었습니다.

  2. ==============================

    2.다음과 같이 응용 프로그램의 마스터를 "yarn-cluster"로 설정해야합니다.

    다음과 같이 응용 프로그램의 마스터를 "yarn-cluster"로 설정해야합니다.

    import org.apache.spark.SparkContext
    import org.apache.spark.SparkContext._
    import org.apache.spark.SparkConf
    
    class Hello extends App {
        val config = new SparkConf().setAppName("HelloWorld")
        config.setMaster("yarn-cluster");
        val context = new SparkContext(config);
    
        println("Application executed!")
    }
    
  3. ==============================

    3.코드에서 스파크 컨텍스트 초기화를 볼 수 없습니다. 따라서 항아리를 spark-submit으로 제출하면 클래스 경로를 설정하는 것입니다. 당신은 스파크를 사용하지 않고 코드를 작성합니다. 그러나 컨텍스트를 만들고 클러스터 모드에서 실행하려면 코드에서 마스터를 설정하지 마십시오. 작동합니다. 예를 들어 : val config = new SparkConf (). setAppName ( "HelloWorld")  val context = 새로운 SparkContext (설정); 그런 다음 spark-submit --verbose --master yarn-cluster--class Hello SCALA / hello.jar를 사용하여 제출하십시오.

    코드에서 스파크 컨텍스트 초기화를 볼 수 없습니다. 따라서 항아리를 spark-submit으로 제출하면 클래스 경로를 설정하는 것입니다. 당신은 스파크를 사용하지 않고 코드를 작성합니다. 그러나 컨텍스트를 만들고 클러스터 모드에서 실행하려면 코드에서 마스터를 설정하지 마십시오. 작동합니다. 예를 들어 : val config = new SparkConf (). setAppName ( "HelloWorld")  val context = 새로운 SparkContext (설정); 그런 다음 spark-submit --verbose --master yarn-cluster--class Hello SCALA / hello.jar를 사용하여 제출하십시오.

  4. from https://stackoverflow.com/questions/30670933/submit-spark-job-on-yarn-cluster by cc-by-sa and MIT license