[컴] spark-submit 과 assembly jar

spark 에서 java program 수행 / 사용법

spark-submit 과 assembly jar

/bin/spark-submit script 는 application 을 cluster 에서 띄우기(launch) 위해 사용된다.

만약 내 application 코드가 다른 project 에 dependency 가 있다면, 그 package 도 내 application code와 같이 jar 로 묶어서 배포해야 한다. sbt 와 Maven 모두 assembly plugin 을 제공한다.

이 assembly jar 을 만들때, Spark 와 Hadoop package 는 필요없다. 그래서 provided 로 설정하면 된다. 이녀석들은 cluster manager 에 의해서 runtime 에 제공된다.

spark-submit 의 동작

spark cluster 는 manager 로 spark 에서 스스로 제공하는 standalone master 를 써도 되고, 또는 Yarn, Mesos 등을 사용해도 된다.

일단 yarn cluster 가 있고, 이 클러스터를 구성하는 node 안에 spark 를 설치한다. 어느 노드에 설치해도 상관없다.

spark-submit 으로 app 을 실행을 요청하면, 아까 설치했던 spark binary 가 app code 와 spark assembly jar 을 같이 hdfs 로 upload 시킨다. 이 spark assembly jar 이 있으면, executor 가 spark 를 실행할 수 있다.

그리고 yarn 의 resource manager 에도 접속한다.

계속 기본적으로 spark job 을 실행할 때마다 spark assembly jar 을 업로드 하기에 이것이 이미 있는 것을 사용하도록 config 에서 지정해 줄 수 있다.

yarn cluster 외부에서 spark binary 를 이용해서 spark-submit 을 yarn cluster 로 날리면,

hdfs 에 접속 후 HADOOP_CONF_DIR 변수에 있는 directory 로 간다. 그리고 거기서 config file 을 download 한다.

Yarn 에서 spark 의 동작

(1)

    ┌─────────────────┐       ┌─────────────────────┐
    │                 │       │ application master  │
    │ client process  │       │ process             │
    │                 ├───┐   │                     │
    └─────────────────┘   │   │                     │
                          │   │ ┌──────────────┐    │
                          └───┤►│ spark driver │    │
                              │ └──────────────┘    │
                              │                     │
                              └─────────────────────┘



                     ┌──────────┐
(2)                  │          │
    ┌────────────────▼────┐   ┌─▼───────────────────┐
    │                     │   │                     │
    │ client process      │   │ application master  │
    │                     │   │                     │
    │  ┌─────────────┐    │   │                     │
    │  │spark driver │    │   │                     │
    │  └─────────────┘    │   │                     │
    │                     │   │                     │
    └─────────────────────┘   └─────────────────────┘
  • cluster mode (1) : cluster mode 에서는 Spark driver 가 cluster에서 YARN 에 의해 관리되는 application master process 안에서 실행된다. 그리고 application 을 초기화 한 이후에 client 는 사라질 수 있다.
  • client mode (2): spark driver 가 client process 에서 실행된다. 그리고 application master 는 오직 YARN 으로 부터 resource 들을 요청하기 위해 사용되어 진다.
  • 다른 클러스터 관리자를 사용할 때는 마스터 주소를 —master parameter 을 사용해서 명시한다. YARN 모드에서는 ResourceManager의 주소가 Hadoop configuration 에서 선택된다. 그래서 –master parameter 는 yarn 을 사용한다.

spark 의 standalone mode vs yarn mode

spark 는 pluggable persistent store 를 가지고 있다.(persistent store 인데 여러가지를 붙여서 쓸 수 있는 것 정도로 이해 하면 될 듯 하다. 즉, hdfs 를 붙여서 쓸 수도 있고, 일반 적인 storage 를 쓸 수도 있고, db를 쓸 수도 있고)

standalone mode 에서는 spark 의 resource manager 를 사용하게 된다. 우리가 spark master 와 spark worker들을 실행하고, persistence layer 는 HDFS, FileSystem, Cassandra등 아무것이나 쓸 수 있다.

$SPARK_HOME/conf 에 있는 설정을 사용해서 우리가 worker로 어떤 서버(node)를 사용할지 등을 정하는 작업들을 통해 cluster 를 구성하게 된다.

YARN mode 에서는 우리는 YANR-Hadoop cluster 에 ’resource 할당’과 예약(book keeping) 을 관리해달라고 요청한다.

See Also

  1. 쿠…sal: [컴] hadoop - spark 테스트 환경
  2. 쿠…sal: [컴] Apache Spark
  3. How to debug Spark application locally? - Stack Overflow : spark 에 debugger를 붙이는 방법
  4. Spark Web UI - Understanding Spark Execution — SparkByExamples : spark web ui 를 제공하는데, spark application 이 수행중일때 web ui 로 접속하면, 어떤 식으로 application 이 동작하는지를 확인할 수 있다. 만약 running 상태가 지난이후에도 확인을 하고 싶다면 Spark History server 를 설치해야 한다.

댓글 없음:

댓글 쓰기