ݺߣ
Submit Search
AWS없이 만든 AWS와 유사한 데이터 파이프라인
•
4 likes
•
464 views
Kim Hyuk
AWS없이 만든 AWS와 유사한 데이터 파이프라인 AWSKRUG 데이터 사이언스 발표용
Read less
Read more
1 of 83
Download now
Download to read offline
More Related Content
AWS없이 만든 AWS와 유사한 데이터 파이프라인
1.
AWS 없이만든AWS와유사한데이터파이프라인 JaeHyuk Kim,
airkjh99@gmail.com
2.
다룰내용 데이터근처를맴돌던시간들 현재구성된데이터처리아키텍처 현재의아키텍쳐를AWS로마이그레이션한다면
3.
소개 과거 : Java
개발자 현재: 데이터잡부 관심사 Agile, DevOps, Container, Serverless, Data 관련기술들 ML
4.
Certificate collector 진짜자격증따고 싶다
5.
데이터근처를맴돌던시간들 데이터주변인: 데이터를다루지만데이터엔지니어도아니고 데이터과 학자도아닌괴생명체
6.
ѫ먼옛날
7.
ICLAS ‑ 기능 Embedded
javascript로데이터수집‑ GA와유사한방식 주기적(보통1시간)으로수집된데이터를정제하여통계 테이블에저장 약50여개의그래프 Oracle analytics function 사용
8.
ICLAS ‑ 시련 새로운패턴의데이터가
수집되면정제시오류발생‑> 수동으로처리 새로운데이터패턴을보고 싶어요 리얼타임으로는통계 데이터를볼수없나요? 고객사에서Oracle을뺀답니다. Non‑Oracle 버전은없나요? 만들땐허접했던Google Analytics가 너무발전함(게다가 무료) 새로운분석시스템을만들자!
9.
그럼국책과제에써먹을수있겠군요
10.
10만호급 전력빅데이터관리체계 및서비스개발 전력관련빅데이터및생활관련빅데이터를연계하여인사이트를도출 하여서비스로승화
11.
데이터주변인으로서의역할 비즈니스모델을만들었는데검증을하고 싶다 1. 수집해달라는데이터를수집한다 2.
데이터를어떻게 전처리할지, 어디다저장할지고민한다 3. 검증에필요한데이터를뽑아visualize한다 4. 보고서작성에필요한데이터를추출한다
12.
신기루같은데이터 특정도메인은일반적으로사용되는지표가 있습니다 DAU 매출추이(일간, 주간,
월간 등) 방문패턴(얼마나페이지에오래머무르는지, 어떤검색엔진에서어 떤검색어를입력하고 방문했는지등)
13.
신기루같은데이터 수집대상이명확한데이터도있습니다 Web server access
log System metric (CPU, Memory, Disk, Network...) JVM
14.
신기루같은데이터 이런시나리오면좋을것 같아요. 검증해봅시다 일단이런이런데이터수집이필요할것
같아요 앗이런데이터도추가로필요하겠군요 검증해보니아닌것 같아요. 다른데이터로다시해봅시다 새로운시나리오가 나왔어요. 멋지죠?
15.
요구 사항‑ 데이터수집 아직은무슨데이터를수집할지모르겠군요 주기적으로수집할데이터가
있을수도있습니다 스팟성으로제공되는데이터도있습니다 엑셀파일도분석해줄거죠?
16.
요구 사항‑ 데이터수집 외부에서채워주는데이터가
있을지도모릅니다 데이터를수집하는방식이REST가 아닐수도있습니다 그 업체가 FTP방식이좋다네요? 수집해야하는데이터유형은계속추가될수있습니다 설마추가될때마다서버재시작하고 그런거 아니죠? 공공 데이터포털에서주는데이터는기관마다제각각입니다. 공무원이원래그렇죠뭐
17.
요구 사항‑ 데이터가공 어떤데이터를가공할지아직모르겠어요 데이터가
어떤포맷인지모릅니다 XML, JSON, CSV, Excel, MS Access... 어디에저장할지모릅니다 그건 니가 고민해야죠?
18.
요구 사항‑ 데이터연동 수집한데이터를외부에제공할수있는방법이필요합니다 하지만어떤데이터를어떤포맷으로제공할지는모르겠습니다 일별데이터지만월별,
주별, 요일별로보고 싶군요 앗이번보고서에는이데이터는빼주세요미안:) 설마새API 추가한다고 서버재시작하고 그런거 아니죠?
19.
요구 사항‑ Visualization 데이터만주르륵보여주진않을거죠? 하지만어떤차트가
필요한지아직모르겠어요 데이터는내가 보고 싶은대로나와야해요 정해놓고 알아서보라고 하지말아요 주기적으로정제한다고 말하지말아요대세는실시간이라구요
20.
자게임을시작하도록하지 자넨개발자를소중히생각하지않았어
21.
쵵Ӵ의Ϊ근
22.
Runtime에... 수집할데이터의유형이추가된다 분석할데이터의유형이추가된다 보여줄데이터의유형이추가된다 서버재시작은안된다 비즈니스로직을스크립트로작성하자!
23.
Java의ScriptEngine 여러유형의스크립트를Java에서실행시킬수있다 Java 7까지는Rhino, Java
8부터는Nashorn 이라고 불림 스크립트에서도Java 객체에접근할수있다 스크립트로작성된BM을메모리에저장후요청에맞게 실행 좋아이거면되겠다
24.
Data Flow
25.
Data Flow 사례‑ Web
Log 분석 준비물 데이터수집스크립트(URL, Referrer, Browser...) 데이터분석스크립트 PageView 분석스크립트 Visitor 분석스크립트 Referrer 분석스크립트 등등
26.
Web Log 분석
27.
결과물
28.
Architecture
29.
Architecture
30.
Architecture
31.
DataSource
32.
Workbook
33.
Script
34.
Cron
35.
잘못된판단들
36.
ScriptEngine 스크립트를작성하기 어려움 스크립트엔진의동작방식으로인한특수한문법들 이것은Java 객체인가?
JavaScript 객체인가? Inject되는Java 객체의API도알아야한다 Debug는오직 System.out.println()
37.
Data Flow 이벤트핸들러체인의overview를알기 ̘들다 A
이벤트가 발생하면누가 동작하나? A 이벤트처리의끝은어디인가?
38.
Chart 차트의데이터를가져오는용도의스크립트를별도로작성해야한다 차트화면과 차트데이터스크립트화면을왔다갔다하면서확인 디버그가 ̘들다 다른차트라이브러리를사용하기
̘들다
39.
Event Dispatcher (Craken)의불안정성 내부적으로Lucene
+ Infinispan으로구현 서버가 비정상적으로종료된경우Lucene Index가 망가짐‑> 복구 불가
40.
추가로더해야하는것들 더많은Wrapper 객체들 Spark (+Hadoop) R
연동 Wrapper 클래스를작성하는수고스러움+ 서버재시작
41.
다른접근
42.
희망사항 좀더Visual한모습으로전체프로세스를볼수있었으면좋겠다 Event 처리Flow의비주얼한화면 Javascript를쓰는것은좋은데좀더표준적인방법으로사용했으면좋겠 다 그냥NodeJS 사용하듯이Javascript를사용하고
싶다 힘들지않게 차트를그리고 싶다 Chart framework로코딩하는것이아니라데이터만주면알아서그 려줬으면좋겠다
43.
새로운모습
44.
Architecture
46.
NodeRed nodered.org Visual wiring tool
for the Internet of Things JS Foundation 프로젝트 IBM이Foundation member Javascript(Node) 생태계를위한여러가지툴을Incubating jQuery/UI, Grunt, ESLint, Lodash, Mocha, RequireJs, Webpack...
47.
Nodered 브라우저기반의Flow 에디팅 Node.js 기반 오픈소스 IoT
데이터처리를주목적으로탄생 Raspberry Pi, BeagleBone Black, Arduino, Android... JSON message payload
48.
Nodered ‑ Input Inject
‑ Flow 수동실행, Cron Catch ‑ Flow에서발생하는모든오류를catch Status ‑ 탭내의다른노드의상태를리포트 Link ‑ Flow간의가상와이어생성 MQTT ‑ MQTT에서메세지를수신 HTTP ‑ REST Endpoint websocket ‑ Websocket Endpoint TCP UDP Cron Redis in Kafka Consumer
49.
Nodered ‑ Output Debug
‑ 디버그 메세지 Link MQTT HTTP Response websocket TCP UDP Redis out Kafka Producer
50.
Nodered ‑ Function Function
‑ Javascript로Message 객체의조작 HTTP Request Switch ‑ 조건에따른Sub flow 분기 split ‑ Message payload에담긴 array를분리 XML ‑ XML 메세지를JSON으로변환 기타등등
51.
Nodered ‑ Social Twitter
‑ Input Twitter ‑ Output Slack
52.
Nodered ‑ Storage Tail File FTP SFTP PG
Listen mysql Postgres
53.
Nodered ‑ Advanced Watch
‑ 디렉토리모니터링 feedparse ‑ RSS 피드 exec ‑ shell command를실행하고 output을리턴
54.
Nodered ‑ AWS EC2
‑ Start/Stop/Describe EC2 인스턴스 Kinesis ‑ Kinesis 스트림에get / put Lambda ‑ Lambda 함수를실행후output을리턴 S3 ‑ S3에get / put dynamodb ‑ DynamoDB에put / get / scan sns ‑ SNS에메세지전송 sqs ‑ send / receive / delete / purge SQS
55.
Nodered ‑ Elasticsearch search create exists update delete get
56.
Nodered ‑ Dependency nodered의부가
모듈을NPM 리파지토리에서설치할수있음 nodered용모듈이아니더라도설치후Function 모듈에서이용가능 부가 모듈의개발가이드를보고 커스텀모듈을제작할수있음
57.
Nodered ‑ 단점 분산말고
클러스터기능이없다 몇몇부가 모듈은유지보수가 잘되고 있지않다 NodeJs로작성되어있어서Hadoop ecosystem과 잘어울리진않는다
58.
구성모듈 Spark Hadoop MySQL ElasticSearch Zeppelin
59.
프로세스 1. Data (or
File) 2. Spark 3. Parquet, CSV, JSON 4. Hadoop, MySQL 5. Zeppelin
60.
File 생각보다많은데이터들이API를통해수집되지않는다 CSV, Excel 등등 파일갯수만큼의포맷이존재 파일을받으면일단Hadoop에복사
61.
Spark Hadoop에복사된파일을읽어서처리하기 편한포맷으로변경 Spark의RDD 형태보다는Spark
SQL의DataFrame 형태로변환 DataFrame 형태의결과물을Parquet 포맷으로Hadoop에저장 데이터사이즈가 크지않으면Zeppelin에서바로분석
62.
MySQL 메타데이터저장 통계 데이터 고급(?) SQL이필요한데이터
63.
Zeppelin 여러Interpreter를제공 ‑ Spark,
JDBC, Hive, ElasticSearch, R... 온라인상태에서바로데이터를가공 후Visualization 가능 데이터분석및Visualization의De facto standard
64.
Monitoring 주기적으로수집해야할데이터가 잘수집되고 있나?
65.
여기까지가 2차년도결과물
66.
3차년도 주의) AWS라면이런서비스를쓰면될텐데! 라는생각이휘몰아칩니다
67.
3차년ѫ키텍쳐
68.
달라진점 Mesos 기반의Containerize HDFS를버리고 Alluxio
+ Minio 조합으로변경 (Hadoop을버림) Monitoring (MetricBeat + ElasticSearch + Kibana)
69.
왜Mesos? Container, Container Orchestration
자체의장점 언제어떤서비스를배포할지모르는데특정기술스택에종속적이면 안됨 죽기 쉬운(?) 서비스는자동으로살려줌 Mesos Framework mesos‑lb : HAProxy 내장docker, 특정서비스를vhost 형태로 80, 443으로오픈 mesos‑dns : Internal service naming Marathon : Docker container orchestration (JSON 형태로task definition, REST로배포가능)
70.
왜Mesos? Spark cluster mesos의spark dispatcher
framework를통해job 분산처리가능 Worker 노드의남는리소스에따라job 분배 Hadoop 관리가 너무어려워서
71.
왜Alluxio + Minio? Alluxio Spark에서바로사용가능( alluxio://
... ) 캐시기능 Minio S3 API 호환( aws s3 --endpoint=... 로aws cli 사용가능) Spark에서바로사용가능( s3a://... ) 혹시나AWS로마이그레이션할수도있을지몰라서
72.
개선하지못한부분 FaaS 도입보류(OpenWhisk ‑>
Too big, OpenFaaS 고려중) Time Series DB 도입보류 Kafka를이용한스트리밍데이터처리보류(스트리밍데이터수집요구 사라짐)
73.
Demo
74.
AWS 상에서동일한아키텍쳐를구현한다면? 토론해봅시다!
75.
Storage layer Alluxio +
Minio => S3
76.
ETL layer Spark cluster Athena Redshift EMR
(spark!) Glue
77.
Visualize layer Zeppelin =>
QuickSight?
78.
Preprocess Layer Nodered =>
Lambda + Step Function (visualize??) Kafka => Kinesis
79.
Database layer 간단한Metadata =>
csv, json 형태로S3에넣어두면ETL에서사용가 능 통계 데이터=> RDS(Aurora) / Athena ElasticSearch 형태소분석이필요하기 때문에Lambda를통해미리분석된형태로 저장
80.
Service Layer Nodered =>
Lambda + API Gateway Front‑end => Vue.js를이용하고 있으므로빌드해서S3의static file host
81.
Monitoring MetricBeat + ElasticSearch
+ Kibana => CloudWatch + X‑Ray
82.
결론 빅데이터파이프라인은AWS serverless 기술만으로도충분하다?
83.
감사니다!
Download