Skip to content
sukam09 edited this page Jun 12, 2017 · 22 revisions

Zeppelin

최근 수정 시각: 2017-06-13 03:31:38+0900

목차

  1. 개요
  2. 특징
  3. 멤버
  4. 작업 내역
    4.1. 2017년 5월 16일
    4.2. 2017년 5월 30일
    4.3. 2017년 6월 12일
  5. Zeppelin 설치 사례
    5.1. 실패 사례
    5.1.1.
    5.1.2.
    5.1.3.
    5.2. 성공 사례
  6. 외부 링크

1. 개요

Zeppelin

Apache Software Foundation에서 진행하고 있는 오픈소스 프로젝트인 Zeppelin에 학부생 수준으로 기여함을 목적으로 하는 오픈소스 프로젝트.

Apache Zeppelin은 Spark를 통한 데이터 분석의 불편함을 Web 기반의 notebook을 통해서 해결해보고자 만들어진 프로젝트이다. Web 기반 Notebook 스타일 환경이란 Web에 워드프로세서 처럼 아무거나 입력 가능한 하얀 화면이 뜨고 여기에 코드를 작성-실행-결과확인-코드수정을 반복하면서 원하는 결과를 만들어 낼 수 있는 작업환경을 말한다.

Zeppelin은 비교적 최근에 등장한 분석도구로서 아파치 소프트웨어 재단의 후원을 받으며 개발이 되고 있다. 사용자들은 Zeppelin을 이용하여 Web에서 Python, Scala등의 다양한 언어를 섞어가며 분석 코드를 짤 수 있고 이 결과를 바로 Graph로 시각화하여 볼수 있다. 여기에 더해 Zeppelin은 넓어져가는 빅데이터 분석 도구 시장의 다양한 니즈에 맞추기 위해서 Spark 뿐만이 아닌 Livy, Cassandra, Lens, SQL 등등의 다른 데이터 분석도구나 데이터베이스에 접근하여 쿼리하는 것을 쉽게 할 수 있는 확장 기능들을 지원한다. 오픈소스를 기반으로 빅데이터 분석 시스템을 구성하는 기업들은 다양한 기술 스택을 서로 엮어서 시스템을 구성하게 되는데 Zeppelin 하나만 있으면 이들 시스템의 각 요소들에 자유롭게 접근하여 데이터를 다룰 수 있게 된 것이다. 이러한 확장성 때문에 Zeppelin은 후발주자임에도 매우 빠르게 여러 기업들에 사용되기 시작했고 널리 알려지게 된 것이다.

이러한 확장성은 Zeppelin의 Interpreter라는 플러그인 구조로 지원되는데 각 Interpreter들은 Zeppelin의 Web Interface를 통해서 입력받은 분석 코드를 local 또는 원격에서 실행할 수 있다. 예를들어 Spark로 Map-Reduce하는 코드를 작성하고 실행을 누르면 Zeppelin안에 설치된 Spark Interpreter가 이를 받아 Spark Master에 Client 라이브러리를 통해 코드를 보내고 그 실행 결과를 받아 다시 Web Interface에 보내준다. 또한 Bash로 쉘 스크립트를 짜면 Zeppelin안에 탑재된 Shell Interpreter가 이를 받아 Zeppelin이 설치된 서버에서 shell script를 실행하고 그 결과를 Web Interface에 보내주는 형태이다. Zeppelin 자체가 데이터 분석 처리를 하지 않기 때문에 분석 시스템이나 데이터베이스 등이 미리 구성되어 있어야 하고, Zeppelin과 이들 시스템을 연결해주는 작업을 해야 한다는 어려움이 있지만 한번 연결해 두면 같은 Notebook에서 Pyspark와 SparkR, 그리고 Cassandra DB를 한번에 조회하는 등의 일을 편하게 할 수 있다는 장점이 있다.

이외 Zeppelin은 몇 가지 장점을 더 가지는데 그 중 하나가 협업 기능이다. Google Apps를 보면 여러 사람이 같이 Google Sheet나 Google Document등을 편집할 수 있는데 Zeppelin도 WebSocket을 활용하여 같은 Notebook을 여러 사람이 동시에 편집할 수 있는 기능을 제공하고 있다. 한 사람이 분석 코드를 짜면 다른 사람이 그 결과를 원격에서 실시간으로 바로 확인할 수 있는 것이다. 이러한 기능은 원격으로 공동 작업을 통해서 실험과 논문을 작성하는 일이 많은 연구소에서 환영할 만한 기능이다. 다만 Google Apps처럼 문서의 히스토리까지 알아서 관리해주는 기능은 2016년 현재 제공되지 않고 있다(Git를 이용하여 비슷하게 지원하는 방법은 존재한다).

이뿐만 아니라 Zeppelin은 Angular JS를 활용하여 Web Interface가 만들어졌기 때문에 Angular JS의 장점인 Data Binding 기능을 응용한 보고서 또는 Dashboard 등을 만들수 있다. 예를 들어 학교에서 학생들의 성적을 분석하는 보고서를 만든다고 하자. 이 보고서에는 50점 이상의 학생들의 분포만 보여주는 그래프가 포함되어 있고 이 그래프를 만든 이는 코드를 고쳐 50점을 60점으로 수정한 그래프를 쉽게 만들수 있을 것이다. 하지만 보고서를 보는 사람이 코드를 잘 모르는데 40점이나 70점 등으로 이리저리 확인해서 보고 싶다면? Zeppelin에선 이 기준점수를 TextBox로 받을 수 있도록 Binding을 걸 수 있다. 이렇게 하면 코드를 모르는 사람도 보고서에서 점수만 고치면 그래프가 자동으로 변경된 값을 반영하여 새로 그려지므로 좀더 사용자 친화적으로 보고서가 만들어진다. Binding 뿐만 아니라 Angular 인터프리터를 사용하여 AngularJS가 가미된 HTML 코드를 실행하면 Zeppelin 소스를 수정하지 않아도 여러 GUI를 만들어 낼수 있어 다양한 Dashboard를 구성할 수 있다.

