서울시립대학교 데이터 마이닝 연구실의 Apache Zeppelin 활용 사례 입니다.
Data Warehouse, 논문 작성, 의사소통에 제플린을 아주 유익하게 활용했습니다 ^^
제플린 노트북 언어 사용 통계 구하기 소스코드
https://gist.github.com/tae-jun/138f595228aa83e89387b5d39d33b315
1. Data Warehouse, Paper, Collaboration
Zeppelin@DMLAB
김태준(Jun Kim)
i2r.jun@gmail.com
2016. 09. 21.
Zeppelin Meetup
NAVER D2 Startup Factory
Data Mining Lab.
University Of Seoul
2. 안녕하세요, 김태준! 입니다.
• 서울시립대학교 데이터마이닝 연구실에서
• 기술 지원 (Ambari 설치, Zeppelin 설치 등...)
• 화재 예측을 위한 빅데이터 분석
• 밖에서는
• MeteMQ - IoT & JavaScript App Platform
4. 너네 제플린 왜 써?
• “화재 예측을 위한 빅데이터 분석”을 해보자!
• 화재 분석을 위한 Data Warehouse(DW)를 구축해볼까?
• 요즘 뜨는 Hive를 사용해보자!
• ETL은 뭘로 할래? Spark!
• Hive와 Spark를 함께 사용할 수 있는 도구는?
Hive, Spark 궁합 매우 좋아요~
6. • Spark, Hive를 한 곳에서
• SQL만으로 시각화
• 노트북 형식으로 소스 코드 관리
제플린 안쓰면 완전 바보 아니냐?
이 세 가지만 보고 사용했으나
더욱더 엄청난 것들이 존재했다...
7. 노트 사용 통계
•#Notebooks = 66
•#Paragraphs = 850
Language #Paragraphs Usage
spark 613 ETL, 머신러닝
spark-sql 147 분석, 시각화
markdown 55 문서 작성
hive 35 Deprecated
Spark2의 폭넓은 SQL 지원으로 Hive는 저장소로 전락함...
Hive는 거들뿐...Subquery!
저희는 제플린 노트북 이렇게 씁니다
부록: 맨 뒤에 제플린 노트 통계 구하는 코드 있습니당
8. ETL?
• Extract, Transform, Load
• Raw data를 DW에 맞게
변형하여 저장하는 과정
• 저희는 주로 공공 데이터
• Trasform 코드는 매우 길다
• DW 스키마는 변하기 마련
spark.read.csv(…)
df.write.saveAsTable(“HIVE”)
df.write.parquet(“HDFS”)
E
T
T
T
T
T
T
T
T
L끝나지 않는 transform...
11. “CHANGELOG.md”
• ETL 버전별로 테이블 생성, HDFS에 Parquet으로 저장
• CHANGELOG에서는 markdown으로 변경사항을 기
록하고, Hive 테이블을 교체하는 코드 작성
• 즉, Hive에는 현재 버전의 테이블, HDFS에는 모든 버전
의 테이블들을 Parquet으로 저장
Parquet
Latest
All
12. 삶이 윤택해짐
• 자신감과 함께 DROP TABLE
• 잘못되면 이전 버전으로 돌리면
되니까!
• CHANGELOG덕에 스키마 변
경시 어떤 버전을 변경해야 할
지 알 수 있음
spark.read.csv(…)
df.write.saveAsTable(“HIVE”)
df.write.parquet(“HDFS”)
E
T
T
T
T
T
L
T개수 줄음
처음부터 다시 ETL 노노!
17. 화재 뉴스 기사 필터링
• 1000건 정도 직접 labeling 하여 분류 모델을 만들자!
• 1000건은 내가 할테니 13만9천건은 Spark 네가 하거라
• But, 검색 결과라 이미 비슷한 단어들을 가짐
• 38개의 메타 데이터를 이용해서 성능을 향상시켜보자!
결국엔 1500건함 ㅠㅠ
어떻게 할까?
18. 화재 뉴스 기사는 길이가 짧다!
메타데이터 쓰게된 이유!
내용 길이
제목길이
Zeppelin을 이용해 산점도로 나타내어 쉽게 알 수 있었다
제플린과 함께라면 데이터 탐색, 어렵지 않아요!
19. 머신러닝 도중 같은 문제 발생...
그리하여 깨달은 사실...
머신러닝 파이프라인은 길고...
Feature 버전은 많아지고...
앙상블 모델 조합 수는 더 늘어나고...
모델도 늘어나고...
이 노트 실행했다 저 노트 실행했다;
노트가 너무 길어져 분리 했더니...
즉, 노트 간의 dependency 발생
코드를 정리할 필요가 생김
22. 이 작은 제약 사항이 불러온
행복한 변화
• 노트 간 dependency 제거
• 어떤 노트를 실행하기에 앞서 다른 노트를 실행할 필요
가 없음
• 모든 노트는 언제든지 독립적으로 실행 가능함 (run all
paragraphs를 마구 누를 수 있다)
• 그렇다면 노트 간의 데이터 전달은? HDFS를 통해서만!
23. 1. Feature Extraction,
Transformation, and
Selection
2. Fitting & Model Selection
& Tuning
3. Ensemble
4. Evaluation
ML Pipeline Stage Isolation
Feature
Prediction
Model
24. 더욱더 윤택해진 삶
• 소스 코드와 산출물 모두 깔끔하게 정리됨
• Job fail도 걱정 없음
• 이전 스테이지들을 실행할 필요가 없으니 실행 속도 빨
라짐
• 스테이지 단위로 소스 코드 변경이 용이
• 각 스테이지의 어떤 버전이 가장 좋은지 비교 가능
• ex) TF/IDF? ChiSq?
26. 실험 결과 저장하기
정렬!다운로드!
// 실험 결과를 담은 DataFrame metric 생성
metric.createOrReplaceTempView(“metric”)
%sql SELECT * FROM metric 임시 테이블 생성
성능 지표 별로 어떤 모델이 가장 좋은지 한 눈에 알 수 있음
38. Apache Contributor가 될 기회!
• 아직 초기 프로젝트라 발전 가능성이 많다
• 그것은 곧 기여할 수 있는 곳이 많다는 것!
• 제플린 멤버분들 정말 친절하십니다
• 여러분도 Apache 프로젝트의 contributor가 될 수 있
습니다!
코멘트 보고 감동 ㅠ
39. Zeppelin for
{DW, Paper, Collaboration}?
• 폴더 구조와 markdown을 이용한 소스 코드의 깔끔한 정리
• Markdown으로 DW 테이블 버전 관리
• 실험 결과 시각화 및 다운로드
• 회의에 적극 활용
사랑해요 제플린♥
완전 최고!