Data Engineering/spark

Yarn log 확인

quantapia 2019. 8. 21. 10:25

로그 파일 위치

 

 

Command 로 확인

1. 특정 application 로그 확인

   yarn logs -applicationId <application_id>

 

2. 에러로그만 확인

   yarn logs -applicationId <application_id> -log_files stderr

 

3. container별 로그 확인

   # application에서 사용하는 container 전체출력

   yarn logs -applicationId <application_id> -show_application_log_info

 

   # 위에 container정보에서 특정 container에 대한 로그 확인

   yarn logs -applicationId <application_id> -containerId <container_id>

 

 

[spark application architecture]

executor는 항상 실행 중 작업이 없더라도

이 모델의 장점은 빠르다. 빨리 뜨고 빠르게 메모리 데이터를 처리한다. 

단점은 executor의 수가 고정이다. 각 executor는 자원의 할당량이 고정되어 있다. application이 실행되는 동안 같은 양의 리소스를 가지고 있는다.  

 

[why run on yarn]

- yarn은 yarn에서 실행되는 모든 프레임워크사이에 동일한 클러스터 리소스 pool을 중앙에서 설정하고 동적으로 공유하는 것을 허용한다. 너는 configuration에 어떤 변경도 없이 모든 클러스터에 mr job, impala query, spark application을 던질수 있다. 

- 너는 yarn 스케줄러의 모든 특징의 장점을 얻을수 있다. (for categorizing, isolating, prioritizing workloads

- spark standalone mode는 각  application이 클러스터내 모든 노드위의 executor를 실행해야 한다. 반면에 yarn은 내가 사용한 executor의 수를  선택할수 있다.

- yarn은 spark의 보안을 지원하는 유일한 cluster manager다. 

 

[running on yarn]

yarn에서 spark를 실행할때 각 spark executor는 yarn container로서 동작한다. 

mapreduce가 container를 스케줄하고 각 task를 위해 jvm을 어디서 포크하던지 spark는 동일한 contailner로 multiple task들을 host한다. 이 접근은 수십배 빠른 시작시간을 가능하게 하다.

 

spark yarn에서 실행하는 2가지 모드를 제공한다. yarn-cluster, yarn-client

yarn-cluster mode : production job(생산작업)에 대한 이해 반면에 

yarn-client mode : interactive and debugging (대화형-응답 그리고 디버깅을 위해 사용한다. ) 너가 application의 직접적으로 output을 확인하고 싶을때

 

두가지 모드의 차이의 이해를 위해 yarn application master 개념의 이해가 필요하다. 

yarn에서는 각 application instance는 하나의 application master 프로세스를 갖는다.  - 이것은 그 application이 실행될때 최초의 container이다.  application은 리소스매니저로 부터 리소스 요청의 의무가 있다. 그리고 리소스를 할당받았을때 노드매니져에게 container들을 실행하라고 말한다 그것 대신에

application master는 active client에대한 요구를 사전에 제거하다. (client가 작업만 던지고 끝)

application을 시작한 프로세스는 사라질수 있다. 그리고 coordination(조정은) 클러스터에서 실행중인 yarn으로 인해 관리되는 프로세스로 부터 계속 된다. 

 

yarn-cluster 모드에서 driver는 application master에서 실행한다. 이것은 application의 driver와 yarn으로 리소스를 요청하는 역할을 같은 프로세스가 하는 것을 의미한다. (application 마스터가 spark driver도되고 거기서 yarn resource manager한테 리소스 요청도 한다.)

그리고 이 프로세스는 yarn container안에서 실행한다. app을 시작한 클라이언트는 그것의 전체 실행시간에 곁에 있을 필요가 없다. (클라이언트의 역활은 끝)

 

 

 

그러나 yarn cluster mode는 spark를 대화형으로 사용하기에는 적합하지 않다. user input이 필요한 spark-shell이나 pyspark 같은 spark application들은 spark driver가 spark application을 생성하는 client 프로세스 안에서 실행되는것을 원한다. 

yarn-client mode에서는 application master가 단지 yarn으로 부터 executor container를 요청하기 위해  존재한다. 

 

 

[각 모드별 차이정리]

 

 

yarn cluster

yarn client

spark standalone

Driver runs in 

Application master

client

client

Who request resources?

Application master

Application master

client

Who starts executor processes?

YARN 

ResourceManager

and NodeManager

YARN

ResourceManager

and NodeManager

Spark Master and Workers

Supports Spark Shell

No

Yes

Yes

 

 

key word

 - Application : 하나의 job, job들의 일련순서, 필요에의해 커맨드로 만들어 진 long-running 서비스, 또는   대화형 조회 세션

 - spark driver : sparkContext가 실행되는 프로세스 application당 하나의 driver가 있다. 

 - spark application master : yarn과 driver에 의한 리소스 요청의 협상을 담당한다. 그리고 spark application을 실행하기 위한 적합한 hosts/container의 set을 찾는다.  application당 하나의 application master를 갖는다. 

 - spark executor : single spark application에 할당된 노드에 있는 single jvm instance. 하나의 executor는그것의 실행시간동안 multiple tasks를 실행한다. 그리고 multiple tasks는 동시적으로 실행된다. 하나의 노드는 몇몇 spark executor들을 가지고 각 client application을 위한 spark executor가 실행중인 많은 노드가 있다. 

 - spark task :  a unit of work on a partition of a distributed dataset.(executor의 threads)