메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


1. 다운로드

http://www.apache.org/dyn/closer.lua/spark/spark-2.1.1/spark-2.1.1-bin-hadoop2.7.tgz

* YARN 클러스터환경에서 작동되는 spark버젼을 다운받는다.


2. upload및 압축풀기

  sudo tar xvfz spark-2.1.1-bin-hadoop2.7.tgz


3. conf파일 생성및 내용수정(root계정으로 실행)

  가. sudo cp conf/slaves.template slaves

  가-1. vi slaves

      sda2

      sda3

      sda4

      sda5


  나. cp conf/spark-defaults.conf.template spark-defaults.conf

    spark.master                      spark://sda1:7077,sda2:7077

    spark.eventLog.enabled           true

    spark.eventLog.dir               hdfs://mycluster/user/hadoop/spark

    spark.serializer                 org.apache.spark.serializer.KryoSerializer

    spark.driver.memory              5g

#    spark.executor.extraJavaOptions  -XX:+PrintGCDetails -XX:MaxDirectMemorySize=67108864 -XX:+HeapDumpOnOutOfMemoryError -Dkey=value -Dnumbers="one two three"

    spark.executor.extraJavaOptions  -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dkey=value -Dnumbers="one two three"

       : Kafka로부터 메세지를 받는 spark용 client프로그램 구동시 파일을 읽는 등의 처리가 갑자기 증가하게되는 상황이되면 OutOfMemoryError가 발생할 수 있는데 이것은 NIO관련 라이브러리가 0(무제한)의 DirectMemoryBuffer를 제공함으로서 모든 메모리를 소진하기 때문인데.. 이럴때는 파일엑세스가 몰리는 프로그램의 JVM(예, tomcat)기동시 -XX:MaxDirectMemorySize(예, 2G(2147483648), 2*1024*1024*1024)등을 지정하여 무제한으로 증가하지 않도록 설정해준다.


  다. hadoop경로 생성(spark.eventLog.dir의 경로를 생성함, 생성하지 않으면 bin/spark-shell실행시 오류발생함) : 

     hadoop fs -mkdir hdfs://mycluster/user/hadoop/spark


  라. cp conf/spark-env.sh.template spark-env.sh

      export JAVA_HOME=/opt/jdk1.8.0_66

      export SPARK_SSH_OPTS=" -p 10022 "   #ssh 포트가 변경된 경우 추가 

      export SPARK_MASTER_WEBUI_PORT=8123   #master webui의 port가 변경할 경우 추가 (defautl:8080)

      export SPARK_LOG_DIR=/logs/spark     #log파일 위치 

      export SPARK_WORKER_MEMORY=5g #worker당 사용가능한 메모리

      export SPARK_WORKER_CORES=10 #Worker당 사용가능한 코어수 

      export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=3"  #어플리케이션에 디폴트로 할당되는 코어수

      export SPARK_HISTORY_OPTS=" -Dspark.history.fs.logDirectory=hdfs://mycluster/user/hadoop/spark"

                # event log를 웹어서 볼수 있도록 설정한다(http://sda1:18080으로 조회할 수 있다)


     *설정값(예시)

     export JAVA_HOME=/opt/jdk1.8.0_66

     export SPARK_MASTER_WEBUI_PORT=8123

     export SPARK_LOG_DIR=/logs/spark 

     export SPARK_SSH_OPTS=" -p 22 "

     export STANDALONE_SPARK_MASTER_HOST=sda1,sda2

     export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=sda1:2181,sda2:2181,sda3:2181"

     export SPARK_WORKER_MEMORY=5g

     export SPARK_WORKER_CORES=10

     export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=3"

     export SPARK_HISTORY_OPTS=" -Dspark.history.fs.logDirectory=hdfs://mycluster/user/hadoop/spark"

     #export CLASSPATH=$CLASSPATH:/svc/apps/gsda/bin/hadoop/spark/lib/mysql-connector-java-5.1.39-bin.jar #mysql의 경우

     export CLASSPATH=$CLASSPATH:/svc/apps/gsda/bin/hadoop/spark/lib/mariadb-java-client-1.5.9.jar  #mariadb의 경우

     (주의 : spark-2.0.0-bin-hadoop2.7이상의 버젼은 lib폴더가 없으므로 만들어서 mysql-connector.. 파일을 여기에 복사해줄것, mariadb의 경우는 mariadb-java-client-1.5.4.jar를 복사해준다.)

   (참조사이트 #1(mariadb) : https://mariadb.com/kb/en/mariadb/about-mariadb-connector-j/

             #2(mysql) : https://dev.mysql.com/downloads/connector/j/)


   * 추가적인 설정값은 https://www.gooper.com/ss/index.php?mid=bigdata&category=2773&page=2&document_srl=3125 를 참조할것

   (예, export SPARK_WORKER_MEMORY=5g

        export SPARK_WORKER_CORES=10

        export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=3"

        로 지젇하는 경우 start-all.sh할때 각서버에 worker가 4개씩 기동하며 각 worker당 core 10개, 메모리는 5g씩 사용하게 된           다. 특히 SPARK_MASTER_OPTS을 지정하지 않으면 동시에 여러프로그램을 사용할수 없는 문제("Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources"라는 WARN이 발생하며 어플리케이션이 수행되지 않고 대기하게됨)가 발생한다. 하지만 stop-all.sh로 중지시키면 서버당 4개씩 기동된(SPARK_WORKER_INSTANCE=4로 지정한 경우, 1.x이상에서 삭제됨) Worker를 모두 중지시켜 주지 못한다는 문제점이 있음)


  마. cp log4j.properties.template log4j.properties

    (*참고: $HOME/spark/logs가 defualt log파일의 위치임)


  바. conf/ha.conf(개별 기동 하면서 HA를 구성할때 사용됨, https://www.gooper.com/ss/index.php?mid=bigdata&category=2773&page=2&document_srl=3124)

#SPARK_DAEMON_JAVA_OPTS="spark.deploy.recoveryMode=ZOOKEEPER spark.deploy.zookeeper.url=sda1:2181,sda2:2181,sda3:2181 spark.deploy.zookeeper.dir=/spark"


spark.deploy.recoveryMode=ZOOKEEPER

spark.deploy.zookeeper.url=sda1:2181,sda2:2181,sda3:2181

spark.deploy.zookeeper.dir=/spark


4. 각 서버에 복사한다(sda1 : master, 나머지 : worker) - root로 실행

scp -r -P XXX spark-2.1.1-bin-hadoop2.7 root@sda2:$HOME

scp -r -P XXX spark-2.1.1-bin-hadoop2.7 root@sda3:$HOME

scp -r -P XXX spark-2.1.1-bin-hadoop2.7 root@sda4:$HOME

scp -r -P XXX spark-2.1.1-bin-hadoop2.7 root@sda5:$HOME


* 각 서버에 복사하고 링크를 생성해줘야한다.

 - ln -s spark-2.1.1-bin-hadoop2.7 spark

 - hive가 설치되고 hive에서 설정한 metastore를 사용하기 위해서 spark/conf밑에 hive-site.xml의 링크를 생성한다.

    (예, ln -s /opt/hadoop/hive/conf/hive-site.xml hive-site.xml)

 - hadoop의 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml에 대한 링크를 spark/conf밑에 생성한다.

(예:

ln -s $HOME/hadoop/etc/hadoop/core-site.xml core-site.xml

ln -s $HOME/hadoop/etc/hadoop/hdfs-site.xml hdfs-site.xml

ln -s $HOME/hadoop/etc/hadoop/mapred-site.xml mapred-site.xml

ln -s $HOME/hadoop/etc/hadoop/yarn-site.xml yarn-site.xml

ln -s $HOME/hive/conf/hive-site.xml hive-site.xml  (hive와 spark를 연동하는 경우 추가해줌, hive가 설치된 곳만(?))

)

5. Spark의 Master데몬을 수동으로 실행(active용 서버와 standby서버에서 실행시켜줌) - root로 실행

가. ./sbin/start-master.sh (conf폴더에 설정된 spark-default.xml을 이용하여 환경을 설정한다)


나. ./sbin/start-master.sh --host sda1 --webui-port 8123

(conf폴더에 관련 옵션을 설정한 경우는 ./sbin/start-master.sh만 실행시켜준다, conf/spark-env.sh에 옵션을 지정하고 command에서 동일한 옵션을 지정하면 중복 지정된다.)

(export SPARK_MASTER_WEBUI_PORT=8123)


==>
starting org.apache.spark.deploy.master.Master, logging to /hadoop/spark/logs/spark-root-org.apache.spark.deploy.master.Master-1-sda1.out


* spark master daemon만 수동으로 내리기 : ./sbin/stop-master.sh 


* master서버에서 master와 slave들을 한번에 모두 기동하려면 ./sbin/start-all.sh을 실행한다.

(중지할 경우는 ./sbin/stop-all을 실행한다)


5-1. Master, Worker를 기동시켜준다.

./sbin/start-all.sh

6. 데몬확인(jps -m)

142292 Master --ip sda1 --port 7077 --webui-port 8080 --host sda1 --webui-port 8123


* Worker노드를 수동으로 기동하기(각 Worker 노드에서 실행한다)

./sbin/start-slave.sh spark://sda1:7077,sda2:7077

starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-sda2.out


* Worker데몬 확인(jps -m)

15713 Worker --webui-port 8081 spark://sda1:7077

* Worker stop : sbin/stop-slave.sh


*브라우져로 확인(Master데몬이 기동된 서버에서 브라우징하면 Master와 Worker정보를 알수 있음)

http://sda1:8123/

http://sda2:8123/


7. master와 slave 모두 한번에 기동하는 script(root로 실행)

./sbin/start-all.sh(기동)

./sbin/stop-all.sh(중지)


* script용도

가. sbin/start-master.sh - script를 실행하는 서버에서 master instance를 기동한다.

나. sbin/start-slaves.sh -conf/slaves파일에 지정된 서버들에서 slave instance를 기동한다.

다. sbin/start-slave.sh - script를 실행하는 서버에서 slave instance를 기동한다.

라. sbin/start-all.sh - 위에서 설명한 slave들, master를 모두 기동한다.

마. sbin/stop-master.sh - bin/start-master.sh script를 이용하여 기동한 master instance를 종료한다.

바. sbin/stop-slaves.sh - conf/slaves파일에 지정된 모든 slave instance를 종료한다.

사. sbin/stop-all.sh - 위에서 설명한 master와 slave를 보두 종료한다.


8. event history서버 기동(master노드에서 root로 실행)

 ./sbin/start-history-server.sh


*  http://sda1:18080으로 event history를 조회할 수 있다


9. hive thrift server기동(필요시, master노드에서 root로 실행)

 ./sbin/start-thriftserver.sh


10. spark-shell 실행하기(root가 아닌 다른 계정(예, hadoop)으로 실행)

./bin/spark-shell --master spark://sda1:7077,sda2:7077

(conf/spark-defaults.conf파일에 spark.master spark://sda1:7077,sda2:7077로 지정하면 spark-shell등의 실행시 --master를 지정하지 않아도 됨)


11. test(hadoop 계정으로 수행)

 가. HDFS에 a.txt파일 업로드 : hadoop fs -put a.txt

 나. spark-shell프로그램 실행 : ./bin/spark-shell

 다. spark-shell에서 test용 프로그램 실행

   - HDFS에 있는 b.txt파일을 RDD로 변환 : scala> val textFile = sc.textFile("b.txt")

   - 전체 라인수 count수행 : scala> textFile.count()

   - "aa"단어가 있는 라인 count 수행 : scala> textFile.filter(line => line.containts("aa")).count()     


* ./bin/spark-sql 실행시 오류가 나면 

https://www.gooper.com/ss/index.php?mid=bigdata&category=2773&page=2&document_srl=3153 를 참조하여 조치하여준다.


* HA구성 : https://www.gooper.com/ss/index.php?mid=bigdata&category=2773&page=2&document_srl=3124 를 참조한다.


*참고


http://igoto.x-y.net/xe/linux/154


https://spark.apache.org/docs/latest/spark-standalone.html


http://hoondongkim.blogspot.kr/2014/10/spark-3-stand-alone-on-cluster.html


http://hoondongkim.blogspot.kr/2015/10/spark-yarn-cluster-vs-spark-mesos_20.html


http://hoondongkim.blogspot.kr/2015/10/spark-yarn-cluster-vs-spark-mesos.html

번호 제목 날짜 조회 수
204 "Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources"오류 발생시 조치사항 2016.05.25 1633
203 spark-env.sh에서 사용할 수있는 항목. 2016.05.24 1246
202 Spark 1.6.1 설치후 HA구성 2016.05.24 1280
201 spark-shell실행시 "A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection."오류가 발생하는 경우 해결방법 2016.05.20 688
200 Master rejected startup because clock is out of sync 오류 해결방법 2016.05.03 252
199 kafka broker기동시 brokerId가 달라서 기동에 실패하는 경우 조치방법 2016.05.02 2489
198 kafka 0.9.0.1 for scala 2.1.1 설치및 테스트 2016.05.02 1048
197 solr 인스턴스 기동후 shard에 서버가 정상적으로 할당되지 않는 경우 해결책 2016.04.29 1407
196 collection생성시 -shards와 -replicationFactor값을 잘못지정하면 write.lock for client xxx.xxx.xxx.xxx already exists오류가 발생한다. 2016.04.28 237
195 solrdf초기 기동시 "Caused by: java.lang.IllegalAccessError: tried to access field org.apache.solr.handler.RequestHandlerBase.log from class org.gazzax.labs.solrdf.handler.update.RdfUpdateRequestHandler" 오류가 발생시 조치사항 2016.04.22 508
194 solrcloud에 solrdf1.1설치하고 테스트 하기 2016.04.22 687
» Spark 2.1.1 clustering(5대) 설치(YARN기반) 2016.04.22 2217
192 Hadoop 완벽 가이드 정리된 링크 2016.04.19 957
191 cumulusRDF 1.0.1설치및 "KeyspaceCumulus" keyspace확인하기 file 2016.04.15 6246
190 bin/cassandra -f -R로 startup할때 NullPointerException오류가 나면 조치할 내용 2016.04.14 459
189 Cassandra 3.4(3.10) 설치/설정 (5대로 clustering) 2016.04.11 997
188 딥러닝 수학/알고리즘 '한국어' 강의 2016.04.10 522
187 서버 5대에 solr 5.5.0 설치하고 index data를 HDFS에 저장/search하도록 설치/설정하는 방법(SolrCloud) 2016.04.08 836
186 서버 5대에 solr 5.5.0 설치하고 index data를 HDFS에 저장/search하도록 설치/설정하는 방법 2016.04.08 1345
185 failed to read local state, exiting...오류발생시 조치사항 2016.04.06 320
위로