복붙노트

[HADOOP] Apache Spark YARN 모드 시작에 너무 오래 걸립니다 (10 초 이상).

HADOOP

Apache Spark YARN 모드 시작에 너무 오래 걸립니다 (10 초 이상).

YARN 클라이언트 또는 YARN 클러스터 모드로 스파크 애플리케이션을 실행 중입니다.

그러나 시작하는 데 너무 오래 걸리는 것으로 보입니다.

스파크 컨텍스트를 초기화하는 데 10 초 이상 걸립니다.

이게 정상인가? 아니면 최적화 할 수 있습니까?

환경은 다음과 같습니다.

다음은 응용 프로그램 로그의 시작 부분입니다. (일부 개인 정보가 수정 됨)

'Main : Initializing context'는 첫 번째 줄에서 'MainProcessor : 이전 출력 파일 삭제'는 마지막 줄에서 응용 프로그램의 로그입니다. 그 사이의 다른 것들은 스파크 그 자체입니다. 이 로그가 표시된 후에 응용 프로그램 논리가 실행됩니다.

15/05/07 09:18:31 INFO Main: Initializing context
15/05/07 09:18:31 INFO SparkContext: Running Spark version 1.3.1
15/05/07 09:18:31 INFO SecurityManager: Changing view acls to: myuser,myapp
15/05/07 09:18:31 INFO SecurityManager: Changing modify acls to: myuser,myapp
15/05/07 09:18:31 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(myuser, myapp); users with modify permissions: Set(myuser, myapp)
15/05/07 09:18:31 INFO Slf4jLogger: Slf4jLogger started
15/05/07 09:18:31 INFO Remoting: Starting remoting
15/05/07 09:18:31 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@mymachine:54449]
15/05/07 09:18:31 INFO Utils: Successfully started service 'sparkDriver' on port 54449.
15/05/07 09:18:31 INFO SparkEnv: Registering MapOutputTracker
15/05/07 09:18:32 INFO SparkEnv: Registering BlockManagerMaster
15/05/07 09:18:32 INFO DiskBlockManager: Created local directory at C:\Users\myuser\AppData\Local\Temp\spark-2d3db9d6-ea78-438e-956f-be9c1dcf3a9d\blockmgr-e9ade223-a4b8-4d9f-b038-efd66adf9772
15/05/07 09:18:32 INFO MemoryStore: MemoryStore started with capacity 1956.7 MB
15/05/07 09:18:32 INFO HttpFileServer: HTTP File server directory is C:\Users\myuser\AppData\Local\Temp\spark-ff40d73b-e8ab-433e-88c4-35da27fb6278\httpd-def9220f-ac3a-4dd2-9ac1-2c593b94b2d9
15/05/07 09:18:32 INFO HttpServer: Starting HTTP Server
15/05/07 09:18:32 INFO Server: jetty-8.y.z-SNAPSHOT
15/05/07 09:18:32 INFO AbstractConnector: Started SocketConnector@0.0.0.0:54450
15/05/07 09:18:32 INFO Utils: Successfully started service 'HTTP file server' on port 54450.
15/05/07 09:18:32 INFO SparkEnv: Registering OutputCommitCoordinator
15/05/07 09:18:32 INFO Server: jetty-8.y.z-SNAPSHOT
15/05/07 09:18:32 INFO AbstractConnector: Started SelectChannelConnector@0.0.0.0:4040
15/05/07 09:18:32 INFO Utils: Successfully started service 'SparkUI' on port 4040.
15/05/07 09:18:32 INFO SparkUI: Started SparkUI at http://mymachine:4040
15/05/07 09:18:32 INFO SparkContext: Added JAR file:/D:/Projects/MyApp/MyApp.jar at http://10.111.111.199:54450/jars/MyApp.jar with timestamp 1430957912240
15/05/07 09:18:32 INFO RMProxy: Connecting to ResourceManager at cluster01/10.111.111.11:8050
15/05/07 09:18:32 INFO Client: Requesting a new application from cluster with 3 NodeManagers
15/05/07 09:18:32 INFO Client: Verifying our application has not requested more than the maximum memory capability of the cluster (23040 MB per container)
15/05/07 09:18:32 INFO Client: Will allocate AM container, with 896 MB memory including 384 MB overhead
15/05/07 09:18:32 INFO Client: Setting up container launch context for our AM
15/05/07 09:18:32 INFO Client: Preparing resources for our AM container
15/05/07 09:18:32 INFO Client: Source and destination file systems are the same. Not copying hdfs://cluster01/apps/spark/spark-assembly-1.3.1-hadoop2.6.0.jar
15/05/07 09:18:32 INFO Client: Setting up the launch environment for our AM container
15/05/07 09:18:33 INFO SecurityManager: Changing view acls to: myuser,myapp
15/05/07 09:18:33 INFO SecurityManager: Changing modify acls to: myuser,myapp
15/05/07 09:18:33 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(myuser, myapp); users with modify permissions: Set(myuser, myapp)
15/05/07 09:18:33 INFO Client: Submitting application 2 to ResourceManager
15/05/07 09:18:33 INFO YarnClientImpl: Submitted application application_1430956687773_0002
15/05/07 09:18:34 INFO Client: Application report for application_1430956687773_0002 (state: ACCEPTED)
15/05/07 09:18:34 INFO Client: 
     client token: N/A
     diagnostics: N/A
     ApplicationMaster host: N/A
     ApplicationMaster RPC port: -1
     queue: default
     start time: 1430957906540
     final status: UNDEFINED
     tracking URL: http://cluster01:8088/proxy/application_1430956687773_0002/
     user: myapp
