SlideShare une entreprise Scribd logo
1  sur  22
Node.Js를 사용한
Big Data 사례연구
Big Data 세계에서 Node.js, 그 경험담
CONTENT
• Big Data
• Hive
• Node.js
• Introduce
• Callback Hell
• node-java
• node-thrift
• Summary
2
HIVE
• Big Data를 위한 데이터 플랫폼
• Hive
• Hadoop 기반으로 동작하는 데이터 플랫폼
• RDBMS와 유사하게 질의를 통한 데이터 분석 지원
• Hive driver
• Java
• JDBC, Thrift
• Python
• Pyhs2 (-> pyhive), Thrift
• Node.js
• ?
3
NODE.JS - 1
• Event-Driven, Single-Thread
• Javascript 엔진 V8을 이용하여 개발된 Back-end 플랫폼
• (동의하지 않는 분이 있지만) 높은 생산성과 쉬운 문법을 가진 언어
• 최근 MS에서 Chakra 기반 Node.js를 개발하기도 함
• Node Foundation에 의해서 개발, 운영
• LTS – 4.4.3
• Stable – 5.11.0
• ECMA6
• Generator, Promise, Arrows, Classes, Data Structure(Map, Set, WeakMap, WeakSet) etc …
4
NODE.JS -2
• Why?
• 언제나 쫓기는 일정
• ASP .NET C# 개발자 입장에서,
• XML 기반 설정과 방대한 에코 시스템이 부담스러운 Java
• Front-end 개발 할 때 누구나 한 번 다뤄보고, 쉬운 문법을 가진 JavaScript
• Java < JavaScript
• node-java를 통해 Java Lib. 접근 가능
5
NODE.JS - 3
• npmjs.org
• 가장 방대한 패키지 매니저
• 언제부터? 2014년 중반 부터
• http://www.modulecounts.com/
• 원하는 것이 다 있는 그 곳
• Express.js
• Sequelize.js
• Passport.js
• Socket.io
• 특히 Socket.io가 가지는 매력은?
6
NODE.JS + CALLBACK HELL - 1
• 항상 도마 위에 오르는 DB 접근 코드
BarrelFavorite.destroy({ where: { pk: no } }, function (err) {
BarrelRelateTags.destroy({ where: { pk: no } }, function (err) {
Param.destroy({ where: { pk: no } }, function (err) {
BarrelSchedulerJob.destroy({ where: { pk: no } }, function (err) {
Barrel.destroy({ where: { pk: no } }, function (err) {
res.send({ ret: ‘ok’ });
});
});
});
});
});
7
NODE.JS + CALLBACK HELL - 2
• ECMA6
• Node.js 4.x.x 부터 우측
코드 지원
• co-routine, generator
조합
• 0.12.x 에서도 가능
• --harmony 옵션 사용
• 0.10.x를 사용하지 않는
다면 우측 코드 사용가능
co(function* () {
yield BarrelFavorite.destroy({ where: { pk: no } });
yield BarrelRelateTags.destroy({ where: { pk: no } });
yield Param.destroy({ where: { pk: no } });
yield BarrelSchedulerJob.destroy({ where: { pk: no } });
yield Barrel.destroy({ where: { pk: no } });
}).then(function () {
res.send({ ret: ’ok’ });
}).catch(function (err) {
// Exception catch block
});
8
NODE.JS + CALLBACK HELL - 3
• 항상 도마 위에 오르는 DB 접근 코드
BarrelFavorite.destroy({ where: { pk: no } }, function (err) {
BarrelRelateTags.destory({ where: { pk: no } }, function (err) {
Param.destroy({ where: { pk: no } }, function (err) {
BarrelSchedulerJob.destroy({ where: { pk: no } }, function (err) {
Barrel.destroy({ where: { pk: no } }, function (err) {
res.send({ ret: ‘ok’ });
});
});
});
});
});
이제 Callback – Hell 이라는
음해는 이제 그만
9
NODE-JAVA
• Node.js -> C++ -> JAVA(via JNI)
• Node.js에서 Java Lib.을 사용할 수 있는 환경을 구성해주는 패키지
• Hive JDBC
• Hive에 접근하기 위한 방법
• Thrift-Client를 이용하여 JDBC 인터페이스 구현
• node-java에서 Hive JDBC통해 Hive 질의
• Npm
• https://www.npmjs.com/package/java
10
NODE-JAVA + HIVE JDBC
• Good
• 잘 알려진, 오랫동안 사용되어서 검증이 완료된 JDBC 인터페이스
• Hive가 업데이트 될 때 Hive JDBC도 업데이트 되어 관리 이슈가 없다
• Bad
• node-java 완성도에 영향을 받는다
• 오래전에는 promise도 지원되지 않아 blocking-call이 일어났고, …
• JVM 이슈
• Java와 JVM은 뗄래야 뗄수 없는 관계
• node-gyp
• 컴파일 문제 발생 – github.com에 접근할 수 없는 경우에는?
11
NODE-THRIFT
• node-thrift
• Hive JDBC를 디컴파일 하거나, https://github.com/apache/hive 에서 코드를 보면 Hive
JDBC는 Thrift Client를 JDBC 인터페이스로 재구현 한 것
• node-thrift를 사용해서 Hive에 직접 접근하는 것이 가능
• Hive Server 2 Client
• https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
• JDBC, Ruby, Python은 Client 가 따로 있는데 Node.js는 없다
12
THRIFT
• Apache Thrift
• Software framework, for scalable cross-language services development …
• 다양한 언어를 결합하여 데이터 송수신이 가능하도록 만드는 프레임워크
• Support language
• Actionscript 3.0, c_glib, C++, CSharp, D, Dart, Delphi, Go, Graphviz, Haxe Framework,
Haskell, Java, Javascript, Node.js, OCaml, Perl, PHP, Python, Ruby
• 그리고 저 들을 Server-Client 구조로 결합하는 것이 가능하다
• Java (Hive) -> Node.js (your solution)
13
THRIFT?
• Good
• 원하는 것을 할 수 있다
• 쿼리가 실행되는 동안 Hive Server 2 로그를 가져올 수 있다
• 쿼리가 실행되고 있는 동안 Hive Server에 쿼리 실행 상태를 질의할 수 있다
• 쿼리 취소가 된다 (쉽다)
• 가볍다
• JVM 필요 없으니
• node-java 를 사용하지 않아서 컴파일 이슈를 조금 덜 수 있다
• 이 부분은 크게 도움 안된다, socket.io와 mysql driver는?
• Bad
• 0.9.3 node-thrift 기준, npm 설치를 마치면 30MB가 넘는다 (왜?)
• 신경써야 할 것이 많다
• Javascript는 64bit Floating-point만 사용하는데, 64bit Signed Integer는?
• Nullable Type은?
• 자유로 인해서 얻는 이익 < 추가 코딩량
14
JSHS2
• https://www.npmjs.com/package/jshs2
• Node.js 기반 Hive Server2 Driver
• 없으니 내가 만듬
• Good
• Pyhs2를 최대한 따라하기
• 그래서 사용 방법이 매우 쉽다
• Connection.connect -> Cursor.execute -> Cursor.fetch -. Cursor.close -> Connection.close
• 아직까지는 0.10.x 부터 사용가능
• 직업할 때 번거로운 작업을 대부분 처리 해준다
• Bad
• No-SASL만 지원
• IDL이 꼭 있어야 한다
• 내가 수작업으로 포함하고 있지만 사용자가 원하는 것이 없으면?
15
THRIFT, TIP
• 직접하는 것이 더 좋을 수도 있다
• JSHS2는 아직 완성도가 조금 부족한 것이 현실
• 신경써야 할 것
• node-thrift를 사용하면 node-int64를 사용하고, 이것을 지수표기법이 되면서 데이터가 누
락되지 않도록 충분히 신경써야 한다
• Nullable filed를 충분히 고려해야 한다
• 0 != NULL
16
THRIFT & BUFFER - 1
• 따끈따끈한 소식
• node-thrift는 또 다른 문제가 있다
• node-thrift에 포함된
TBufferedTransport를 코드를 보면,
버퍼 사이즈가 고정되어 있다
function TBufferedTransport(buffer, callback) {
this.defaultReadBufferSize = 1024;
this.writeBufferSize = 512; // Soft Limit
this.inBuf = new Buffer(this.defaultReadBufferSize);
this.readCursor = 0;
this.writeCursor = 0; // for input buffer
this.outBuffers = [];
this.outCount = 0;
this.onFlush = callback;
};
17
THRIFT & BUFFER - 2
• 하드코딩 되어 있는 부분을 변경해서
쓸 수 있다
• 이 경우 버퍼 사이즈가 변경되어 실제
통신 시간에 영향을 준다
• 테스트 결과,
• Thrift는 버전은 높을 수록 좋다
• 버퍼 사이즈는 무작정 늘리지 말고 최
적 값을 찾아야 한다
• Thrift 0.9.3 + 1M Buffer + Fetch Size
2048이 내 경우에 최적 값
• 해당 기능은 곧 JSHS2에 반영할 예정
18
NODE.JS & BIG DATA - 1
• Galleon
• Node.js 기반 Hive 질의 시스템
• 쿼리 실행, 쿼리 프리셋, 스케쥴러 등의 기능 지원
• 100명 이상의 사용자가 매월 사용 중
• 등록된 쿼리 프리셋 700개 이상
• Node.js로 Big Data 할 수 있다
19
NODE.JS & BIG DATA - 2
• Good
• 개발 편의성, 배포 편의성
• 사용자 요구사항에 민첩하게 대응할 수 있다
• Back-end + Front-end가 하나의 언어로 처리되는 매력
• 써본 사람만이 알 수 있는 그 편리함
• npm.js에는 없는 것이 없다
• Web framework + DB ORM + oAuth2 + Socket.io etc …
• Bad
• CSV, Excel 추출은?
• long – run 작업은 어떻게?
• CSV는 Excel에 비해서 가볍지만 그래도 대용량이 되면 문제
• js-xlsx는 blocking lib. 만 제공하여 대용량이 되면 역시 문제
• Long-Run Query는?
• 기도하세요,
• 모니터링을 해서 timeout 시키지만 이 것이 서버에서 급격히 증가할 경우?
• 애증의 관례, 그리운 그녀 thread
20
SUMMARY
• Node.js에서 Hive에 질의 할 수 있다
• node-java
• node-thrift
• jshs2
• node-thrift를 쓸 때는 node-int64와 Nullable field에 신경쓰자
• node-thrift에서 버퍼 사이즈가 큰 것이 항상 좋은 것이 아니다
• Node.js 좋아요
21
Q & A
http://www.slideshare.net/ssuser735f04/nodejs-big-data-61442290
22

