명령줄 도구가 Hadoop 클러스터보다 235배 빠를 수 있다 (2014)

1 day ago 5

  • 1.75GB의 체스 경기 데이터를 Hadoop 대신 명령줄 도구로 처리한 결과, 12초 만에 완료되어 Hadoop의 26분 대비 235배 이상 빠른 성능을 보임
  • grep, sort, uniq, awk, xargs, mawk 등 기본 셸 명령을 조합해 스트리밍 처리 파이프라인을 구성, 메모리 사용을 거의 0으로 유지
  • xargs 병렬 처리mawk 최적화를 통해 CPU 코어 활용도를 높이고, IO 병목을 최소화함
  • 동일한 데이터셋을 Hadoop 클러스터(7대의 c1.medium 인스턴스)로 처리할 때보다 비용과 유지보수 부담이 현저히 낮음
  • 단일 머신에서도 효율적인 데이터 분석이 가능함을 보여주며, 불필요한 Big Data 도구 사용에 대한 경각심을 제시함

서론: Hadoop보다 빠른 명령줄 처리

  • 약 2백만 건의 체스 경기 데이터를 Amazon EMR과 mrjob으로 분석한 사례를 보고, 동일 데이터를 명령줄 기반 스트리밍 처리로 재현
    • Hadoop 클러스터(7대 c1.medium)에서 26분 소요, 1.14MB/sec 처리속도
    • 로컬 노트북에서는 12초 만에 완료, 270MB/sec 처리속도
  • 단순한 결과 집계 작업은 Hadoop보다 셸 파이프라인이 훨씬 효율적임을 입증
  • 셸 명령을 조합하면 Storm과 유사한 병렬 스트림 처리 구조를 단일 머신에서 구현 가능

데이터 구조와 준비

  • 데이터는 PGN(Portable Game Notation) 형식의 체스 경기 기록으로, 각 경기의 결과는 "Result" 라인에 표시됨
    • "1-0"은 백 승, "0-1"은 흑 승, "1/2-1/2"는 무승부
  • GitHub의 rozim/ChessData 저장소에서 약 3.46GB 데이터셋 확보
    • Tom Hayden의 실험 데이터(1.75GB)의 약 두 배 규모

기본 파이프라인 구축

  • IO 한계 측정을 위해 cat *.pgn > /dev/null 실행 시 약 13초(272MB/sec) 소요
  • 기본 분석 파이프라인: cat *.pgn | grep "Result" | sort | uniq -c
    • 실행 시간 약 70초, Hadoop 대비 약 47배 빠름
  • sort | uniq 대신 AWK를 사용해 결과를 직접 집계
    • 실행 시간 65초, 메모리 사용 거의 없음
    • grep이 단일 CPU 코어를 점유하며 병목 발생

병렬화 및 최적화

  • xargs를 이용해 grep 병렬화 find . -type f -name '*.pgn' -print0 | xargs -0 -n1 -P4 grep -F "Result" | gawk ...
    • 실행 시간 38초, 약 77배 속도 향상
  • grep을 제거하고 AWK 단독 필터링으로 단계를 단순화
    • 각 파일별 결과를 통합하기 위해 이중 AWK 파이프라인 구성
    • 실행 시간 18초, 약 174배 빠름
  • mawk로 교체 시 추가 최적화 find . -type f -name '*.pgn' -print0 | xargs -0 -n4 -P4 mawk ... | mawk ...
    • 실행 시간 12초, Hadoop 대비 235배 빠름, 처리속도 270MB/sec

결론: 단순함의 효율성

  • 대규모 분산 처리가 필요한 경우를 제외하면, 단일 머신의 셸 도구 조합이 더 빠르고 경제적
  • Hadoop은 종종 관계형 DB나 단순 스크립트로 충분한 작업에도 과도하게 사용되고 있음
  • 명령줄 기반 스트리밍 분석은 성능, 구현 비용, 유지보수성 측면에서 우수한 대안임

Read Entire Article