출처: 오픈소스 일기 2: Apache Zeppelin 이란 무엇인가?

2. 특징

Zeppelin의 특징을 요약하자면 다음과 같다.

  1. 깔끔한 인터페이스를 제공하여 사용자들이 무엇을 해야 할지 알게 해 준다.
  2. 많은 프로그램이나 프로그래밍 언어를 분석할 수 있는 등 호환성이 높다.
  3. 다른 이용자들과 함께 쉽게 협업할 수 있다.
  4. 일반인 입장에서 설치하는 것은 매우 어렵다.

3. 멤버

  • 구본우(조장): 정적 페이지 개설, Zeppelin java code 분석
  • 이승원: wiki 편집, Zeppelin python code 분석
  • 김진우: Zeppelin 테스트, ppt 작성, Zeppelin python code 분석

4. 작업 내역

지금까지의 작업 내역을 날짜별로 기록한 부분이다.

4.1. 2017년 5월 16일

  • 새로운 repository (named "105") 생성
  • "105" 에 Zeppelin fork 시도, 실패 (fetch 부재)
  • 새로운 repository (named "105B") 생성
  • "105B" 에 Zeppelin fork 시도, 실패 (add 문제 생김)
  • 팀에서 17-1-SKKU-OSS/zeppelin 미러링
  • wiki page 생성

4.2. 2017년 5월 30일

  • Zeppelin 설치 시도, 실패
  • wiki 목차 생성

4.3. 2017년 6월 12일

  • Zeppelin 설치 성공
  • python으로 Zeppelin 튜토리얼 진행

5. Zeppelin 설치 사례

Zeppelin 설치를 실패한 사례와 성공한 사례를 설명하는 부분이다.

5.1. 실패 사례

5.1.1.

  1. 파일 다운로드 후 압축 해제 (성공)
  2. 환경 설정 SPARK_HOME, PYTHONPATH, PYSPARK_PYTHON 설정 제플린 포트 변경 (이 과정을 위해, spark 설치(일단? 성공))
  3. 실행 “bin/zeppelin-daemon.sh => 실패 ERROR

5.1.2.

  1. 파일 다운로드 후 압축 해제

  2. bin 디렉토리 내에 있는 zeppelin.cmd 실행

    ./zeppelin.cmd: line 1: @echo: command not found ./zeppelin.cmd: line 3: syntax error near unexpected token ('

    ./zeppelin.cmd: line 3: REM Licensed to the Apache Software Foundation (ASF) under one or more’

5.1.3.

  1. maven 설치, jdk 설치 후 PATH 설정(이 부분도 상당히 복잡했으나 설명은 생략)

  2. 소스 받기

    $ git clone https://github.com/apache/incubator-zeppelin

  3. PATH 등록

    $ export ZEPPELIN_HOME={Zeppelin Directory}

    $ export PATH=$ZEPPELIN_HOME/sbin:$PATH

  4. Maven POM 변경

    $ vi $ZEPPELIN_HOME/spark/pom.xml

  5. Config 변경

    $ mv $ZEPPELIN_HOME/conf/zeppelin-env.sh.template $ZEPPELIN_HOME/conf/zeppelin-env.sh

    $ mv $ZEPPELIN_HOME/conf/zeppelin-site.xml.template $ZEPPELIN_HOME/conf/zeppelin-site.xml

  6. Zeppelin-env.sh 변경

    Export SPARK_HOME=/home/logvadmin/spark-1.5.2-bin-hadoop2.7

  7. Zeppelin 실행 shell 기동

    $ ZEPPELIN_HOME/bin/zeppelin-daemon.sh start

ERROR 경로 에러…

5.2. 성공 사례

  1. homebrew를 이용해 scala 설치

    $ brew install scala

  2. 환경변수 저장

    $ export SCALA_HOME=/usr/local/bin/scala

    $ export PATH=$PATH:$SCALA_HOME/bin

  3. homebrew를 이용한 spark 설치

    $ brew install apache-spark

  4. 설치 확인 spark-shell (경로 오류로 실패, 하지만 설치되었을 거라 믿고 다음 진행)

  5. homebrew를 이용해 Zeppelin 설치

    $ brew install apache-zeppelin

  6. Zeppelin 실행

    $ /usr/local/Cellar/apache-zeppelin/0.7.1/bin/zeppelin-daemon.sh start

    Log dir doesn’t exist, create /usr/local/Cellar/apache-zeppelin/0.7.1/libexec/logs

    Pid dir doesn’t exist, create /usr/local/Cellar/apache-zeppelin/0.7.1/libexec/run

    Zeppelin start [ OK ]

6. 외부 링크

정적 페이지

본 프로젝트를 설명하는 정적 페이지이며 Wordpress를 기반으로 한다.