presto, zeppelin을 이용한 초간단 bi 구축 사례

34
Presto, Zeppelin 을 이용한 초간단 BI 구축 사례 김형준 2016.06

Upload: hyoungjun-kim

Post on 07-Jan-2017

6.312 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Presto,Zeppelin을이용한초간단 BI구축사례

김형준2016.06

Page 2: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

김형준(babokim)JOBPLANET

Bigdata,Tajo(Gruter)Hadoop,Neptune,Naver Mail(Naver)

공공 SI,전자 ITO(SDS)

www.jaso.co.krOpensource

ApacheTajoNaver Neptune

Page 3: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Jobplanet기업의리뷰,연봉,인터뷰,채용정보제공

• 2014년서비스오픈

• 약 60만개의기업리뷰,연봉인터뷰정보제공

• 한국,인도네시아,대만서비스중,다수국가확장진행중(한국,인도네시아점유율 1위)

Page 4: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Image:http://www.brainlazy.com/article/random-nonsense/over-engineered/

Page 5: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

이런게좋아요!데이터를필요로하는사람이직접데이터를볼수

있으면좋겠어요.

개발자들너무바빠서부탁하기에눈치보여요.

여러데이터를조합해서볼수있으면좋겠어요.

전체데이터를볼수있으면좋겠어요.

쉽고빨랐으면좋겠어요.

무엇보다도 Data보안이가장중요해요.

Page 6: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

이런거는필요없어요!멋진챠트나그래프는있으면좋지만아직필요

없어요.

엑셀이면충분해요.

실시간으로분석할필요는없지만점차필요하겠죠.

Page 7: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

NotDataAnalytics,ButDataExploration

처음에는,

Page 8: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

가장 Simple(?)한구성은?

Structured

Query

LanguageDatabase Workbench

Page 9: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

SQL

Database(HDFS,S3등) SQL-on-Hadoop Workbench

Page 10: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

SimpleandFast,But...

NotEnd-userfriendlyESdataonly

OutOfMemory

실제는,

Page 11: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

로그수집및저장이우선

좋다고들하는데선뜻사용하기가...Daemon도관리해야하고...

이미사용하고있어운영경험이있음

Page 12: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

SQL실행엔진은?

Page 13: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

기능이외검토항목

최근기술인가?

오픈된커뮤니티를운영하고있는가?

내부구조까지잘아는지인이있는가?

Page 14: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

- JSON포맷을지원해야함- S3,HDFS,MySQL등에저장된데이터로Join이되어야함-여러사용자가동시에질의를실행할수있어야함- Ruby에서 SQL을실행할수있어야함-가능하면표준 SQL을지원해야함-기존 Hive보다는빨라야함

-하지만, LargeScaleData처리는필요없음(적당한 Scale이면충분)

기능검토항목

Page 15: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

최종선택은

4,868

Page 16: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

그러면 SparkSQL은?

https://www.quora.com/What-are-the-main-use-case-differences-between-Apache-Spark-SQL-and-Apache-Impala-incubating

Impalaisdesignedforusebyanalystsfordatadiscovery (BI)acrossmassivedatasets.Forthatreason,itprovidesthelow-latencyqueriesundermulti-userloadexpectedbythoseuserswhowantaBI-styleexperience.

Conversely,SparkSQLisdesignedtoletdevelopers&datascientistsuseSQLconstructswhendoingproceduraldevelopment,whetherforMLappsorperhapsETL.IfyouareplugginginviaarealBItool,SparkSQL isn'ttheanswer.

Page 17: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

가장큰고민은?

실무자가 SQL을사용할수있을까?(대부분의질의는 Join,Filter,Groupby,Orderby)

단순히학습만하는것으로는한계가있음

개발자와실무자의협업을통해SQL사용능력향상

Spark연동이아닌협업도구로 Zeppelin활용

Page 18: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

실무자의 SQL학습과정

사용자는 KPI등데이터요청

개발자가 Notebook에 SQL작성(상단 Paragraph에 Query에대한설명)

유사한패턴은실무자가Paragraph의 SQL복사후

일부수정하여직접데이터처리(6개월정도하면...)

Page 19: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Zeppelin에추가기능필요

PrestoInterpreter

질의 Progress, Kill기능

리소스를많이사용하는질의실행제한

Notebook에대한생성,수정,실행권한

특정기능에대한접근제한

데이터의접근제한

Page 20: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

PrestoInterpreterforZeppelin기존 Prestointerpreterpatch가존재.https://github.com/danielhaviv/incubator-zeppelin.Notmergedintoprestotrunk(JDKversionmismatch).PrestoJDBC를이용하여개발되어

Progress,kill지원안됨PrestointerpretermadebyJobplanet.https://github.com/babokim/incubator-zeppelin.Prestonativeclient,RESTAPI이용

