본문 바로가기
IT 지식/빅데이터 & 분석

[빅데이터] Spark & Zeppelin

by 이민우 2021. 7. 30.
728x90
반응형

 Apache Spark는 2011년 버클리 대학의 AMPLab에서 개발되어 아파치 재단의 오픈소스로 관리되고 있는 인메모리 기반의 대용량 데이터 고속 처리 엔진으로, 범용 분산 클러스터 컴퓨팅 프레임워크이다.

 

 Apache Spark는 다음과 같은 특징을 가진다.

 

1) 인메모리 기반의 빠른 처리

 

 기존의 하둡의 작업처리인 맵리듀스는 작업의 중간 결과를 디스크에 쓰는 과정을 거쳤고, 이로 인해 작업 속도가 떨어지는 결과가 생겼다.

 그에 반해 스파크는 중간 결과를 디스크가 아닌 메모리에 저장을 하는 방식을 채택했고, 이로 인해 반복 작업의 처리 효율이 높아졌다.

 

2) 다양한 언어 제공

 

 Java, Python, R, Scala 등 다양한 언어를 제공한다.

 

3) 다양한 컴포넌트 제공

 

 추가적인 소프트웨어의 설치 없이 단일 시스템 내에서 스트림 처리, SQL, 머신러닝 처리, 그래프 연산 등을 지원한다.

 

4) 다양한 클러스터 매니저 지원

 

 하둡의 Yarn, Mesos 등 다양한 클러스터 매니저 포맷을 지원하며, HDFS, Cassandra, HBase 등 다양한 데이터 포맷 또한 지원한다.

 

5) 다양한 파일 포멧 지원 및 HBase, Hive와 연동 가능

 

 

 

 

스파크 컴포넌트

 

 

스파크 코어

스케줄링, 메모리 관리, 장애 복구와 같은 기본적인 기능을 수행한다.

RDD, DataFrame, DataSet을 이용한 스파크 연산 처리 등이 가능하다.

 

SparkSQL

RDD, DataSet, DataFrame 등의 작업을 생성하고 처리한다.

하이브 메타스토어와 연결하여 하이브의 메타 정보를 이용한 SQL 작업을 처리할 수 있다.

 

SparkStreaming

실시간 데이터 스트림을 처리하는 컴포넌트이다.

 

 

 

기본적으로 스파크는 마스터-슬레이브 구조이다.

여기서 마스터는 드라이버 프로세스, 슬레이브는 익스큐터이다.

 

드라이버 프로세스는 사용자 프로그램을 태스크로 받아 익스큐터 프로세스의 작업과 관련된 분석 및 관리를 담당한다.

이 때 태스크 스케줄링은 DAG를 기반으로 한다.

 

익스큐터드라이버 프로세스가 할당한 작업을 수행하고 결과를 반환한다.

 

 

 

스파크에는 여러 API가 존재한다. 그 중 저수준 API에는 RDD와 분산형 변수가 속해있고, 구조적 API에는 DataSet, DataFrame, SQL이 속해있다.

 

저수준 API는 비구조적으로, 스파크에서 데이터를 다루기 위한 기본 API이다.

저수준 API의 대표는 RDD이다.

 

RDD는 인메모리 데이터 처리를 통하여 처리 속도를 높였다. 하지만 저수준이라 최적화가 어렵고 데이터의 형태, 즉 스키마를 표현할 수 없다.

 

고수준의 구조적 API는 최적화를 자동으로 수행하는 구조적 API이다.

예시로는 DataFrame과 DataSet이 있다.

 

DataFrame은 데이터를 스키마 형태로 추상화아여, 데이터를 테이블처럼 다룰 수 있다.

 

DataSet은 스파크 2.0부터 스파크 sql의 메인 API로 지정되었다. 데이터의 타입 체크, 직렬화를 위한 인코더, 카탈리스크 옵티아미어 증을 지원하여 처리 속도를 증가시켰다.

 

 

 

 

 

Apache Zeppelin

 

 

아파치 제플린은 아파치 스파크를 기반으로 한 시각화 툴이다.

 

 

CLI가 아닌 GUI를 기반으로 하여 노트북 형태의 코딩도 가능하고, sql도 날릴 수 있다. 그리고 이렇게 받아온 데이터를 비단 테이블 형태로 출력하는 것만이 아닌, 코딩 없이 여러 GUI의 형태로 시각화할 수 있다.

 

 

스파크를 기반으로 하기에 스파크에서 지원하는 언어인 스칼라, 파이썬, R 등을 자유자재로 사용할 수 있으며,

백엔드 인터프리터 또한 스칼라에 국한되지 않고 아파치 타조, 하이브, 플링크 등 다양한 인터프리터를 사용할 수 있다.

 

설치는 다음 과정을 따라하면 된다.

 

1. 설치 파일 다운로드

wget https://mirror.navercorp.com/apache/zeppelin/zeppelin-0.9.0/zeppelin-0.9.0-bin-all.tgz

 

2. 압축 풀기

tar -xvzf zeppelin-0.9.0-bin-all.tgz

 

3. Conf 파일 생성

cd zeppelin-0.9.0-bin-all/conf/


cp zeppelin-site.xml.template zeppelin-site.xml

cp zeppelin-env.sh.template zeppelin-env.sh

cp shiro.ini.template shiro.ini

 

4. Conf 파일 수정

4-1. zeppelin 의 기본 포트는 8080이기에 변경이 필요하다. zeppelin-site.xml 에서 변경 가능하다.

4-2. zeppelin-env.sh 에서 JAVA_HOME, SPARK_MASTER, SPARK_HOME, HADOOP_CONF_DIR, HBASE_HOME 등을 설정한다.

4-3. shiro.ini 에서 어드민 계정을 생성한다. <ID> = <password>, <role>  ex) admin = mapr, admin

 

 

5. 실행

cd ../bin

./zeppelin-daemon.sh start

 

728x90
반응형