zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
TRANSCRIPT
Data�Warehouse,�Paper,�Collaboration
Zeppelin@DMLAB
김태준(Jun�Kim)�[email protected]
2016.�09.�21.�Zeppelin�Meetup�
NAVER�D2�Startup�Factory
Data�Mining�Lab.�University�Of�Seoul
안녕하세요,�김태준!�입니다.
• 서울시립대학교�데이터마이닝�연구실에서�
• 기술�지원�(Ambari�설치,�Zeppelin�설치�등...)�
• 화재�예측을�위한�빅데이터�분석�
• 밖에서는�
•MeteMQ�-�IoT�&�JavaScript�App�Platform
클러스터�환경• Ambari(2.4.0),�HDP(2.5.0),�Zeppelin(0.7.0-SNAPSHOT)�
• Master�1대,�slave�8대
너네�제플린�왜�써?
• “화재�예측을�위한�빅데이터�분석”을�해보자!�
• 화재�분석을�위한�Data�Warehouse(DW)를�구축해볼까?�
• 요즘�뜨는�Hive를�사용해보자!�
• ETL은�뭘로�할래?�Spark!�
• Hive와�Spark를�함께�사용할�수�있는�도구는?
Hive,�Spark�궁합�매우�좋아요~
ZEPPELIN
• Spark,�Hive를�한�곳에서�
• SQL만으로�시각화�
• 노트북�형식으로�소스�코드�관리
제플린�안쓰면�완전�바보�아니냐?
이�세�가지만�보고�사용했으나�더욱더�엄청난�것들이�존재했다...
노트�사용�통계
•#Notebooks�=�66�
•#Paragraphs�=�850
Language #Paragraphs Usage
spark 613 ETL,�머신러닝
spark-sql 147 분석,�시각화
markdown 55 문서�작성
hive 35 Deprecated
Spark2의�폭넓은�SQL�지원으로�Hive는�저장소로�전락함...
Hive는�거들뿐...Subquery!
저희는�제플린�노트북�이렇게�씁니다
부록:�맨�뒤에�제플린�노트�통계�구하는�코드�있습니당
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...
테이블�버전�관리,�ETL�코드�정리가�절실하다...OTL로�보이는건�저의�착각?
“CHANGELOG.md”
“CHANGELOG.md”
• ETL�버전별로�테이블�생성,�HDFS에�Parquet으로�저장�
• CHANGELOG에서는�markdown으로�변경사항을�기록하고,�Hive�테이블을�교체하는�코드�작성�
• 즉,�Hive에는�현재�버전의�테이블,�HDFS에는�모든�버전의�테이블들을�Parquet으로�저장
Parquet
Latest
All
삶이�윤택해짐
•자신감과�함께�DROP�TABLE�
• 잘못되면�이전�버전으로�돌리면�되니까!�
• CHANGELOG덕에�스키마�변경시�어떤�버전을�변경해야�할지�알�수�있음
spark.read.csv(…)
df.write.saveAsTable(“HIVE”) df.write.parquet(“HDFS”)
E
T�T�T�T�T
L
T개수�줄음
처음부터�다시�ETL�노노!
논문!대학원이니�ETTTTTTTTL�과정에서
이�나와야겠죠?
논문!with
본격!
ETL의�한�예로...
화재�뉴스�기사를�분석하기�위해�뉴스�기사�14만건�수집
검색�엔진에�“화재”를�검색하여�얻은�뉴스들이었지만,�불순물은�존재하기�마련
화재�예방,�연예인이�화재다�등등...
– Professor –
“화재뉴스기사를필터링하거라”
화재�뉴스�기사�필터링
• 1000건�정도�직접�labeling�하여�분류�모델을�만들자!�
• 1000건은�내가�할테니�13만9천건은�Spark�네가�하거라�
• But,�검색�결과라�이미�비슷한�단어들을�가짐�
• 38개의�메타�데이터를�이용해서�성능을�향상시켜보자!
결국엔�1500건함�ㅠㅠ
어떻게�할까?
화재�뉴스�기사는�길이가�짧다!메타데이터�쓰게된�이유!
내용�길이
제목�길이
Zeppelin을�이용해�산점도로�나타내어�쉽게�알�수�있었다
제플린과�함께라면�데이터�탐색,�어렵지�않아요!
머신러닝�도중�같은�문제�발생...
그리하여�깨달은�사실...
머신러닝�파이프라인은�길고...
Feature�버전은�많아지고...
앙상블�모델�조합�수는�더�늘어나고...
모델도�늘어나고...
이�노트�실행했다�저�노트�실행했다;
노트가�너무�길어져�분리�했더니...
즉,�노트�간의�dependency�발생
코드를�정리할�필요가�생김
“노트�간의�변수�공유는�죄악이다”
전역변수처럼!
제플린의�Spark�interpreter�설정에서�노트간의�interpreter�공유를�끔
노트�간의�변수�공유가�불가능해짐
이�작은�제약�사항이�불러온�
행복한�변화
• 노트�간�dependency�제거�
• 어떤�노트를�실행하기에�앞서�다른�노트를�실행할�필요가�없음�
• 모든�노트는�언제든지�독립적으로�실행�가능함�(run�all�paragraphs를�마구�누를�수�있다)�
• 그렇다면�노트�간의�데이터�전달은?�HDFS를�통해서만!
1. Feature�Extraction,�Transformation,�and�Selection�
2. Fitting�&�Model�Selection�&�Tuning�
3. Ensemble�
4. Evaluation
ML�Pipeline�Stage�Isolation
Feature
Prediction
Model
더욱더�윤택해진�삶
• 소스�코드와�산출물�모두�깔끔하게�정리됨�
• Job�fail도�걱정�없음�
• 이전�스테이지들을�실행할�필요가�없으니�실행�속도�빨라짐�
•스테이지�단위로�소스�코드�변경이�용이�
• 각�스테이지의�어떤�버전이�가장�좋은지�비교�가능�
• ex)�TF/IDF?�ChiSq?
실험이�깔끔해졌다!�그런데,�논문�쓰기도�쉽다!
실험�결과�시각화,�CSV로�저장,
Excel에서�바로�열�수�있다!
실험�결과�저장하기
정렬!다운로드!
// 실험�결과를�담은 DataFrame metric 생성 metric.createOrReplaceTempView(“metric”)
%sql SELECT * FROM metric 임시�테이블�생성
성능�지표�별로�어떤�모델이�가장�좋은지�한�눈에�알�수�있음
ROC�Curve
Random�Forest�Feature�Importance
Logistic�Regression�Coefficient
내용�길이
내용�길이
제플린과�함께�93.3%의�정확도로��화재�뉴스�기사를�필터링하고,�무사히�논문을�제출,�DW�완성...
2013년�구로�디지털단지�화재
역경과�고난을�이겨낸�후...
서울특별시�구별,�연도별�(화재�뉴스�수�/�건물�수)
{건물,�날짜,�지역}�dimension과�뉴스�기사�fact�table�조인�분석
Collaboration
“교수님,�실험�결과�나왔습니다!”
간지↑
Zeppelin�for�Collaboration
• 노트북�공유�
• Report를�작성하여�날려주면�좋다!�
•회의에서�적극�활용함
이젠�너무나�당연한�사실!제플린�오른쪽�상단에서�클릭
결과물만�출력됨
연구실�벽면제플린�상시대기
궁금점,�아이디어를�바로�질의,�시각화
왔다�갔다�하면서�데이터를�자주�접하게�되어�새로운�아이디어가�떠오름
평상시,�혹은�회의할�때
데이터에�대해�논하며�회의할�때�좋아염!
많이�쓰이는�건축물�자재�순위는?
회의하면서�나온�질의�예
정말�간단한�SQL이더라도�시각화를�해주니�눈에�쏙쏙�들어옴
저희�연구실�놀러오신�다른�교수님도�신기해�하시더군요�ㅎㅎ
일반목구조
불나면�큰일나요
SQL이�회의�기록으로�남게됨!
마지막으로!
�Apache�Contributor가�될�기회!
• 아직�초기�프로젝트라�발전�가능성이�많다�
• 그것은�곧�기여할�수�있는�곳이�많다는�것!�
• 제플린�멤버분들�정말�친절하십니다�
• 여러분도�Apache�프로젝트의�contributor가�될�수�있습니다!
코멘트�보고�감동�ㅠ
Zeppelin�for�{DW,�Paper,�Collaboration}?
• 폴더�구조와�markdown을�이용한�소스�코드의�깔끔한�정리�
• Markdown으로�DW�테이블�버전�관리�
• 실험�결과�시각화�및�다운로드�
• 회의에�적극�활용사랑해요�제플린♥
완전�최고!
감사합니다.진심으로
김태준�[email protected]�datamining.uos.ac.kr
Zeppelin�Notebook�언어�사용�통계�구하기�소스�코드
부록!
https://gist.github.com/tae-jun/138f595228aa83e89387b5d39d33b315
슬라이드�쉐어�하단의�설명에서�URL�복사하실�수�있습니다