Blog

Apache Spark 을 이용한 빅데이터 분석 (2)

Spark

사전 설치

jdk8
hadoop-3.2.2
spark-3.1.1-bin-hadoop3.2
zeppelin-0.9.0
jupyter-notebook
rstudio

실행하기

Hadoop 실행

$ ./hadoop3/sbin/start-all.sh WARNING: Attempting to start all Apache Hadoop daemons as spark in 10 seconds. WARNING: This is not a recommended production deployment configuration. WARNING: Use CTRL-C to abort. Starting namenodes on [spark-master-01] Starting datanodes Starting secondary namenodes [spark-master-01] Starting resourcemanager Starting nodemanagers
Shell
Hadoop Web UI: {IP}:50070
Yarn Web UI: {IP}:8088

자바 프로세스 보기

$ jps 0000 Jps 0001 ResourceManager 0002 SecondaryNameNode 0003 NameNode
Shell

Pyspark 실행

$ cd spark $ mkdir -p conf-yarn $ cd conf-yarn $ vim core-site.xml $ vim yarn-site.xml $ YARN_CONF_DIR=$HOME/spark3/conf-yarn ./bin/pyspark --master yarn
Shell
core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master-01:9000/</value> </property> </configuration>
XML
yarn-site.xml
<?xml version="1.0"?> <configuration> <property> <name>yarn.resourcemanager.address</name> <value>master-01:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master-01:8130</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master-01:8188</value> </property> </configuration>
XML

Pyspark ( + Resource 설정 )

$ YARN_CONF_DIR=$HOME/spark3/conf-yarn ./bin/pyspark \ --master yarn \ --executor-memory 2G \ --executor-cores 2 \ --num-executors 3
Shell

HDFS 업로드

$ cd $HOME/hadoop3 $ ./bin/hdfs dfs -mkdir /data $ ./bin/hdfs dfs -put $HOME/data /data/
Shell
hdfs://{IP}:{PORT}/data/* 경로로 파일을 읽어올 수 있다

내용

YARN 이 각 worker 들을 관리
masterworker-01, worker-02, worker-03
pypsark 로 Application 을 실행하는 순간 기본적으로 1Core, 1GiB 가 할당되고 이를 나눠서 Container 들을 만듬 ( Yarn 기준 )
YARN 은 Application Master (이하 A.M) 을 한개 더 띄움
A.M 을 제외한 나머지 Worker 들은 overhead 로 인해 1GiB (고정수치는 아님) 메모리를 더 할당함
[Application Manager] → [Executors]
Storage Memory 는 메모리에 캐시할 수 있는 영역이다
Storage Memory 는 지정한 메모리의 50~60% 정도 할당된다
Shuffle 을 할 땐 기본적으로 Thread 를 200개 사용함 (튜닝 포인트)
Driver 가 파일 사이즈를 판단하여 각각 Task 를 분할함
(YARN + HDFS)으로 실행하는 경우 Executor 는 Spark 를 설치하지 않아도 된다
필요한 라이브러리, 모듈등은 모두 HDFS 에 Staging 에 업로드 되고, Executor 는 그 내용을 사용한다