메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, 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

번호 제목 글쓴이 날짜 조회 수
261 CDP에서 AD와 Kerberos를 활용하여 인증 환경을 구축하는 3가지 방법 gooper 2022.06.10 425
260 Error: Could not find or load main class nodemnager 가 발생할때 해결하는 방법 총관리자 2015.06.05 426
259 Hadoop - 클러스터 세팅및 기동 총관리자 2015.04.28 427
258 ontology, jena, sparql등 전반에 대한 설명및 예제를 제공하는 사이트 총관리자 2015.12.08 427
257 elasticsearch 기동시 permission denied on key 'vm.max_map_count' 오류발생시 조치사항 총관리자 2017.06.23 431
256 db를 통째로 새로운 이름의 db로 복사하는 방법/절차 총관리자 2017.11.14 433
255 Could not configure server becase SASL configuration did not allow the Zookeeper server to authenticate itself properly: javax.security.auth.login.LoginException: Checksum failed 총관리자 2019.05.18 434
254 Java 8에서 pom.xml에 JavaDoc 관련 태그가 설정되어 있으나 오류등으로 실패하면 나머지 Maven작업이 종료되는 문제 해결 방법 총관리자 2017.01.24 438
253 Drools 6.0 - 비즈니스 룰 기반으로 간단한 룰 애플리케이션 만들기 file 총관리자 2016.07.18 440
252 [번역] solr 검색 엔진 튜토리얼 총관리자 2014.10.07 441
251 Elastic Search For Hadoop 2.2.0설치하기(5대 클러스터링) 총관리자 2016.04.04 448
250 java.lang.IllegalArgumentException: Does not contain a valid host:port authority: master 오류해결방법 총관리자 2015.05.06 451
249 CDH 5.14.2 설치중 agent설치에서 실패하는 경우 확인/조치 총관리자 2018.05.22 451
248 [백업] 리눅스 시스템 백업하기 (Linux System Backup) - TAR 사용 시스템 전체 백업 총관리자 2022.01.19 452
247 Spark 1.6.1 설치후 HA구성 총관리자 2016.05.24 455
246 servlet-api를 jar형태로 build할때 포함하지 말고 java 설치 위치의 jre/lib/ext에 복사하여 사용하는것이 좋다. 총관리자 2016.08.10 455
245 spark-sql실행시 The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH오류 발생시 조치사항 총관리자 2016.06.09 457
244 java.lang.OutOfMemoryError: unable to create new native thread오류 발생지 조치사항 총관리자 2016.10.17 470
243 Ubuntu 16.04 LTS에 Hive 2.1.1설치하면서 "Version information not found in metastore"발생하는 오류원인및 조치사항 총관리자 2017.05.03 471
242 java.util.NoSuchElementException발생시 조치 총관리자 2014.08.27 476

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로