트위터 API를 이용하여 데이터 파이프라인 만들기
이전 포스팅에 이어서 진행합니다.
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 2
트위터 API를 이용하여 데이터 파이프라인 만들기 이전에 작성했던 포스팅에 이어서 진행합니다. [빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 1 트위터 API를 이
my-develop-note.tistory.com
이번 포스팅에서는 VM에 Spark 분산환경을 구축한 경험을 공유해보고자 합니다.
Hadoop YARN에서 Spark를 실행하는 방법입니다.
java-8이 설치되어 있다고 가정하겠습니다.
이전에 Hadoop을 설치했던 것과 마찬가지로 master, slave VM 모두 동일하게 /usr/local 디렉토리 밑에 Spark를 다운받았습니다.
wget https://www.apache.org/dyn/closer.lua/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
Spark-3.3.2를 사용했고, 공식문서는 다음과 같습니다.
Downloads | Apache Spark
Download Apache Spark™ Choose a Spark release: Choose a package type: Download Spark: Verify this release using the and project release KEYS by following these procedures. Note that Spark 3 is pre-built with Scala 2.12 in general and Spark 3.2+ provides
spark.apache.org
다운받은 Spark-3.3.2~.tgz 파일을 압축풀기를 합니다.
그리고 spark-3.3.2-bin-hadoop3/conf 디렉토리로 이동합니다.
cd spark-3.3.2-bin-hadoop3/conf
Spark의 환경설정파일을 수정하겠습니다.
slave1 VM의 모습을 가져와보았습니다.
Spark 환경설정파일을 template파일 형태로 제공하기 때문에 쉽게 설정할 수 있다는 장점이 있습니다.
지금은 slave1의 모습을 가져왔지만 master, slave1,2,3,4 VM 모두 적용합니다.
cat spark-defaults.conf.template >> spark-defaults.conf
cat spark-env.sh.template >> spark-env.sh
cat 명령어를 사용하여 spark-defaults.conf.template 파일을 spark-defaults.conf 라는 이름으로 복사합니다
마찬가지로 spark-env.sh.template 파일을 spark-env.sh 로 복사합니다.
spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master/user/bigdata/spark_eventLog
spark.ui.enabled true
spark.ui.killEnabled true
spark.ui.port 4040
spark.sql.warehouse.dir hdfs://master/user/bigdata/spark-warehouse
spark-env.sh
export SPARK_MASTER_WEBUI_PORT=18080
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export SPARK_MASTER_HOST=master
export HADOOP_HOME=/usr/local/hadoop-3.3.4
#export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
그리고 Master VM에만 저는 workers 파일을 만들어 아래와 같이 설정하였습니다.
그리고 환경변수를 설정하기 위하여 ~/.bashrc에 다음과 같이 추가합니다.
#SPARK
export SPARK_HOME=/usr/local/spark-3.3.2-bin-hadoop3
spark-defaults.conf를 보면 hdfs에 디렉토리 주소를 지정한 것을 확인할 수 있습니다.
spark.eventLog.dir hdfs://master/user/bigdata/spark_eventLog
spark.sql.warehouse.dir hdfs://master/user/bigdata/spark-warehouse
start-all.sh로 Hadoop을 실행시키고 hdfs dfs -mkdir 명령어로 두 디렉토리를 생성합니다.
spark를 hadoop의 hdfs와 연동해서 사용하며 Log는 spark-eventLog에 저장되며 spark를 이용하여 만든 테이블은 spark-warehouse에 저장합니다.
hadoop을 start-all.sh로 실행시켰다면 jps 명령어를 입력했을 때 아래와 같은 모습입니다.
master VM과 slave1 VM의 모습만 가져왔습니다.
master VM에서 spark를 실행시키고 다시 jps 명령어를 입력해보겠습니다.
먼저 /sbin 디렉토리로 이동한뒤에 ./start-all.sh 명령어를 입력합니다.
Hadoop만 실행시킨것과 다르게 master VM에는 master, slave1 VM에는 Worker가 실행된것을 확인할 수 있습니다.
또한 spark-env.sh에서 적용했던 18080포트로 들어가보면 아래와 같은 화면이 보이게 됩니다.
export SPARK_MASTER_WEBUI_PORT=18080
위의 방법으로 Spark 분산환경을 구축할 수 있었습니다.
이후에 알게된 내용을 정리하겠습니다. 참고한 공식문서는 아래와 같습니다.
https://spark.apache.org/docs/latest/spark-standalone.html
https://spark.apache.org/docs/latest/running-on-yarn.html
위의 클러스터 환경을 구축할 때 workers 파일에 4개의 VM의 이름을 적었습니다.
위의 standalone 공식문서를 확인해보면 standalone으로 클러스터를 구축하려면 workers 파일에 호스트의 이름이 한 줄에 하나씩 포함되어야 한다고 합니다.
yarn을 이용하여 cluster 환경을 구축할 때에는 workers에 호스트의 이름을 적지 않아도 되는것 같습니다.
yarn을 이용할 때는 HADOOP_CONF_DIR 또는 YARN_CONF_DIR를 설정해야 하며
위의 spark-env.sh에 작성되어 있는 것을 확인할 수 있었습니다.
따라서 포트 18080에 접속하여 확인한 worker는 yarn의 worker가 아니라 standalone의 worker로 추측됩니다.
가상머신을 이용하여 분산환경을 구축하였는데 가상머신또한 로컬컴퓨터안에 컴퓨터를 만드는 개념이기 때문에 standalone의 범주에 포함되어 있는지 아니면 독립된 컴퓨터라 가정하고 Hadoop 분산 환경의 Yarn에 포함되는지는 아직 잘 모르겠습니다..
'데이터 엔지니어링' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 6 (0) | 2023.03.28 |
---|---|
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 5 (0) | 2023.03.28 |
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 4 (0) | 2023.03.28 |
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 2 (0) | 2023.03.24 |
[빅데이터를 지탱하는 기술] 트위터 API를 이용한 데이터 파이프라인 만들기 # 1 (0) | 2023.03.24 |