Contenu connexe

Tendances

시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015Goonoo Kim
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Circulus
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
What is chef - korean
What is chef - koreanWhat is chef - korean
What is chef - koreanSangUk Park
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델NAVER D2
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영창훈 정
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 

Tendances (20)

시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
 
SPARK SQL
SPARK SQLSPARK SQL
SPARK SQL
 
Node.js 기본과정
Node.js 기본과정Node.js 기본과정
Node.js 기본과정
 
Ansible
AnsibleAnsible
Ansible
 
What is chef - korean
What is chef - koreanWhat is chef - korean
What is chef - korean
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
Node.js 심화과정
Node.js 심화과정Node.js 심화과정
Node.js 심화과정
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 

En vedette

Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본경민 김
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴JeongMin Kwon
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React지수 윤
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례YongSung Yoon
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planetByeongsu Kang
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례HyungTae Lim
 
AB Test Platform - 우종호
AB Test Platform - 우종호AB Test Platform - 우종호
AB Test Platform - 우종호Jongho Woo
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기Lee Ji Eun
 

En vedette (10)

Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례
 
AB Test Platform - 우종호
AB Test Platform - 우종호AB Test Platform - 우종호
AB Test Platform - 우종호
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
 

Similaire à Node.js를 사용한 Big Data 사례연구

XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XpressEngine
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Keeyong Han
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Steve Min
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK TelecomGruter
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache TajoGruter
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3Amazon Web Services Korea
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
빅데이터 구축 사례
빅데이터 구축 사례빅데이터 구축 사례
빅데이터 구축 사례Taehyeon Oh
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) Jin wook
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경NAVER Engineering
 
Real-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataReal-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataTed Won
 

Similaire à Node.js를 사용한 Big Data 사례연구 (20)

XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
빅데이터 구축 사례
빅데이터 구축 사례빅데이터 구축 사례
빅데이터 구축 사례
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
 
AWS RDS, DYNAMO
AWS RDS, DYNAMOAWS RDS, DYNAMO
AWS RDS, DYNAMO
 
Warp
WarpWarp
Warp
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
 
Real-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured DataReal-time Big Data Analytics Practice with Unstructured Data
Real-time Big Data Analytics Practice with Unstructured Data
 
Redis
RedisRedis
Redis
 

Node.js를 사용한 Big Data 사례연구

  • 1. Node.Js를 사용한 Big Data 사례연구 Big Data 세계에서 Node.js, 그 경험담
  • 2. CONTENT • Big Data • Hive • Node.js • Introduce • Callback Hell • node-java • node-thrift • Summary 2
  • 3. HIVE • Big Data를 위한 데이터 플랫폼 • Hive • Hadoop 기반으로 동작하는 데이터 플랫폼 • RDBMS와 유사하게 질의를 통한 데이터 분석 지원 • Hive driver • Java • JDBC, Thrift • Python • Pyhs2 (-> pyhive), Thrift • Node.js • ? 3
  • 4. NODE.JS - 1 • Event-Driven, Single-Thread • Javascript 엔진 V8을 이용하여 개발된 Back-end 플랫폼 • (동의하지 않는 분이 있지만) 높은 생산성과 쉬운 문법을 가진 언어 • 최근 MS에서 Chakra 기반 Node.js를 개발하기도 함 • Node Foundation에 의해서 개발, 운영 • LTS – 4.4.3 • Stable – 5.11.0 • ECMA6 • Generator, Promise, Arrows, Classes, Data Structure(Map, Set, WeakMap, WeakSet) etc … 4
  • 5. NODE.JS -2 • Why? • 언제나 쫓기는 일정 • ASP .NET C# 개발자 입장에서, • XML 기반 설정과 방대한 에코 시스템이 부담스러운 Java • Front-end 개발 할 때 누구나 한 번 다뤄보고, 쉬운 문법을 가진 JavaScript • Java < JavaScript • node-java를 통해 Java Lib. 접근 가능 5
  • 6. NODE.JS - 3 • npmjs.org • 가장 방대한 패키지 매니저 • 언제부터? 2014년 중반 부터 • http://www.modulecounts.com/ • 원하는 것이 다 있는 그 곳 • Express.js • Sequelize.js • Passport.js • Socket.io • 특히 Socket.io가 가지는 매력은? 6
  • 7. NODE.JS + CALLBACK HELL - 1 • 항상 도마 위에 오르는 DB 접근 코드 BarrelFavorite.destroy({ where: { pk: no } }, function (err) { BarrelRelateTags.destroy({ where: { pk: no } }, function (err) { Param.destroy({ where: { pk: no } }, function (err) { BarrelSchedulerJob.destroy({ where: { pk: no } }, function (err) { Barrel.destroy({ where: { pk: no } }, function (err) { res.send({ ret: ‘ok’ }); }); }); }); }); }); 7
  • 8. NODE.JS + CALLBACK HELL - 2 • ECMA6 • Node.js 4.x.x 부터 우측 코드 지원 • co-routine, generator 조합 • 0.12.x 에서도 가능 • --harmony 옵션 사용 • 0.10.x를 사용하지 않는 다면 우측 코드 사용가능 co(function* () { yield BarrelFavorite.destroy({ where: { pk: no } }); yield BarrelRelateTags.destroy({ where: { pk: no } }); yield Param.destroy({ where: { pk: no } }); yield BarrelSchedulerJob.destroy({ where: { pk: no } }); yield Barrel.destroy({ where: { pk: no } }); }).then(function () { res.send({ ret: ’ok’ }); }).catch(function (err) { // Exception catch block }); 8
  • 9. NODE.JS + CALLBACK HELL - 3 • 항상 도마 위에 오르는 DB 접근 코드 BarrelFavorite.destroy({ where: { pk: no } }, function (err) { BarrelRelateTags.destory({ where: { pk: no } }, function (err) { Param.destroy({ where: { pk: no } }, function (err) { BarrelSchedulerJob.destroy({ where: { pk: no } }, function (err) { Barrel.destroy({ where: { pk: no } }, function (err) { res.send({ ret: ‘ok’ }); }); }); }); }); }); 이제 Callback – Hell 이라는 음해는 이제 그만 9
  • 10. NODE-JAVA • Node.js -> C++ -> JAVA(via JNI) • Node.js에서 Java Lib.을 사용할 수 있는 환경을 구성해주는 패키지 • Hive JDBC • Hive에 접근하기 위한 방법 • Thrift-Client를 이용하여 JDBC 인터페이스 구현 • node-java에서 Hive JDBC통해 Hive 질의 • Npm • https://www.npmjs.com/package/java 10
  • 11. NODE-JAVA + HIVE JDBC • Good • 잘 알려진, 오랫동안 사용되어서 검증이 완료된 JDBC 인터페이스 • Hive가 업데이트 될 때 Hive JDBC도 업데이트 되어 관리 이슈가 없다 • Bad • node-java 완성도에 영향을 받는다 • 오래전에는 promise도 지원되지 않아 blocking-call이 일어났고, … • JVM 이슈 • Java와 JVM은 뗄래야 뗄수 없는 관계 • node-gyp • 컴파일 문제 발생 – github.com에 접근할 수 없는 경우에는? 11
  • 12. NODE-THRIFT • node-thrift • Hive JDBC를 디컴파일 하거나, https://github.com/apache/hive 에서 코드를 보면 Hive JDBC는 Thrift Client를 JDBC 인터페이스로 재구현 한 것 • node-thrift를 사용해서 Hive에 직접 접근하는 것이 가능 • Hive Server 2 Client • https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients • JDBC, Ruby, Python은 Client 가 따로 있는데 Node.js는 없다 12
  • 13. THRIFT • Apache Thrift • Software framework, for scalable cross-language services development … • 다양한 언어를 결합하여 데이터 송수신이 가능하도록 만드는 프레임워크 • Support language • Actionscript 3.0, c_glib, C++, CSharp, D, Dart, Delphi, Go, Graphviz, Haxe Framework, Haskell, Java, Javascript, Node.js, OCaml, Perl, PHP, Python, Ruby • 그리고 저 들을 Server-Client 구조로 결합하는 것이 가능하다 • Java (Hive) -> Node.js (your solution) 13
  • 14. THRIFT? • Good • 원하는 것을 할 수 있다 • 쿼리가 실행되는 동안 Hive Server 2 로그를 가져올 수 있다 • 쿼리가 실행되고 있는 동안 Hive Server에 쿼리 실행 상태를 질의할 수 있다 • 쿼리 취소가 된다 (쉽다) • 가볍다 • JVM 필요 없으니 • node-java 를 사용하지 않아서 컴파일 이슈를 조금 덜 수 있다 • 이 부분은 크게 도움 안된다, socket.io와 mysql driver는? • Bad • 0.9.3 node-thrift 기준, npm 설치를 마치면 30MB가 넘는다 (왜?) • 신경써야 할 것이 많다 • Javascript는 64bit Floating-point만 사용하는데, 64bit Signed Integer는? • Nullable Type은? • 자유로 인해서 얻는 이익 < 추가 코딩량 14
  • 15. JSHS2 • https://www.npmjs.com/package/jshs2 • Node.js 기반 Hive Server2 Driver • 없으니 내가 만듬 • Good • Pyhs2를 최대한 따라하기 • 그래서 사용 방법이 매우 쉽다 • Connection.connect -> Cursor.execute -> Cursor.fetch -. Cursor.close -> Connection.close • 아직까지는 0.10.x 부터 사용가능 • 직업할 때 번거로운 작업을 대부분 처리 해준다 • Bad • No-SASL만 지원 • IDL이 꼭 있어야 한다 • 내가 수작업으로 포함하고 있지만 사용자가 원하는 것이 없으면? 15
  • 16. THRIFT, TIP • 직접하는 것이 더 좋을 수도 있다 • JSHS2는 아직 완성도가 조금 부족한 것이 현실 • 신경써야 할 것 • node-thrift를 사용하면 node-int64를 사용하고, 이것을 지수표기법이 되면서 데이터가 누 락되지 않도록 충분히 신경써야 한다 • Nullable filed를 충분히 고려해야 한다 • 0 != NULL 16
  • 17. THRIFT & BUFFER - 1 • 따끈따끈한 소식 • node-thrift는 또 다른 문제가 있다 • node-thrift에 포함된 TBufferedTransport를 코드를 보면, 버퍼 사이즈가 고정되어 있다 function TBufferedTransport(buffer, callback) { this.defaultReadBufferSize = 1024; this.writeBufferSize = 512; // Soft Limit this.inBuf = new Buffer(this.defaultReadBufferSize); this.readCursor = 0; this.writeCursor = 0; // for input buffer this.outBuffers = []; this.outCount = 0; this.onFlush = callback; }; 17
  • 18. THRIFT & BUFFER - 2 • 하드코딩 되어 있는 부분을 변경해서 쓸 수 있다 • 이 경우 버퍼 사이즈가 변경되어 실제 통신 시간에 영향을 준다 • 테스트 결과, • Thrift는 버전은 높을 수록 좋다 • 버퍼 사이즈는 무작정 늘리지 말고 최 적 값을 찾아야 한다 • Thrift 0.9.3 + 1M Buffer + Fetch Size 2048이 내 경우에 최적 값 • 해당 기능은 곧 JSHS2에 반영할 예정 18
  • 19. NODE.JS & BIG DATA - 1 • Galleon • Node.js 기반 Hive 질의 시스템 • 쿼리 실행, 쿼리 프리셋, 스케쥴러 등의 기능 지원 • 100명 이상의 사용자가 매월 사용 중 • 등록된 쿼리 프리셋 700개 이상 • Node.js로 Big Data 할 수 있다 19
  • 20. NODE.JS & BIG DATA - 2 • Good • 개발 편의성, 배포 편의성 • 사용자 요구사항에 민첩하게 대응할 수 있다 • Back-end + Front-end가 하나의 언어로 처리되는 매력 • 써본 사람만이 알 수 있는 그 편리함 • npm.js에는 없는 것이 없다 • Web framework + DB ORM + oAuth2 + Socket.io etc … • Bad • CSV, Excel 추출은? • long – run 작업은 어떻게? • CSV는 Excel에 비해서 가볍지만 그래도 대용량이 되면 문제 • js-xlsx는 blocking lib. 만 제공하여 대용량이 되면 역시 문제 • Long-Run Query는? • 기도하세요, • 모니터링을 해서 timeout 시키지만 이 것이 서버에서 급격히 증가할 경우? • 애증의 관례, 그리운 그녀 thread 20
  • 21. SUMMARY • Node.js에서 Hive에 질의 할 수 있다 • node-java • node-thrift • jshs2 • node-thrift를 쓸 때는 node-int64와 Nullable field에 신경쓰자 • node-thrift에서 버퍼 사이즈가 큰 것이 항상 좋은 것이 아니다 • Node.js 좋아요 21