저번 포스트까지는 하둡 클러스터를 구성해보았습니다.
이번 포스트에는 구성된 하둡 클러스터에 Spark를 설치해보겠습니다.
본 포스팅은 standalone모드 4개를 구축하여 spark cluster를 만드는 것이 아닌, 구축된 hadoop cluster의 yarn위에 spark을 올리는 spark on yarn(cluster mode,master(yarn))입니다.
아직 hadoop cluster 구축이 안되신 분은 아래의 링크를 참고해주세요.
https://spidyweb.tistory.com/266
하둡 구성 스펙
호스트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/
아직 수정이 필요한 단계입니다(AM의 application master 및 history, log에 접근 할 때의 node 호스트명 변경을 통한 ui띄우기)
구축된 spark on yarn을 실습하는 포스트를 보시려면 아래의 링크를 참조해주세요.
2021.11.18 - [BigData] - [Spark] spark on yarn cluster에 pyspark job submit(스파크 클러스터에 잡 던지고 UI 확인하기)
'BigData > Spark & Spark Tuning' 카테고리의 다른 글
[spark] error 기록, spark write시 format에 따른 column name 형태 (0) | 2021.11.16 |
---|---|
[Spark] spark standalone 모드로 pyspark 실습(.py spark submit)+ui확인하기 (0) | 2021.11.08 |
[Spark] Spark partition pruning 개념, 확인 방법(실행 계획) (0) | 2021.09.14 |
[Hive,Spark] Hive, Spark의 Date Functions 정리, oracle,mysql에서 쓰일 수 있는 functions 언급 (0) | 2021.08.19 |
HIVE QL(HQL) VS Pyspark (REGEXP_REPLACE 구문 차이정리) (0) | 2021.08.19 |
댓글