Data Forest 상품 사용해 보기 (이렇게 시작하세요!)

Ha Ryoung Park
NAVER CLOUD PLATFORM
11 min readNov 30, 2021

--

(시작에 앞서) 본 포스팅은 네이버 클라우드 플랫폼 Data Forest 실제 사용자를 위한 내용으로, Hadoop의 기본 사용 방법 보다는 Data Forest상품 설명과 기본 사용 방법에 포커스를 맞추어 설명합니다.

Data Forest 란?

네이버 클라우드 플랫폼 Data Forest네이버 검색 데이터 처리에 사용된 멀티테넌트 Hadoop 클러스터를 Cloud 환경에 맞춰 개발한 분석 플랫폼입니다.

Hadoop 3.1 기반의 보안이 적용된 빅데이터 클러스터로 Hadoop 모듈인 HDFS, YARN, MapReduce 를 사용할 수 있으며, Zookeeper, Oozie, Spark, HBase, Hive, Zeppelin 등을 지원하고 있습니다. Yarn Application 형태로 서비스를 실행하여 사용자가 빠르게 빅데이터 에코시스템을 만들 수 있는 환경을 제공합니다.

즉, 사용자는 대규모 데이터를 분산 스토리지에 쉽게 수집 및 저장하고, AI와 머신러닝을 이용해 빅데이터를 통합 분석할 수 있습니다.

이미지 자세히보기 : Data Forest 소개

Data Forest 상품 관련 자세한 기술과 장점은 아래 사용자 가이드를 참고하시기 바랍니다.

Data Forest 시작하기

Data Forest 상품 사용을 위해서 먼저 서비스 계정 생성이 필요합니다.

ncloud.com 포털 > Data Forest > 계정 생성 화면

생성된 계정에는 두 종류의 credential 이 존재합니다. 인증 방법에 맞는 credential을 이용해야 앱이나 클러스터에 정상적으로 접속할 수 있습니다.

  • ID / Password : Knox 로그인을 하거나 앱의 WEB UI 접속 시 계정 정보가 필요합니다. 계정 생성시 등록한 ID와 Password로 인증합니다.
  • Kerberos : Ecosystem 에서 Kerberos Auth 가 필요할 때나 SPNEGO 인증을 할 때 Kerberos Credential 을 사용합니다. 클러스터 접속 정보 > 커버러스 키탭 다운로드 기능을 통해 Keytab을 다운로드 받을 수 있습니다.
※ Kerberos Keytab 파일은 담당자 외에 다른 사람이 접근 할 수 없도록 관리해야 합니다. 
※ Kerberos Keytab 파일이 유출되면 해당 파일을 얻은 제3자가 Keytab에 명시된 Principal의 권한을 사용 할 수 있습니다.

계정 생성이 완료되면, 해당 계정으로 [App 생성] 메뉴를 클릭해 앱을 생성 할 수 있으며 생성하려는 앱의 기본 설정도 지정할 수 있습니다. 앱 타입, 앱 이름, 실행시킬 큐 지정, 리소스 설정 을 지정 후 [다음] > [생성] 버튼을 클릭해 앱을 생성 할 수 있습니다.

현재 Data Forest에서는 총 14가지 종류의 앱을 제공하고 있습니다. 모든 앱은 Docker 컨테이너로 실행되며, 사용자가 쉽고 빠르게 서비스를 사용할 수 있도록 합니다. 따라서 사용자 마다 최적화된 빅데이터 시스템을 구축할 수 있습니다.

Data Forest에서 지원하는 앱 중 특정 앱은 아래와 같이 상호 의존성을 가지고 있습니다. 관련 앱과 생성 순서를 참고하여 생성합니다.

App 간 의존성과 연동 가능한 방향

Data Forest는 다수의 사용자가 사용하는 공용 클러스터 입니다. 사용자가 직접 클러스터 서버에 접근할 수는 없는 구조이기 때문에, Job을 제출 할 때는 별도로 클라이언트 구성을 하거나 App을 이용하게 됩니다.

Data Forest에서 제공하는 모든 서비스에 대한 클라이언트 역할을 하는 DEV 앱을 생성해봅니다. DEV 앱 생성만으로도 매우 간단하고 빠르게 클라이언트 환경을 구성할 수 있습니다.

