Day71

2021. 1. 22. 12:00교육과정/KOSMO

키워드 : 스파크 설치 ( Spark ) / 스파크를 로컬 및 클러스터로 구동하기 / 

 

****

 

 

1. 스파크 설치

 

(1) 스파크 다운로드

 

    ① dn01 노드에서 root 계정으로 로그인한다. 

        ( 설치 후 사용 권한을 hadoop 계정으로 변경할 예정 )

[hadoop@dn01 ~]$ su - root
Password:
Last login: Thu Jan 21 11:45:04 UTC 2021 on pts/1

 

    ② tmp 디렉토리로 이동 후 wget 명령어로 spark 패키지를 다운받는다. 

[root@dn01 ~]# cd /tmp
[root@dn01 tmp]# wget http://apache.mirror.cdnetworks.com/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz

....
Saving to: ‘spark-2.4.7-bin-hadoop2.7.tgz’

100%[====================================================>] 233,333,392 54.7MB/s   in 4.1s

2021-01-21 15:10:47 (53.7 MB/s) - ‘spark-2.4.7-bin-hadoop2.7.tgz’ saved [233333392/233333392]

 

    ③ tar 명령어를 사용하여 다운 받은 파일의 압축을 해제한다. 

        압축 해제 후 spark-2.4.7-bin-hadoop2.7  디렉토리가 생성되었음을 확인할 수 있다. 

[root@dn01 tmp]# tar xzvf spark-2.4.7-bin-hadoop2.7.tgz
[root@dn01 tmp]# ls
...
spark-2.4.7-bin-hadoop2.7
...

 

    ④ 2.4.7 이름의 디렉토리 생성 후 압축 해제한 파일들 전체를 옮긴다 

[root@dn01 tmp]# mkdir -p /opt/spark/2.4.7
[root@dn01 tmp]# mv spark-2.4.7-bin-hadoop2.7/* /opt/spark/2.4.7/
[root@dn01 tmp]# ls /opt/spark/2.4.7/
bin   data      jars        LICENSE   NOTICE  R          RELEASE  yarn
conf  examples  kubernetes  licenses  python  README.md  sbin

 

    ⑤ 2.4.7 디렉토리에 대해 current 라는 이름의 심볼릭링크를 생성한 뒤, 

        spark 디렉토리와 그 하위 파일들의 소유자를 hadoop 계정으로 변경한다. 

[root@dn01 tmp]# ln -s /opt/spark/2.4.7 /opt/spark/current
[root@dn01 tmp]# chown -R hadoop:hadoop /opt/spark/

[root@dn01 ~]# ll /opt/spark/
total 0
drwxr-xr-x. 13 hadoop hadoop 211 Jan 21 15:13 2.4.7
lrwxrwxrwx.  1 hadoop hadoop  16 Jan 21 15:13 current -> /opt/spark/2.4.7

 

    ⑥ hadoop 계정으로 로그인한다. 

[root@dn01 tmp]# su - hadoop

 


(2) 스파크 환경변수 추가

 

    ① hadoop 계정으로 로그인한다. 

[root@dn01 tmp]# su - hadoop

 

    ② vi 에디터로 . bash_profile 파일을 연 뒤 $SPARK_HOME 이라는 환경변수를 추가한다. 

[hadoop@dn01 ~]$ vi ~/.bash_profile
###### spark  ######################
export SPARK_HOME=/opt/spark/current
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
#### spark ######################

 

    ③ source 명령어를 사용하여 변경된 환경변수를 적용한다. 

[hadoop@dn01 ~]$ source ~/.bash_profile

 


(3) 스파크 설정 변경하기

 

    ① $SPARK_HOME 경로의 conf 디렉토리로 이동한다. 

[hadoop@dn01 ~]$ cd $SPARK_HOME/conf

 

    ② 템플릿 파일로부터 conf, properties, sh 파일을 생성한다. 

[hadoop@dn01 conf]$ ls
docker.properties.template  metrics.properties.template   spark-env.sh.template
fairscheduler.xml.template  slaves.template
log4j.properties.template   spark-defaults.conf.template
[hadoop@dn01 conf]$ cp slaves.template slaves
[hadoop@dn01 conf]$ cp spark-defaults.conf.template spark-defaults.conf
[hadoop@dn01 conf]$ cp log4j.properties.template log4j.properties
[hadoop@dn01 conf]$ cp spark-env.sh.template spark-env.sh

 

    ③ 각 파일을 열어 설정을 추가한다. 