15/05/07 09:18:35 INFO Client: Application report for application_1430956687773_0002 (state: ACCEPTED)
15/05/07 09:18:36 INFO Client: Application report for application_1430956687773_0002 (state: ACCEPTED)
15/05/07 09:18:37 INFO Client: Application report for application_1430956687773_0002 (state: ACCEPTED)
15/05/07 09:18:37 INFO YarnClientSchedulerBackend: ApplicationMaster registered as Actor[akka.tcp://sparkYarnAM@cluster02:39698/user/YarnAM#-1579648782]
15/05/07 09:18:37 INFO YarnClientSchedulerBackend: Add WebUI Filter. org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter, Map(PROXY_HOSTS -> cluster01, PROXY_URI_BASES -> http://cluster01:8088/proxy/application_1430956687773_0002), /proxy/application_1430956687773_0002
15/05/07 09:18:37 INFO JettyUtils: Adding filter: org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter
15/05/07 09:18:38 INFO Client: Application report for application_1430956687773_0002 (state: RUNNING)
15/05/07 09:18:38 INFO Client: 
     client token: N/A
     diagnostics: N/A
     ApplicationMaster host: cluster02
     ApplicationMaster RPC port: 0
     queue: default
     start time: 1430957906540
     final status: UNDEFINED
     tracking URL: http://cluster01:8088/proxy/application_1430956687773_0002/
     user: myapp
15/05/07 09:18:38 INFO YarnClientSchedulerBackend: Application application_1430956687773_0002 has started running.
15/05/07 09:18:38 INFO NettyBlockTransferService: Server created on 54491
15/05/07 09:18:38 INFO BlockManagerMaster: Trying to register BlockManager
15/05/07 09:18:38 INFO BlockManagerMasterActor: Registering block manager mymachine:54491 with 1956.7 MB RAM, BlockManagerId(<driver>, mymachine, 54491)
15/05/07 09:18:38 INFO BlockManagerMaster: Registered BlockManager
15/05/07 09:18:43 INFO YarnClientSchedulerBackend: Registered executor: Actor[akka.tcp://sparkExecutor@cluster02:44996/user/Executor#-786778979] with ID 1
15/05/07 09:18:43 INFO YarnClientSchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.8
15/05/07 09:18:43 INFO MainProcessor: Deleting previous output files

감사.

최신 정보

나는 (아마도 부분적이지만 중요한) 이유를 발견했다고 생각한다.

다음 줄 사이에 있습니다.

15/05/08 11:36:32 INFO BlockManagerMaster: Registered BlockManager
15/05/08 11:36:38 INFO YarnClientSchedulerBackend: Registered executor: Actor[akka.tcp://sparkExecutor@cluster04:55237/user/Executor#-149550753] with ID 1

클러스터 측에서 로그를 읽을 때, 다음과 같은 라인이 발견되었습니다 : (위의 라인과 정확한 시간은 다르지만 머신의 차이점입니다)

15/05/08 11:36:23 INFO yarn.ApplicationMaster: Started progress reporter thread - sleep time : 5000
15/05/08 11:36:28 INFO impl.AMRMClientImpl: Received new token for : cluster04:45454

스파크가 의도적으로 5 초간 잠자는 것처럼 보였다.

Spark 소스 코드를 읽고 org.apache.spark.deploy.yarn.ApplicationMaster.scala에서 launchReporterThread ()에 대한 코드가 있습니다. allocator.allocateResources () 및 Thread.sleep () 호출을 반복합니다. 절전 모드에서는 구성 변수 spark.yarn.scheduler.heartbeat.interval-ms를 읽습니다 (기본값은 5000 초, 5 초). 의견에 따르면 "우리는 RM에 너무 많은 요청을하지 않고도 합리적으로 대응할 수 있기를 원합니다"라고 말했습니다. 따라서 YARN이 즉시 할당 요청을 이행하지 않으면 5 초가 낭비되는 것 같습니다.

구성 변수를 1000으로 수정하면 1 초 동안 만 기다렸습니다.

변경 후의 로그 라인은 다음과 같습니다.

15/05/08 11:47:21 INFO yarn.ApplicationMaster: Started progress reporter thread - sleep time : 1000
15/05/08 11:47:22 INFO impl.AMRMClientImpl: Received new token for : cluster04:45454

4 초 저장.

따라서 5 초를 기다리지 않으려면 스파크를 변경할 수 있습니다 .yarn.scheduler.heartbeat.interval-ms.

추가로 발생하는 오버 헤드가 무시할 수 있기를 바랍니다.

최신 정보

관련 JIRA 문제가 공개되어 해결되었습니다. https://issues.apache.org/jira/browse/SPARK-7533을 참조하십시오.

해결법

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

    1.이것은 매우 전형적입니다. 내 시스템은 SparkContext를 얻을 때까지 spark-submit을 실행하는 데 약 20 초가 걸립니다.

    이것은 매우 전형적입니다. 내 시스템은 SparkContext를 얻을 때까지 spark-submit을 실행하는 데 약 20 초가 걸립니다.

    두 곳의 문서에서 말한 것처럼 해결책은 드라이버를 RPC 서버로 바꾸는 것입니다. 그렇게하면 한 번 초기화하고 다른 응용 프로그램은 드라이버 컨텍스트를 서비스로 사용할 수 있습니다.

    나는 나의 신청서로 이것을하는 중간에있다. 나는 http4를 사용하고 있고 내 드라이버를 웹 서버로 바꾸고있다.

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

    2.Spark 앞에서 REST API 인 Apache Livy를 확인할 수 있습니다.

    Spark 앞에서 REST API 인 Apache Livy를 확인할 수 있습니다.

    Spark / Livy 세션에 하나의 세션과 여러 요청을 할 수 있습니다.

  3. ==============================

    3.EMR 테스트 :

    EMR 테스트 :

    이것이 작동 할 수있는 이유는 마스터가 모든 항아리를 노예에 분배 할 필요가 없기 때문입니다. 여기에는 hdfs : ///user/hadoop/yarn-archive.zip이라는 일반적인 hdfs 경로에서 사용할 수 있습니다.

    3 초에서 5 초 정도 시간을 절약 할 수 있다는 것을 깨달았습니다.이 시간은 클러스터의 노드 수에 따라 다릅니다. 노드가 많으면 많을수록 시간이 절약됩니다.

  4. ==============================

    4.독립 실행 형 모드로 Mac OS를 사용하여 일부 작업을 실행하는 경우,

    독립 실행 형 모드로 Mac OS를 사용하여 일부 작업을 실행하는 경우,

    시스템 환경 설정 -> 공유에서 원격 SSH 연결을 활성화하는 것을 잊지 마십시오 (왜 그렇게해야하는지 모릅니다)

    활성화하기 전에 spark-submit xx.py를 실행하는 데 약 1 분이 소요됩니다.

    활성화 한 후에는 실행하는 데 3 초 밖에 걸리지 않습니다.

    다른 사람들이 Mac OS 플랫폼에서 문제가되는 데 도움이되기를 바랍니다.

  5. from https://stackoverflow.com/questions/30090226/apache-spark-yarn-mode-startup-takes-too-long-10-secs by cc-by-sa and MIT license