본문 바로가기
BigData/Spark & Spark Tuning

[BigData] 완전 분산 하둡 클러스터(hadoop cluster)(4개 노드) 에 "Spark"(Spark on Yarn cluster) 설치 및 실습 하기

by 스파이디웹 2021. 11. 7.
728x90

저번 포스트까지는  하둡 클러스터를 구성해보았습니다.

이번 포스트에는 구성된 하둡 클러스터에 Spark를 설치해보겠습니다.

본 포스팅은 standalone모드 4개를 구축하여 spark cluster를 만드는 것이 아닌, 구축된 hadoop cluster의 yarn위에 spark을 올리는 spark on yarn(cluster mode,master(yarn))입니다.

 

아직 hadoop cluster 구축이 안되신 분은 아래의 링크를 참고해주세요.

https://spidyweb.tistory.com/266

 

[BigData] 완전 분산 하둡 클러스터(hadoop cluster)구축하기(4개 노드) 1. 4개의 가상 노드 띄우기

이번 포스트에는 하둡 fully-distributed mode 구축을 해보도록 하겠습니다. 하둡 구성 스펙 호스트OS - windows10 home 게스트OS들 - centOS7 Hadoop - 3.1.0 Zookeeper - 3.4.10 jdk - 1.8.0_191 호스트OS는 공..

spidyweb.tistory.com


하둡 구성 스펙

호스트OS - windows10 home

게스트OS들 - centOS7

Hadoop - 3.1.2

Zookeeper - 3.4.10

jdk - 1.8.0_191

호스트OS는 공유기(WI-FI) 연결 환경

 

서버 4대를 활용한 하둡 HA 구성:

namenode1: 액티브 네임노드, 저널노드 역할

rmnode1: 스탠바이 네임노드, 리소스 매니저, 저널노드 역할, 데이터 노드 역할

datanode1: 저널노드 역할, 데이터 노드 역할

datanode2: 데이터 노드 역할

 

spark version

spark-3.1.2.-bin-hadoop2.7


1. wget 다운

1) su root

 

2) sudo yum install wget

3) su hadoop


2. Spark 다운로드 및 압축 해제(resource manager 가 있는 master node에 설치), 환경변수 설정

위의 서버중 rmnode1에 resource manager가 있기 때문에, 위의 서버에서 다운로드 및 압축해제를 합니다.

 

(hadoop 계정)(현재 디렉토리 root디렉토리:pwd가 /home/hadoop)

1) wget https://downloads.apache.org/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz

2) tar -xzf spark-3.1.2-bin-hadoop3.2.tgz (압축 해제)

3) python 3 다운로드 (rmnode1, datanode1, datanode2 전부 설치)

  • root계정으로 접속

su root

  • python3 설치

yum install python3

  • 확인

4) 환경 변수 등록

su root

cd ~

nano /etc/profile

export SPARK_HOME=/home/hadoop/spark-3.1.2-bin-hadoop3.2

export PATH=$PATH:$SPARK_HOME/bin

export PYSPARK_PYTHON=/usr/bin/python3 #pyspark shell을 위한 설정

ctrl+x Y enter로 저장하고 나온 후

source /etc/profile로 환경변수 적용

다시 하둡 계정으로 이동

su hadoop

 


3. spark 환경 설정

1) cd spark-3.1.2-bin-hadoop3.2/conf/

2) cp spark-defaults.conf.template spark-defaults.conf

3) cp spark-env.sh.template spark-env.sh

4) nano spark-defaults.conf

자신의 서버의 vCore수 확인하는 것이  중요 아래의 링크에서 참조

https://spidyweb.tistory.com/322

 

spark.master yarn

spark.driver.memory 2g

spark.yarn.am.memory 2g

spark.executor.memory 4g

spark.executor.instances 3
spark.driver.cores 1
spark.executor.cores 1 #실행되는 executor 수 조정

spark.eventLog.enabled true 

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

spark.history.provider org.apache.spark.deploy.history.FsHistoryprovider #job history server 구성