[slaves] 파일에 localhost 를 지우고 아래 스크립트로 변경

nn01
dn02

[spark-defaults.conf] 파일에서 아래 스크립트를 추가

spark.yarn.jars /opt/spark/current/jars/*

[log4j.properties] 파일에서 INFO 를 ERROR 로 변경 
( 본래 Spark 에는 INFO 가 정신없이 나타나므로 에러만 출력하도록 변경하는 것 )

log4j.rootCategory=ERROR, console

[spark-env.sh] 파일에 아래 스크립트를 추가

SPARK_MASTER_HOST=dn01
export JAVA_HOME=/opt/jdk/current
export HADOOP_HOME=/opt/hadoop/current
export SPARK_HOME=/opt/spark/current
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_DRIVER_MEMORY=2g
export SPARK_EXECUTOR_INSTANCES=2
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=2g
export SPARK_MASTER_IP=192.168.56.102
#export SPARK_WORKER_DIR=/spark_data/spwork
#export SPARK_PID_DIR=/spark_data/sptmp
export SPARK_DIST_CLASSPATH=$(/opt/hadoop/current/bin/hadoop classpath):/opt/spark/current/jars/*
#export PYTHONPATH=/opt/python/current/python3
#export PYSPARK_PYTHON=/opt/python/current/python3

 


(4) 스파크 실행 및 일부 설정 변경하기

 

    ① spark-shell 을 입력하여 스파크를 실행한다. 

[hadoop@dn01 ~]$ spark-shell

 

    ② 스파크에서 scala 사용 예제

sc.setLogLevel("WARN")
val f = sc.textFile("file:///etc/hosts")
f.count
f.first
f.collect
:quit

 


(5) nn01 과 dn02 노드에 스파크 복사하기

 

    ① sudo 명령어를 사용하여 /opt/spark 디렉토리를 복사한다. 

        ( hadoop 계정의 비밀번호 hadoop / yes / root 계정의 비밀번호 vagrant )

[hadoop@dn01 ~]$ sudo scp -r /opt/spark  dn02:/opt/spark
[hadoop@dn01 ~]$ sudo scp -r /opt/spark  nn01:/opt/spark

    ※ 또는 root 계정으로 접속 후 scp 명령어 사용하여 복사할 수 있다. 

[root@dn01 ~]$ scp -r /opt/spark  dn02:/opt/spark
[root@dn01 ~]$ scp -r /opt/spark  nn01:/opt/spark

 

    ② 각 노드에서 스파크가 복사되었는지 확인한다. 

[hadoop@nn01 ~]$ ll /opt/spark/
total 0
drwxr-xr-x. 13 root root 211 Jan 21 16:07 2.4.7
drwxr-xr-x. 13 root root 211 Jan 21 16:07 current
[hadoop@dn02 ~]$ ll /opt/spark/
total 0
drwxr-xr-x. 13 root root 211 Jan 21 16:05 2.4.7
drwxr-xr-x. 13 root root 211 Jan 21 16:05 current

(6) nn01 과 dn02 노드로 복사한 파일의 심볼릭링크 생성하기

 

    ① dn01 은 심볼릭링크가 존재하지만, nn01 과 dn02 는 심볼릭링크가 없는 일반 디렉토리이다. 

 

    ② nn01 과 dn02  노드에서 root 계정으로 로그인한다. 

[hadoop@dn02 ~]$ su - root
Password:
Last login: Thu Jan 21 01:06:48 UTC 2021 from 192.168.56.1 on pts/0
[root@dn02 ~]# 

 

    ③ 기존 심볼릭링크로 만들었던 current 디렉토리를 지우고, 새롭게 심볼릭링크를 생성한다. 

[root@dn02 ~]# rm -rf /opt/spark/current

[root@dn02 ~]# ln -s /opt/spark/2.4.7 /opt/spark/current

 

    ④ 심볼릭링크 생성 결과를 확인한다. 

[root@dn02 ~]# ll /opt/spark/
total 0
drwxr-xr-x. 13 root root 211 Jan 21 16:05 2.4.7
lrwxrwxrwx.  1 root root  16 Jan 21 16:15 current -> /opt/spark/2.4.7

 

    ⑤ spark 디렉토리의 소유자를 hadoop 계정으로 변경한다. 

[root@dn02 ~]# chown -R hadoop:hadoop /opt/spark/
[root@dn02 ~]# ll /opt/spark/
total 0
drwxr-xr-x. 13 hadoop hadoop 211 Jan 21 16:05 2.4.7
lrwxrwxrwx.  1 hadoop hadoop  16 Jan 21 16:15 current -> /opt/spark/2.4.7

 

    ⑥ hadoop 계정으로 로그인한다. 

[root@dn02 ~]# su - hadoop
Last login: Thu Jan 21 12:45:49 UTC 2021 from 192.168.56.102 on pts/1
[hadoop@dn02 ~]$ 

 


(7) nn01 과 dn02 노드에서 환경변수 생성하기 

 

    ① 복사해온 노드에서는 환경변수가 설정되어 있지 않기 때문에 두 노드에 별도로 추가해준다. 

 

    ② vi 에디터로 . bash_profile 파일을 연 뒤 $SPARK_HOME 이라는 환경변수를 추가한다. 

[hadoop@nn01 ~]$ vi ~/.bash_profile
[hadoop@dn02 ~]$ vi ~/.bash_profile
###### spark  ######################
export SPARK_HOME=/opt/spark/current
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
#### spark ######################

 

    ③ source 명령어를 사용하여 변경된 환경변수를 적용한다. 

[hadoop@nn01 ~]$ source ~/.bash_profile
[hadoop@dn02 ~]$ source ~/.bash_profile

 


2. 스파크를 로컬 및 클러스터로 구동하기

 

(1) 스파크를 로컬에서 구동하기

 

    ① 각 노드의 hadoop 계정에서 로컬로 스파크 쉘을 구동하여 콘솔로 들어갈 수 있다. 

spark-shell                    -> scala 사용             scala>
pyspark                        -> python 사용            >>>

 

 

    ② 스파크를 종료하고자 할 때는, 실행한 스파크 콘솔 따라 빠져나가는 명령어를 입력한다. 

scala> :quit
>>> exit()

 


(2) 스파크를 클러스터로 구동하기

 

   스파크 구동 → 스파크 콘솔 실행

 

    ① 세 노드에 모두 스파크가 설치되었으므로,

        하둡처럼 스파크도 여러 클러스터를 유기적으로 연결해서 실행할 수 있다.

 

     ② 하지만, 스파크의 클러스터 구동 명령어가 하둡의 구동 명령어와 동일하므로,

        별도로 명시하지 않을 경우 하둡이 구동한다. 

[hadoop@dn01 ~]$ start-all.sh                     -> 하둡 구동 됨 

 

    ③ 따라서, 스파크의 경로를 명시하여 구동 / 종료해줘야 한다. 

[hadoop@dn01 ~]$ $SPARK_HOME/sbin/start-all.sh 

[hadoop@dn01 ~]$ $SPARK_HOME/sbin/stop-all.sh

   - dn01 은 Master 로,

   - dn02 와 nn01 은 Worker 로 사용되고 있었음을 확인할 수 있다. 

 

    ④ 또는 스파크의 설치 경로까지 들어간 다음, 현재 디렉토리를 명시하여 스파크를 구동 / 종료한다. 

[hadoop@dn01 ~]$ cd  $SPARK_HOME/sbin

[hadoop@dn01 sbin]$ pwd
/opt/spark/current/sbin

[hadoop@dn01 sbin]$ ./start-all.sh
[hadoop@dn01 sbin]$ ./stop-all.sh

 

    ⑤ 마스터인 dn01 에서 7077 포트로 스파크 콘솔을 실행한다. 

[hadoop@dn01 sbin]$ spark-shell --master  spark://dn01:7077

 

반응형

'교육과정 > KOSMO' 카테고리의 다른 글

Day73  (0) 2021.01.26
Day72  (0) 2021.01.25
Day70  (0) 2021.01.21
Day69  (0) 2021.01.20
Day68  (0) 2021.01.19