Progress,Kill기능지원.Zeppelin에서지원하지않는일부기능지원.Notmerged

Page 21: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

PrestoInterpreter:DataACLPresto권한관리는각 Connector의 ACL기능이용But,Kafka등은지원하지않음

각스토리지에권한관리별도설정해야함

PrestoZeppelinInterpreter의권한관리. Catalog,Schema,Table,Column단위로권한관리. Read/Write는 schema레벨로관리. Operation(INSERT,SELECT등)별로권한관리는지원하지않음

Page 22: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

PrestoInterpreter:DataACL접근제안관리설정.{ZEPPELIN_HOME}/conf/presto-acl.properties.{group}.{catalog}.{schema}.{table}.{columns}=allow|deny

국가별사용자 Schema접근제한예. ko_emp.hive.korea.*=allow (한국사용자만접근)

컬럼접근제한. ko_dev.hive.korea.logs.*=allow(한국개발자 logs테이블모든컬럼접근권한허용). ko_emp.mysql.korea.users.id,created_at=allow(한국일반사용자에게 users테이블의 id,created_at컬럼만허용)

Page 23: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

PrestoInterpreter:Query검증다음과같은잘못된질의실행요청에대한검증

Partitioncolumn반드시사용. Fact테이블(logs)질의시Where절에반드시Partitioncolumn존재해야함. Join,Subquery등복잡한질의도검증가능

Limit절이없는경우불필요한데이터가조회. Plugin설정에서maxlimit수설정가능.해당설정초과되는데이터는개발팀으로요청

Page 24: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

ZeppelinImprovementParagraph결과데이터다운로드기능이없어서. Paragraph결과데이터가많은경우사용자브라우저속도저하. Copy&Paste시번거롭고, ExcelCell이잘깨짐개선사항.최대 1000개레코드만브라우저에표시. 1000개이상의데이터는서버에파일로저장(retention설정). ParagraphDownload버튼추가

Page 25: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

ZeppelinImprovementAuthentication. Zeppelin기본기능이용(ApacheShiro기반). PrestoInterpreter의권한관리에서 user,group으로사용

Authorization. Zeppelin커뮤니티내에서도꾸준히개선작업하고있지만바로사용하기위해소스코드내권한제어코드임의추가

. Group명수정: User1,User2,User3->dev,emp,emp_writer

.화면특정기능에대한접근제한기능. Admin,Dev계정만 Notebook생성가능. Admin계정만 Interpreter,Configuration메뉴사용가능등

Page 26: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Zeppelin사용화면

Page 27: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

PrestoQuery예제

Page 28: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

presto:ko>selectdt,count(*)fromhive.action_logwhereuser_id ='1234'groupbydt orderbydt;dt |_col1

----------+-------...20160615|1420160616|14(66rows)

Splits:1,130total,1,130done (100.00%)3:19[86.7Mrows,66.4GB][436Krows/s,341MB/s]

presto:ko>selectdt,count(*)fromhive.action_log_orcwhereuser_id ='1234'groupbydt orderbydt;dt |_col1----------+-------...20160615|1420160616|14(66rows)

Splits:328total,328done (100.00%)0:03[85.7Mrows,9.52GB][29.1Mrows/s,3.24GB/s]

Page 29: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

GoodBike를만들었을까?직접...

바빠서...

조합...

전체...

쉽고/빨랐...

보안...

Zeppelin+SQL+Download->Excel

관리화면만들필요없음. SparkorMap/Reduce프로그램없이 SQL만으로도처리

로그저장을 ES->S3,분석은 Presto등

MySQL,LogDataJoin가능

SQL(Notbest,butnotbad),DistributedComputing

Table의 Column단위까지제어가능

Page 30: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

현재는

S3를저장소로사용할경우실시간으로로그데이터를볼수없음

Topic을 PrestoQuery로실행하는구성중

문제는 KafkaConnector가Offset관리를하지않고전체 Topic데이터를 Scan

Page 31: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

Partitionpruning&Filterpushdown작업중

Page 32: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

MachineLearning/StreamingAnalysis

InteractiveDataExploration

다음모습은...

Real-timeDataIngestion

Real-timeNetworkAnalysis

Caravel

Page 33: Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Page 34: Presto, Zeppelin을 이용한 초간단 BI 구축 사례

References

• https://prestodb.io• http://zeppelin.apache.org/• http://www.slideshare.net/dongminyu/presto-anatomy• http://www.slideshare.net/AmazonWebServices/bdt303-running-spark-and-presto-on-the-netflix-big-data-platform• https://www.quora.com/What-is-the-difference-between-Spark-and-Presto• http://cleverowl.uk/2015/11/19/the-sql-on-hadoop-landscape-an-overview-part-i/• http://cleverowl.uk/2015/12/25/the-sql-on-hadoop-landscape-an-overview-part-ii/