앱을 생성하면 바로 Yarn 큐에 제출됩니다. 현재 Data Forest 에서 사용할 수 있는 큐는 dev, batch, longlived 입니다. 앱 생성 시 각 큐의 정책에 맞게 사용합니다.

  • dev : 개발 및 테스트 또는 일회성 작업을 위한 개발용 공용 큐
  • batch : 서비스를 위한 배치작업 / Spark Streaming작업 등의 배치잡 공용 큐
  • longlived : 서비스 App 들을 위한 공용 큐
ncloud.com 포털 > Data Forest > App 생성 화면

생성한 앱이 정상적으로 구동이 되면 상태가 Stable 상태가 됩니다. 이는 Application Master에 리소스가 할당되어 애플리케이션이 실행 중인 상태를 의미합니다.

ncloud.com 포털 > Data Forest > App 상세 정보

생성한 앱의 상세 정보 확인 화면 중간에 위치한 [Quick Links] > [Shell] 링크를 클릭합니다. 생성시 등록한 ID와 Password로 로그인을 하면 사용자는 Dev 앱의 웹 쉘에 접속할 수 있습니다.

웹 셀 접속 후 두 가지 동작을 테스트 해보겠습니다.

1. kinit 으로 인증하고 hadoop 커맨드 실행하기

hadoop 커맨드를 실행하기 위해서는 반드시 kerberos 인증이 선수행되어야 합니다. kinit 이후 hadoop fs -ls 명령어로 example01 계정의 hadoop 유저 디렉토리를 확인할 수 있습니다.

만약 kerberos 인증이 되지 않은채로 hadoop 커맨드 수행 시 아래와 같이 Access Exception 에러가 발생합니다.

2. Spark Job 제출하기

DEV앱은 클라이언트 설정이 적용되어 있으므로 바로 spark-shell, pyspark같은 REPL을 실행할 수 있습니다. 간단히 spark-submit을 사용하여 클러스터에 Spark Job을 제출 할수도 있습니다.

[example01@shell-0.dev.example01.kr.df.naverncp.com ~][df]$ spark-shell
Warning: Ignoring non-spark config property: history.server.spnego.keytab.file=/etc/security/keytabs/spnego.service.keytab
Warning: Ignoring non-spark config property: history.server.spnego.kerberos.principal=HTTP/_HOST@KR.DF.NAVERNCP.COM
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://198.19.3.194:4040
Spark context available as 'sc' (master = yarn, app id = application_1632725239696_0471).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.3.2.3.1.0.0-78
/_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_112)
Type in expressions to have them evaluated.
Type :help for more information.

scala> val rdd1 = sc.textFile("file:///usr/hdp/current/spark2-client/README.md")
rdd1: org.apache.spark.rdd.RDD[String] = file:///usr/hdp/current/spark2-client/README.md MapPartitionsRDD[1] at textFile at <console>:24

scala> val rdd2 = rdd1.flatMap(_.split(" "))
rdd2: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at flatMap at <console>:25

scala> val rdd3= rdd2.map((_, 1))
rdd3: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at <console>:25

scala> val rdd4 = rdd3.reduceByKey(_+_)
rdd4: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:25

scala> rdd4.take(10)
res0: Array[(String, Int)] = Array((package,1), (this,1), (Version"](http://spark.apache.org/docs/latest/building-spark.html#specifying-the-hadoop-version),1), (Because,1), (Python,2), (page](http://spark.apache.org/documentation.html).,1), (cluster.,1), ([run,1), (its,1), (YARN,,1))

scala> rdd4.saveAsTextFile("hdfs://koya/user/example01/result")
scala>

hadoop 커맨드를 사용하여 아래처럼 결과를 확인 할 수 있습니다.

[example01@shell-0.dev.example01.kr.df.naverncp.com ~][df]$ 
[example01@shell-0.dev.example01.kr.df.naverncp.com ~][df]$ hadoop fs -ls /user/example01/
Found 3 items
drwx------ - example01 services 0 2021-11-18 18:59 /user/example01/.sparkStaging
drwxr-x--- - example01 services 0 2021-11-18 18:32 /user/example01/.yarn
drwx------ - example01 services 0 2021-11-18 18:59 /user/example01/result
[example01@shell-0.dev.example01.kr.df.naverncp.com ~][df]$

마치며

이상 Data Forest 상품 설명 및 기본 사용 매뉴얼과, 간단한 Spark Job 제출 방법을 설명하였습니다. Data Forest 상품 사용에 도움이 되셨길 바랍니다.

# Written by NAVER Cloud, Data Platform 박하령

--

--