CloudHadoop 에서 Spark 3 버전 사용하기

Ha Ryoung Park
NAVER CLOUD PLATFORM
9 min readDec 21, 2020

--

안녕하세요, 네이버 클라우드 플랫폼입니다.

네이버 클라우드 플랫폼의 Cloud Hadoop 에서는 Spark 2.3 을 기본적으로 지원하고 있습니다. 하지만 만약 사용자가 자체적으로 ​임의의 Spark 버전을 사용하고 싶은 경우, 본 포스팅을 참고하여 Spark 실행 환경을 구성 할 수 있습니다.

본 포스팅에서는 Cloud Hadoop 에서 특히 Spark 3 버전을 설치하여 Spark 실행 환경을 구성해볼 수 있는 방법에 대해 설명합니다. Cloud Hadoop 1.4 버전의 Spark Hadoop 클러스터가 이미 생성되어 있다고 가정하고, 진행해보도록 하겠습니다.

사전작업

하기 테스트는 이미 client로 적용된 환경에서 실행한다고 가정하고 진행합니다. 다만 Server 상품을 이용하여 Client로 구성해야하는 경우, 설정 전에 아래와 같은 사전작업이 필요할 수 있습니다.

​​​1) 서버와 클러스터 간의 통신이 가능한지 확인합니다. 서버가 Cloud Hadoop 클러스터가 구성되어있는 ACG 에 등록되어야 합니다.

​​​2) Cloud Hadoop 클러스터의 호스트명과 IP 정보를 /etc/hosts 에 등록해야 합니다. 해당 정보는 Ambari Web Console 에서 확인 할 수 있습니다.

3) ​Spark 에서는 hadoop 의 환경 변수를 사용하기 때문에 hadoop client 구성이 필요합니다. 간단한 repo 설정과 yum 커맨드로 hadoop-client 패키지 설치를 할 수 있습니다.

3–1) hadoop-client 패키지 설치 및 구성

/etc/yum.repos.d/ambari-hdp-1.repo 파일을 구성합니다.

$ cat /etc/yum.repos.d/ambari-hdp-1.repo
[HDP-3.1-repo-1]
name=HDP-3.1-repo-1
baseurl=http://dist.kr.df.naverncp.com/HDP/centos7/3.x/updates/3.1.0.0
path=/
enabled=1
gpgcheck=0
[HDP-3.1-GPL-repo-1]
name=HDP-3.1-GPL-repo-1
baseurl=http://dist.kr.df.naverncp.com/HDP-GPL/centos7/3.x/updates/3.1.0.0
path=/
enabled=1
gpgcheck=0
[HDP-UTILS-1.1.0.22-repo-1]
name=HDP-UTILS-1.1.0.22-repo-1
baseurl=http://dist.kr.df.naverncp.com/HDP-UTILS-1.1.0.22/repos/centos7
path=/
enabled=1
gpgcheck=0

hadoop-client 를 설치하면 /usr/hdp/current/ 아래에서 hadoop-client가 생성된 것을 확인 할 수 있습니다.

$ yum clean all 
$ yum install hadoop-client
$ curl -u $AMBARI_ID:$AMBARI_PASS -H "X-Requested-By: ambari" -X GET http://$AMBARI_URI:8080/api/v1/clusters/$CLUSTER_NAME/services/HDFS/components/HDFS_CLIENT?format=client_config_tar > hdfs_client_conf.tar.gz
$ tar -xvf hdfs_client_conf.tar.gz
$ cp ~hdfs_client_conf/conf/* /usr/hdp/current/hadoop-client/conf/

4) JDK 가 설치 되어 있어야합니다.

5) python3가 서버에 미리 설치 되어 있어야 합니다. 이전 spark 버전은 python2 가 사용 가능했지만, Spark 3.0.0 부터는 python3 만 사용 가능합니다.

$ yum install -y python3

Spark 3.0.1 버전 설치

  1. 서버에서 사용하려는 spark 패키지를 홈페이지에서 다운로드 합니다. 이미 hadoop client 구성된 환경에서 실행하기 때문에 Pre-built with user-provided Apache Hadoop 를 다운로드 후 임의 디렉터리에 압축을 해제합니다.
$ wget https://downloads.apache.org/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz
$ tar xvfz spark-3.0.1-bin-without-hadoop.tgz

2. Spark 환경변수를 설정하고, 압축 해제한 패키지에 hadoop jar를 복사합니다.

# 압축해제한 Spark 디렉터리를 명시합니다.
$ SPARK_HOME=/path/to/spark-3.0.1-bin-without-hadoop
$ SPARK_CONF_DIR=/path/to/spark-3.0.1-bin-without-hadoop/conf
# config 파일 복사
$ cp /usr/hdp/current/spark2-client/conf/* $SPARK_CONF_DIR/
# hadoop 관련 jar를 Spark jars 디렉터리에 복사합니다.
$ cp -n /usr/hdp/current/spark2-client/jars/hadoop-*.jar $SPARK_HOME/jars

3. spark-submit 이 실행되는 위치에서 아래 환경변수를 설정합니다.

$ export SPARK_HOME=/path/to/spark-3.0.1-bin-without-hadoop
$ export SPARK_CONF_DIR=/path/to/spark-3.0.1-bin-without-hadoop/conf
$ export SPARK_SUBMIT_OPTS="-Dhdp.version=3.1.0.0-78"
$ export PATH=$SPARK_HOME/bin:$PATH
$ export SPARK_DIST_CLASSPATH=`$HADOOP_COMMON_HOME/bin/hadoop classpath`

4. 설치 버전 정보로 구동이 되는지 간단히 확인합니다. 여기까지 오류가 없으면 spark 3.0.1 을 사용할 수 있는 상태입니다.

$ pyspark --version 
...
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.0.1
/_/
Using Scala version...

5. spark job은 사용자 계정 {USER} 의 폴더가 HDFS의 /user 아래에 있어야 정상적으로 돌아갈 수 있습니다. /user 아래에 사용자 전용 폴더를 생성 후 owner 권한을 부여해 줍니다.

USER 가 sshuser 인 경우의 예시입니다.

$ sudo -u hdfs hadoop fs -mkdir /user/sshuser
$ sudo -u hdfs hadoop fs -chown -R sshuser:hdfs /user/sshuser/

6. pyspark 실행 시 아래 옵션을 추가하여 실행합니다.

$ pyspark --conf spark.driver.extraJavaOptions=-Dhdp.version=3.1.0.0-78 \
--conf spark.yarn.am.extraJavaOptions=-Dhdp.version=3.1.0.0-78 \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/usr/hdp:/usr/hdp:ro \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/usr/hdp:/usr/hdp:ro

7. spark-shell 도 실행합니다.

spark-shell --conf spark.driver.extraJavaOptions=-Dhdp.version=3.1.0.0-78 \
--conf spark.yarn.am.extraJavaOptions=-Dhdp.version=3.1.0.0-78 \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/usr/hdp:/usr/hdp:ro \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/usr/hdp:/usr/hdp:ro
--conf spark.kerberos.access.hadoopFileSystems=hdfs://<사용하려는 네임노드 명시>

마치며

이번 페이지에서는 Cloud Hadoop 1.4 환경에서 Spark 3.0.1 버전을 적용시키는 방법을 알아보았습니다. 기본 제공 환경이 아닌 자체적인 Spark 실행 환경을 구성하는 경우에 참고하시면 됩니다.

--

--