spark.history.fs.update.interval 10s #job history server 구성

spark.history.fs.logDirectory hdfs:///user/hadoop/sparklog #job history server 구성

spark.yarn.historyServer.address 192.168.56.101:18080 #job history server 구성

 

#여기서 부터 yarn에 python interpreter 설정 config

#spark.yarn.appMasterEnv.PYSPARK_PYTHON /usr/bin/python3

#spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON /usr/bin/python3

#yarn에 python경로 변수를 알려줘야 pyspark를 사용할 수 있다, 그런데 /etc/profile에 설정한 PYSPARK_PYTHON 경로 혹은, spark_env에서 설정한 PYSPARK_PYTHON 로 인식이 되는거 같다.

 

*hdfs:///user/hadoop/sparklog를 미리 생성해야한다.(안 그러면 디렉토리가 없다는 오류를 낸다.)

5) nano spark-env.sh

맨 밑에

export HADOOP_CONF_DIR=/home/hadoop/hadoop-3.1.0/etc/hadoop/
export HADOOP_HOME=/home/hadoop/hadoop-3.1.0/

export PYSPARK_PYTHON=/usr/bin/python3

export PYSPARK_DRIVER_PYTHON=/usr/bin/python3
입력 후 저장


4. 포트포워딩

(호스트 IP는 중요하지 않다.)

 

namenode1

rmnode1

datanode1

datanode2


5. SPARK 실행해보기

1) spark-shell

scala 언어로 사용하는 spark shell을 spark-shell 명령어로 확인

2) pyspark

python 언어로 사용하는 spark shell을 pyspark 명령어로 확인

3) spark ui

spark session 이 생성되면 spark ui를 확인해 볼 수 있습니다.

위의 포트포워딩이 마무리 되었다면 url 192.168.56.101:4040 을 쳐서 확인해봅니다.

 

4) job history server

hadoop history server 시작(19888 포트)

$HADOOP_HOME/bin/mapred --daemon start historyserver

 

spark history server 시작(18080 포트)

$SPARK_HOME/sbin/start-history-server.sh

포트포워딩 이후에 서버띄운노드ip:18080 로 접속

포트포워딩 이후에 서버띄운노드ip:19888 로 접속


알게 된 점 & TROUBLE SHOOTING

1) spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.2.jar

->

spark가 yarn과 cluster mode로 잡을 제출할 수 있는지 확인(제대로 config가 설정되었는지)

 

2) pyspark job을 던질 때 yarn에 python 인식은 /etc/profile 에 적힌 PYSPARK_PYTHON으로 인식되는지, spark-env.sh에 적힌 PYSPARK_PYTHON으로 인식되는지 알아보기

->

 

 

3)HADOOP "is running beyond virtual memory limits" ERROR

Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.

->

메모리 늘려서 해결 or vmem 신경안쓰는 설정하기


 

*TIP

메모리 및 config설정 site

http://spark-configuration.luminousmen.com/

 

Spark Configuration Optimization

Tool for automatic spark cluster resource optimization

spark-configuration.luminousmen.com

아직 수정이 필요한 단계입니다(AM의 application master 및 history, log에 접근 할 때의 node 호스트명 변경을 통한 ui띄우기)

 

 구축된 spark on yarn을 실습하는 포스트를 보시려면 아래의 링크를 참조해주세요.

2021.11.18 - [BigData] - [Spark] spark on yarn cluster에 pyspark job submit(스파크 클러스터에 잡 던지고 UI 확인하기)

 

[Spark] spark on yarn cluster에 pyspark job submit(스파크 클러스터에 잡 던지고 UI 확인하기)

이번 포스트에는 spark를 yarn을 이용하여 cluster mode로 pyspark job을 제출하고, cluster로 잘 돌았는지 확인해보겠습니다. hadoop cluster가 구성 안되신 분들은 아래의 링크를 참조해주세요. 2021.08.08 - [B..

spidyweb.tistory.com

 

728x90

댓글