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

Post on 07-Jan-2017

6.312 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

김형준2016.06

김형준(babokim)JOBPLANET

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

공공 SI,전자 ITO(SDS)

www.jaso.co.krOpensource

ApacheTajoNaver Neptune

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

• 2014년서비스오픈

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

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

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

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

있으면좋겠어요.

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

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

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

쉽고빨랐으면좋겠어요.

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

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

없어요.

엑셀이면충분해요.

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

NotDataAnalytics,ButDataExploration

처음에는,

가장 Simple(?)한구성은?

Structured

Query

LanguageDatabase Workbench

SQL

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

SimpleandFast,But...

NotEnd-userfriendlyESdataonly

OutOfMemory

실제는,

로그수집및저장이우선

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

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

SQL실행엔진은?

기능이외검토항목

최근기술인가?

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

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

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

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

기능검토항목

최종선택은

4,868

그러면 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.

가장큰고민은?

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

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

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

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

실무자의 SQL학습과정

사용자는 KPI등데이터요청

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

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

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

Zeppelin에추가기능필요

PrestoInterpreter

질의 Progress, Kill기능

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

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

특정기능에대한접근제한

데이터의접근제한

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

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

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

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

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컬럼만허용)

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

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

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

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

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

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

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

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

Zeppelin사용화면

PrestoQuery예제

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]

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

바빠서...

조합...

전체...

쉽고/빨랐...

보안...

Zeppelin+SQL+Download->Excel

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

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

MySQL,LogDataJoin가능

SQL(Notbest,butnotbad),DistributedComputing

Table의 Column단위까지제어가능

현재는

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

Topic을 PrestoQuery로실행하는구성중

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

Partitionpruning&Filterpushdown작업중

MachineLearning/StreamingAnalysis

InteractiveDataExploration

다음모습은...

Real-timeDataIngestion

Real-timeNetworkAnalysis

Caravel

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/

top related