2017년 9월부터 5개월 간의 경험들
한 달 전쯤부터 어떤 일들을 했는지 꾸준히 정리해야겠다고 마음먹었는데 차일피일 미루다 이제야 정리해본다. 매일매일 새로운 문제를 만나고, 또 극복하면서 굉장히 많은 일을 했다고 생각했는데 막상 정리하면서 별 것도 아닌 것 같은 일들은 소거하다 겨우 이 정도 일을 이렇게나 오래 걸려서 했나 싶어서 슬플 따름이다.
데이터 파이프라인 구축
기존의 방식에서 HDFS에 저장하는 방식으로 전환
AWS Kinesis Firehose + EMR을 시도해본 뒤 직접 Hadoop Ecosystem 환경을 구축하기로 결정
Hadoop Ecosystem Component들 관리를 위해 Apache Ambari 사용
HDFS 운용 경험
-
HA를 위한 Secondary Name Node, Journal Node 개념 이해와 설정
-
Replication을 위한 설정 조율
-
HDFS Rebalancing
-
Data Node 증설 및 디스크 추가
YARN 운용 경험
-
Resource Manager, Node Manager의 역할 이해
-
Local Cache로 인한 디스크 부족 상황 경험
-
Spark application의 Dynamic Allocation
데이터 파이프라인 Component 간의 데이터 전달을 위해 Kafka 구축
-
Producer, Consumer, Offset, Consumer Group, Lag 개념 이해
-
디스크 용량 부족시 디스크 증설 작업 경험
-
Broker 증설 작업 경험
-
장애로 인해 Broker가 급사했을 때 복구 경험
Exactly Once Semantic Messaging을 위해 NoSQL 기반 Component 활용
-
Aerospike 운용 경험
-
그러나 HDFS에 저장할 때는 동일한 메세지를 동일한 파티션에 저장한 뒤 파티션째로 Cleansing Job을 돌리는 것으로 메세지 중복 제거
운영 단 사용은 Zeppelin으로
-
Interpreter 개념 이해 및 설정
-
User Impersonation
Ambari Metrics Collector, Grafana로 서버 모니터링
데이터 Format 문제
Format이 섞이면서 생기는 문제들 경험
JSON 포맷 충돌로 인한 고통 경험
- 이 문제를 극복하기 위해 JSON Schema 기반 Strict Format 도입
Format Migration
저장된 데이터 분석은 Spark로
기본적인 Spark 작동 원리 이해
-
Driver, Executor
-
여러 가지 연산들
빠른 조회를 위해 Partitioning
- 어떤 경우 Partition filtering이 안 되는지 이런저런 실험
Out Of Memory의 고통을 많이 경험
분석을 위한 여러 가지 로직 개발 경험
-
Retention 분석
-
Single Touch, Multi Touch, Multi Source 분석
-
Join시 Hash partitioning에 의한 Data skewing 문제
-
Theta join시 Cross join이 되지 않도록 회피하기 위한 작업
Kafka로부터 HDFS에 저장하기 위해 Spark Streaming + Kafka Ingestion 활용
해보고 싶었지만 아직 해보지 못한 것들
데이터 파이프라인 모니터링 및 경고 시스템 개선
무중단 HDFS 버전 업그레이드
HDFS 인프라 작업 도중 Data Node가 갑자기 Stale 상태가 될 때가 있는데, Name Node를 재시작하면 문제는 해결되지만 정확한 이유가 뭔지 아직 밝히지 못함
실시간 데이터 및 로그 조회 편의를 위한 ELK 구축
비용 절감을 위한 Hot-warm Architecture 구성
데이터 파이프라인 Component에 Akka 구조를 적용하여 좀 더 내구성 있게 보완
이 일들을 하면서 도움을 주신 분들에게 정말 감사하다는 말씀을 드리고 싶다. 마지막으로, 어서 분석 쪽으로 더 많은 일을 해보고 싶다.