Julie의 Tech 블로그

Spark, Zeppelin, Scala에 대해 본문

Tech/MLOps

Spark, Zeppelin, Scala에 대해

Julie's tech 2021. 5. 12. 23:27
728x90

빅데이터 프레임워크에는 Hadoop과 Spark가 있다. Hadoop은 흔히들 접할 수 있지만, 요즈음 Spark에 대한 관심과 니즈가 증가하고 있는 듯 하다. 두 프레임워크 모두 오픈소스이며, 빅데이터를 처리하기 위한 기술로 등장했다.

Spark를 짚기 전에 간단하게 Hadoop에 대해 정리해보면,

Hadoop은 크게 HDFS와 Map Reduce 로 구성되어있다. 특정 작업을 여러 노드로 분할하여 매핑(Map)한 뒤 각각 생성된 중간 결과를 집계하여 최종 결과(Reduce)를 도출하는 방식으로 구성되어 있다. 즉 장시간 소요되는 배치처리를 효율적으로 진행하기 위해 적합한 방식이기 때문에 속도 측면에서 개선요구사항이 있었다.

사용성으로도 low-level 환경이다 보니 사용자와 interactive한 사용 환경이 구성되어 있지 않아 불편한 점이 있었다.

Apache spark

기존 하둡 대비 속도가 최대 100배 이상 빠른 Spark는 MR로 2단계 처리가 필요한 Hadoop과 달리 DAG를 활용하여 작업을 수행한다.

함수형 프로그래밍 언어 Scala 사용하고, interactive Shell 활용 가능(Zeppelin)해 사용성도 높였다.

대용량 메모리를 요구하는 데이터를 활용할 시에 적절한 프레임워크라고 할 수 있다.

Hadoop과의 차이점

하둡의 경우 맵리듀스 결과물을 HDFS에 바로 저장해야하기에 디스크 사용 빈도가 높을 수 밖에 없으나 스파크는 RDD(Resilient Distributed Data)를 활용하여 효율적이고 빠르게 전달하여 처리 속도를 높일 수 있었다.

Scala 란

기존의 Hadoop 은 JAVA로 MapReduce 연산 그리고 알고리즘을 구현해야했다. 이로 인해 간단한 작업임에도 코드가 길어져 생산성과 가독성이 떨어졌다.

반면 Scala는 간결하게 구현되도록 설계된 함수형 프로그래밍언어이다. 용어의 어원에서부터 그 사용성을 파악할 수 있는데, “적은 코드 양으로 방대한 규모의 시스템을 만들 수 있다”는 확장성을 갖고가고자 ’Scalable’에서 따왔다고 한다.

Zeppelin 이란

AWS Glue 서비스를 이용하면서 dev endpoint로 Zeppelin을 연결해서 쓰곤 하는데,

Zeppelin은 html, sql, shell script, scala, python, java 등을 interpreter 형태로 지원한다.

또한 UDF (User defined function) 역시 지원한다.


Zeppelin 설치 가이드 (Mac OS)

간단하게 4단계를 거쳐 Zeppelin을 로컬에서 실행할 수 있다.

AWS 리소스에(S3, Athena 등) 접근하여 dev endpoint 환경으로도 사용 가능하다. (ssh로 터미널에서 연결)

1. bash_profile에서 java 환경설정 (1.8.0 버전)

.bash_profile에서 /JAVA 를 서칭하게 되면,

export JAVA_HOME=$(/usr/libexec/java_home) 와 같은 구문을 발견할 수 있음.

즉 /usr/libexec/java_home 명령어로 JAVA_HOME 설정 경로 확인가능

# /usr/libexec/java_home을 입력하게 되면 jdk 가 설치되어있는 디렉토리를 뱉어냄.

# JAVA 버전이 여러개일 경우, 내가 원하는 버전으로 JAVA_HOME을 설정할 때 사용함

/Library/Java/JavaVirtualMachines/ 까지 ll로 서칭하면 여러개 jdk가 설치된 것을 확인 가능

# 해당 경로로 export 해도 되나, /usr/libexec/java_home -v 1.8로 버전 붙여서 1.8.0 버전으로 변경가능

2. Jenv 설정

jenv 설정 관련 참고 자료

https://www.jenv.be/

https://jogeum.net/15

3. SVM 설치

svm 소스코드 : https://github.com/yuroyoro/svm

터미널 창에서 해당 주소로 svm 소스파일을 wget으로 받아 터미널에 설치한다.

http://scala.masanorihashimoto.com/2014/04/how-to-install-the-scala-version-manager-on-your-mac/

위 주소로 설치과정 따라하기 (# 2.11.12 버전 설치함)

4. Zeppelin Download

Zeppelin 다운받고 해당 tgz 포맷 압축 후 개인 프로젝트 폴더로 옮긴다.

후에 터미널창에서 bin/zeppelin.sh start 명령어로 제플린을 가동한다.

Localhost:8080 으로 접속하면 Zeppelin 이 정상적으로 실행되는 것을 확인할 수 있다.


+ 내가 보기 위해 추가하는 기록

Hadoop의 구성요소

- YARN : 리소스 관리자 (CPU, 메모리를 관리)

- Tez : MR의 단점을 해결하여 속도를 개선함

- Hive : 쿼리 엔진. 쿼리를 입력하면 MR 프로그램으로 변환해줌

반응형