2015년 8월 4일 화요일

Spark Cluster Settings On Yarn : Spark 1.4.1 + Hadoop 2.7.1

spark + yarn 의 Cluster 세팅은 spark + mesos 의 Cluster 세팅에 비하여 매우 쉽다. spark stand alone Cluster 의 경우 client node 에 spark 를 모두 설치해 주어야 하지만, spark + yarn Cluster 의 경우에는, spark + mesos Cluster 의 경우와 마찬가지로, master 에만 설치해주면 동작한다. (물론 Yarn 위에서 구동되므로, Yarn 관련 설정은 모든 Node 에 동일하게 설정되어 있어야 한다. 그리고, Yarn 이나 Mesos Master 가 Spark  Master 와 반드시 같은 Node 필요는 없다.)

기존 spark stand alone 클러스터 세팅에서 아래 정도만 신경 쓰면 설치가 완료 된다.
  1. 환경변수 세팅
    1. 기존 Hadoop 환경변수는 세팅되어 있다고 가정
    2. HADOOP_CONF_DIR 라인을 Copy 하여 YARN_CONF_DIR추가(모든 Node 에서)
  2. Spark.local.dir 관련 폴더 생성
    1. 모든 노드에 Disk 파티션이 큰 영역에 별도의 spark local dir 폴더 생성.
    2. 이것을 정의 하지 않으면, /tmp 가 차올라서 disk full 이 되기 십상이다.
    3. mkdir /data02/spark_tmp/
    4. spark.local.dir 관련 set 은 SparkConf().setAppName("AppName").set("","") 메소드를 이용.(프로그램 내부에서 정의 함. 물론 실행 시점이나, 글로벌 conf 파일에서 정의 할수도 있긴 하지만...)
  3. Mode 선정
    1. spark + yarn 모드는 두가지 모드가 있으며 아래와 같은 특징이 있다.
      1. yarn cluster mode
        1. job이 중앙에서 구동되는 방식이다. 좀더 Yarn 의 리소스에 의존하여 구동되는 느낌이다.
        2. scala 소스 내에 println 을 넣으면, spark-submit 을 한 콘솔에 출력되지 않고, hadoop의 yarn Job 관리 UI 에서 stdout Log 를 통해 확인할 수 있다.
        3. 위 그림은 println 한 결과 출력 창이다. (MapReduce UI)
      2. yarn client mode
        1. 특정 client 에서 spark-submit 을 날리면, 해당 머신에서 main 클래스가 구동되는 듯 하다. 물론 실제 잘게 쪼개진 sub task 들은 yarn 위에서 구동된다.
        2. 때문에, yarn cluster mode 와 달리, println 을 하면, 수행시킨 Console 에서 결과가 stdout 으로 바로 보여진다. 
        3. 잘게 쪼깨진 sub task 만 yarn 에의해 관리되는것 같다.
        4. 동작방식이 mesos cluster 위에서 spark job 을 구동했을때와 매우 흡사해 보인다.
        5. 위 그림은 println 한 결과 출력 창이다. (수행 Console )
구동을 하면 아래처럼 Yarn 의  Job 관리 UI 에서 수행 상태를 확인 할 수 있다. 이러한 Job UI  자체는 Mesos나 Spark Stand Alone Cluster 의 그것에 비하여 좀 기능이 떨어진다. Application Type 이 MapReduce 인 경우 MAPREDUCE 라고 보이는 반면 Spark Job 은 SPARK 라고 보여 진다.






댓글 없음:

댓글 쓰기