Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
MongoDB����������� ������������������ 와����������� ������������������ Hadoop����������� ������������������ 연동����������� ������������������ 개발����������� ������������������ 사례����������� ������������������
5Rocks����������� ������������������ 문성익����������� ������������������
About����������� ������������������ Us����������� ������������������
http://www.5rocks.io����������� ������������������
게임/앱����������� ������������������ 각종����������� ������������������ 지표����������� ������������������ 분석����������� ������������������
분석+운영����������� ������������������ (캠페인,����������� ������������������ 푸쉬)����������� ������������������
Android/iOS,����������� ������������������ Cocos2D,����������� ������������������ Unity����������� ������������������ (and����������� ������������������ more)����������� ������������������
What����������� ������������������ We����������� ������������������ Do����������� ������������������
데이터����������� ������������������ 특성����������� ������������������ Spiky����������� ������������������ Big����������� ������������������ Data����������� ������������������
예:����������� ������������������ ~10만����������� ������������������ User����������� ������������������ 가����������� ������������������ 하루에����������� ������������������ 한번����������� ������������������ 플레이����������� ������������������ ����������� ������������������
세션,����������� ������������������ 각����������� ������������������ 게임����������� ������������������ 화면,����������� ������������������ 아이템����������� ������������������ 획득…⋯����������� ������������������
주로����������� ������������������ 플레이하는����������� ������������������ 시각����������� ������������������ 비슷:����������� ������������������ “소셜”����������� ������������������ 로����������� ������������������ 강화����������� ������������������
1M+����������� ������������������ 이벤트����������� ������������������ 데이터가����������� ������������������ 비슷한����������� ������������������ 시간대에����������� ������������������ 몰림����������� ������������������
처리����������� ������������������ 구조����������� ������������������ 전체����������� ������������������ 서비스는����������� ������������������ AWS����������� ������������������ 에����������� ������������������
Mobile����������� ������������������ Games����������� ������������������
Redis����������� ������������������ Buffer����������� ������������������
MongoDB����������� ������������������
EMR����������� ������������������
MongoDB����������� ������������������
Web����������� ������������������ Server����������� ������������������
Users����������� ������������������
이벤트����������� ������������������ 수집����������� ������������������
Redis����������� ������������������ Buffer����������� ������������������ :����������� ������������������ 순간적����������� ������������������ 트래픽에����������� ������������������ 대응����������� ������������������
이벤트들을����������� ������������������ 버퍼링해����������� ������������������ 두고����������� ������������������ 백그라운드에서����������� ������������������ DB에����������� ������������������ 저장����������� ������������������
MongoDB����������� ������������������ insert����������� ������������������ :����������� ������������������ Bulk����������� ������������������ Insert����������� ������������������
PIOPS����������� ������������������ EBS����������� ������������������ 사용할����������� ������������������ 수도����������� ������������������
데이터����������� ������������������ 특성����������� ������������������ Why����������� ������������������ MongoDB?����������� ������������������
각종����������� ������������������ 이벤트:����������� ������������������ 비정형����������� ������������������ 데이터����������� ������������������
세션����������� ������������������ :����������� ������������������ 시작시간+끝����������� ������������������ 시간����������� ������������������
구매:����������� ������������������ 아이템ID,����������� ������������������ 액수����������� ������������������
커스텀����������� ������������������ 이벤트����������� ������������������
����������� ������������������
���������� ������������������ MongoDB����������� ������������������
MongoDB����������� ������������������ 특징����������� ������������������
http://www.mongodb.org����������� ������������������
Schema����������� ������������������ 없음:����������� ������������������ BSON����������� ������������������ 레코드����������� ������������������
Schema����������� ������������������ 변경에����������� ������������������ 따른����������� ������������������ migration����������� ������������������ 등의����������� ������������������ 부담����������� ������������������ 없음����������� ������������������
Replication,����������� ������������������ Sharding����������� ������������������
MongoDB����������� ������������������ MR����������� ������������������ Legacy����������� ������������������
통계����������� ������������������ 결과가����������� ������������������ MongoDB����������� ������������������ 에����������� ������������������
데이타����������� ������������������ 관리����������� ������������������ :����������� ������������������ Single����������� ������������������ Backup����������� ������������������
Javascript����������� ������������������ &����������� ������������������ JSON����������� ������������������ :����������� ������������������ 프로토타이핑����������� ������������������ 편함����������� ������������������
MongoDB����������� ������������������ 왜����������� ������������������ Hadoop����������� ������������������ 과����������� ������������������ 연결을?����������� ������������������
Global����������� ������������������ Lock����������� ������������������ :����������� ������������������ ‘replace’����������� ������������������ or����������� ������������������ ‘reduce’����������� ������������������ type����������� ������������������
Javascript����������� ������������������ :����������� ������������������ 개발환경����������� ������������������
Sharding����������� ������������������ 안하면����������� ������������������ 병렬화����������� ������������������ 안됨����������� ������������������
Input����������� ������������������ /����������� ������������������ Output����������� ������������������ Collection����������� ������������������ 이����������� ������������������ 하나로����������� ������������������ 고정����������� ������������������
mongo-hadoop����������� ������������������ MongoDB����������� ������������������ to����������� ������������������ Hadoop����������� ������������������ Adapter����������� ������������������
Hadoop����������� ������������������ MR����������� ������������������ 의����������� ������������������ I/O����������� ������������������ 를����������� ������������������ MongoDB����������� ������������������ 에����������� ������������������
Actively����������� ������������������ Developed����������� ������������������
현재����������� ������������������ stable����������� ������������������ 은����������� ������������������ v1.1.0����������� ������������������
Document����������� ������������������ 약간����������� ������������������ 미비����������� ������������������
Elastic����������� ������������������ Mapreduce����������� ������������������ AWS����������� ������������������
EC2����������� ������������������ 보다����������� ������������������ 저렴����������� ������������������
노드����������� ������������������ 수����������� ������������������ 관리����������� ������������������ 편리����������� ������������������
“Alive”����������� ������������������ EMR����������� ������������������ JobFlow����������� ������������������ 는����������� ������������������ 일반����������� ������������������ hadoop����������� ������������������ 클러스터처럼����������� ������������������ 사용����������� ������������������
(대신����������� ������������������ AWS����������� ������������������ Web����������� ������������������ 콘솔에서����������� ������������������ Job����������� ������������������ 관리����������� ������������������ 못함)����������� ������������������
����������� ������������������
1.0.3����������� ������������������ :����������� ������������������ Mongo-hadoop����������� ������������������ 사용����������� ������������������ 시����������� ������������������ Streaming����������� ������������������ 사용����������� ������������������ 못함����������� ������������������
Mongo-hadoop����������� ������������������ on����������� ������������������ EMR����������� ������������������ EMR����������� ������������������ 에����������� ������������������ mongo-hadoop����������� ������������������ 설치����������� ������������������
Bootstrap����������� ������������������ 스크립트����������� ������������������
Thrift����������� ������������������ 사용할����������� ������������������ 경우����������� ������������������ EMR����������� ������������������ 에����������� ������������������ 포함된����������� ������������������ 0.7.0����������� ������������������ 사용해야����������� ������������������
����������� ������������������
wget -P /home/hadoop/lib http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.11.1/mongo-java-driver-2.11.1.jar!wget -P /home/hadoop/lib https://s3.amazonaws.com/drivers.mongodb.org/hadoop/mongo-hadoop-core_1.0.4-1.1.0.jar!
Split����������� ������������������ 한����������� ������������������ 콜렉션을����������� ������������������ 어떻게����������� ������������������ 쪼개나����������� ������������������
Mapper����������� ������������������ 단위����������� ������������������
Sharding����������� ������������������ 한����������� ������������������ DB����������� ������������������ 는����������� ������������������ 한����������� ������������������ shard����������� ������������������ 가����������� ������������������ 한����������� ������������������ split����������� ������������������
Sharding����������� ������������������ 안한����������� ������������������ DB����������� ������������������ 는����������� ������������������ _id����������� ������������������ 기준으로����������� ������������������ :����������� ������������������ splitVector()����������� ������������������
Split����������� ������������������ Caveats����������� ������������������
MR����������� ������������������ 들어가기����������� ������������������ "전"����������� ������������������ 에����������� ������������������ split����������� ������������������
여러����������� ������������������ MR����������� ������������������ 을����������� ������������������ 돌린다면����������� ������������������ splitVector����������� ������������������ 명령이����������� ������������������ 마구����������� ������������������ 날아감;����������� ������������������ DB����������� ������������������ 부담����������� ������������������
Hadoop����������� ������������������ job����������� ������������������ queue����������� ������������������ 말고����������� ������������������ 다른����������� ������������������ 방법으로����������� ������������������ job����������� ������������������ 들����������� ������������������ 관리할����������� ������������������ 필요����������� ������������������
Split����������� ������������������ ����������� ������������������ Caveats����������� ������������������
-D����������� ������������������ mongo.input.query={“k":{"$gte":“a“,"$lte“:“z“}}����������� ������������������
쿼리는����������� ������������������ split����������� ������������������ 이후에����������� ������������������ 적용����������� ������������������
데이타����������� ������������������ 분포에����������� ������������������ 따라서는����������� ������������������ 빈����������� ������������������ split����������� ������������������ 이����������� ������������������ 많이����������� ������������������ 생길����������� ������������������ 수����������� ������������������ 있음����������� ������������������
Mapper����������� ������������������ 개발����������� ������������������ 시����������� ������������������ 고려사항����������� ������������������
BSON����������� ������������������ 오브젝트로����������� ������������������ map����������� ������������������ &����������� ������������������ reduce����������� ������������������ 간����������� ������������������ 통신����������� ������������������
Thrift����������� ������������������ 를����������� ������������������ 사용하면����������� ������������������ 일일이����������� ������������������ attribute����������� ������������������ 코딩����������� ������������������ 안����������� ������������������ 해도����������� ������������������ 됨����������� ������������������
대신����������� ������������������ thrift����������� ������������������ schema����������� ������������������ 파일은����������� ������������������ 관리해야����������� ������������������
Reducer����������� ������������������ 개발����������� ������������������ 시����������� ������������������ 고려사항����������� ������������������
결과를����������� ������������������ MongoDB����������� ������������������ 에����������� ������������������ insert����������� ������������������ /����������� ������������������ update����������� ������������������
Update����������� ������������������ 시����������� ������������������ 인덱스는����������� ������������������ 제대로����������� ������������������ 걸려����������� ������������������ 있나?����������� ������������������
Hierarchical����������� ������������������ key:����������� ������������������ {a:{b:����������� ������������������ 1}}����������� ������������������ 인가����������� ������������������ {"a.b":����������� ������������������ 1}����������� ������������������ 인가����������� ������������������
BSONFile����������� ������������������ ETL����������� ������������������
HDFS����������� ������������������ 에����������� ������������������ BSON����������� ������������������ 포맷����������� ������������������ 파일을����������� ������������������ 쓰고����������� ������������������ 읽을����������� ������������������ 수����������� ������������������ 있음����������� ������������������
Mongodump����������� ������������������ /����������� ������������������ Mongorestore����������� ������������������ 와����������� ������������������ 호환����������� ������������������
여러����������� ������������������ job����������� ������������������ 에서����������� ������������������ 쓰는����������� ������������������ 중간����������� ������������������ 파일로도����������� ������������������ 좋음����������� ������������������
Mapper����������� ������������������ 에서����������� ������������������ 읽을때����������� ������������������ 최초����������� ������������������ 한번은����������� ������������������ split����������� ������������������ 계산����������� ������������������
이후����������� ������������������ .split����������� ������������������ 파일에����������� ������������������ 저장����������� ������������������
Multiple����������� ������������������ Collection����������� ������������������ 한����������� ������������������ job,����������� ������������������ 다수����������� ������������������ collection����������� ������������������
MongoRecordWriter,����������� ������������������ MongoOutputFormat����������� ������������������ 상속����������� ������������������
Reducer����������� ������������������ output����������� ������������������ 에����������� ������������������ 따라����������� ������������������ collection����������� ������������������ 선택할����������� ������������������ 수����������� ������������������ 있음����������� ������������������
����������� ������������������
����������� ������������������
(더����������� ������������������ 이상����������� ������������������ 자세한����������� ������������������ 설명은����������� ������������������ 생략)����������� ������������������
결론����������� ������������������ &����������� ������������������ 고려사항����������� ������������������
MongoDB����������� ������������������ MR����������� ������������������ 로는����������� ������������������ 처리����������� ������������������ 안되는����������� ������������������ 경우����������� ������������������
AWS����������� ������������������ EMR����������� ������������������ 에서����������� ������������������ 돌리기도����������� ������������������ 쉬움����������� ������������������
Split����������� ������������������ 필요����������� ������������������ 없는����������� ������������������ (혹은����������� ������������������ 곤란한)����������� ������������������ DB����������� ������������������ 에서도����������� ������������������ 잘����������� ������������������ 쓸����������� ������������������ 수����������� ������������������ 있음����������� ������������������
����������� ������������������
DB����������� ������������������ 억세스����������� ������������������ 패턴에����������� ������������������ 주의할����������� ������������������ 필요����������� ������������������ 있음����������� ������������������
~100GB����������� ������������������ 이상은����������� ������������������ 좀����������� ������������������ 부담스러운����������� ������������������ 듯����������� ������������������
(하지만����������� ������������������ PIOPS����������� ������������������ 를����������� ������������������ 쓴다면����������� ������������������ 어떨까?)����������� ������������������
Thank����������� ������������������ You����������� ������������������ ����������� ������������������ &����������� ������������������ AMAA����������� ������������������
����������� ������������������ 개발자����������� ������������������ 모십니다:����������� ������������������ [email protected]����������� ������������������