570. 하둡 에코시스템 - Hive와 Pig의 맵리듀스(MapReduce) 추상화

⚠️ 이 문서는 빅데이터의 시초인 하둡(Hadoop) 환경에서, 수천 대의 서버에 흩어진 1페타바이트짜리 텍스트 로그를 분석하기 위해 개발자들이 피를 토하며 수백 줄짜리 자바(Java) 맵리듀스(MapReduce) 코드를 짜야 했던 끔찍한 진입 장벽을 무너뜨리고, "그냥 평소에 쓰던 SQL 한 줄만 치면 우리가 알아서 자바 코드로 번역해서 돌려줄게!"라고 선언한 구원자 'Hive(하이브)'와 'Pig(피그)'의 추상화 철학을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 맵리듀스는 빅데이터 분산 처리의 천재적인 패러다임이지만, 인간이 직접 짜기엔 너무 로우 레벨(Low-level)의 기계적인 코드다. Hive와 Pig는 이 복잡한 자바 맵리듀스 코드를 뒤로 숨기고(추상화), 인간에게 친숙한 언어(SQL, 스크립트)를 제공하는 **통역기(Compiler)**다.
  2. 가치: 자바를 전혀 모르는 데이터 분석가(마케터, 통계학자)도 10분 만에 배울 수 있는 SQL(HiveQL) 쿼리 한 줄만 날리면, 1페타바이트의 빅데이터에서 기저귀 판매량을 1시간 만에 뽑아낼 수 있게 되어 빅데이터 분석의 대중화를 이끌었다.
  3. 기술 체계: 페이스북이 만든 Hive는 기존 RDBMS 분석가들을 타겟으로 완벽한 SQL 문법을 지원하며(선언적), 야후가 만든 Pig는 복잡한 데이터 파이프라인을 한 줄 한 줄 단계적으로 깎아내는 스크립트(절차적) 방식을 취한다.

Ⅰ. 맵리듀스(MapReduce)의 원죄: 극악의 생산성

천재가 만든 기계를 조종하려면 천재가 되어야 했다.

  1. MapReduce의 천재성:
    • 구글이 논문으로 발표한 개념으로, 100TB짜리 파일을 1대 서버에서 1년 동안 읽는 대신, 1,000대 서버로 파일을 100GB씩 찢어서 나눠주고(Map), 각자 단어 개수를 센 다음, 그 결과를 한곳으로 모아 합치는(Reduce) 완벽한 분산 처리 기술이다.
  2. Java 하드코딩의 고통:
    • 문제는 "로그 파일에서 20대 여성의 구매액 총합을 구해라"라는 간단한 질문 하나를 던지기 위해, 개발자는 Mapper 클래스를 상속받고, Reducer 클래스를 만들고, 수백 줄의 자바(Java) 코드를 짜서 .jar 파일로 컴파일한 뒤 하둡 클러스터에 배포해야 했다.
    • 분석가들은 자바를 모른다. 간단한 평균 하나 구하는 데도 자바 개발자에게 사정사정해서 코드를 부탁해야 하는 심각한 병목(Silo) 현상이 터졌다.

📢 섹션 요약 비유: 맵리듀스는 수천 명의 일꾼(서버)을 동시에 부릴 수 있는 엄청난 군대입니다. 하지만 이 군대에게 "앞으로 가"라고 명령하려면 두꺼운 한문 병법서(Java 코드)를 달달 외워서 붓글씨로 명령서를 써야만(컴파일) 했습니다. 무술(데이터 분석)만 배운 장군들은 이 한문을 몰라서 군대를 부릴 수 없는 답답한 상황에 처했습니다.


Ⅱ. 페이스북의 구원자: 아파치 하이브 (Apache Hive)

"네가 쓰던 그 SQL, 여기서도 똑같이 치게 해 줄게."

  1. HiveQL의 탄생:
    • 페이스북 데이터 팀도 자바 코드를 짜다 지쳐서 Hive를 발명했다.
    • 하이브는 하둡(HDFS) 위에 떠 있는 가짜 DB다. 사용자가 SELECT SUM(price) FROM logs WHERE age=20 이라고 친숙한 SQL(정확히는 HiveQL)을 터미널에 냅다 친다.
  2. 통역(Compilation)의 마법:
    • 하이브 엔진은 이 1줄짜리 SQL을 낚아채어, 속으로 자신이 직접 100줄짜리 자바 맵리듀스(MapReduce) 코드로 실시간 번역(Compile)해 버린다.
    • 그리고 번역된 그 자바 코드를 하둡 클러스터로 던져서 실행시킨 뒤, 1시간 뒤에 결과가 나오면 엑셀(표)처럼 예쁘게 화면에 찍어준다.
  3. 분석가의 독립 선언:
    • 이제 자바 개발자는 필요 없다. SQL만 칠 줄 아는 엑셀/통계 부서 직원들이 직접 하둡에 접속해 수백 기가바이트의 빅데이터를 맘껏 주무르기 시작했다.

📢 섹션 요약 비유: 군대(하둡)에 '완벽한 동시 통역사(Hive)'를 고용했습니다. 이제 장군(분석가)이 한문을 배울 필요 없이 그냥 한국어로 "앞으로 가!(SQL)"라고 편하게 소리치면, 통역사가 그 말을 듣고 빛의 속도로 한문 병법서(맵리듀스 자바 코드)로 번역해 병사들에게 뿌려버리는 기적의 소통 혁명입니다.


Ⅲ. 야후의 파이프라인: 아파치 피그 (Apache Pig)

SQL로는 표현하기 힘든 더럽고 복잡한 데이터 정제를 처리한다.

  1. SQL의 한계 (선언형의 딜레마):
    • 하이브(SQL)는 "무엇을 내놔라(What)"라고 선언하기엔 좋지만, "1번 파일에서 A를 자르고, 2번 파일에서 B를 붙인 다음, 쓸데없는 걸 버리고 합쳐라(How)" 같은 복잡한 다단계 데이터 세탁(ETL 파이프라인)을 묘사하기엔 쿼리가 너무 길어지고 지저분해진다.
  2. Pig Latin 스크립트 (절차형 통역사):
    • 야후(Yahoo)가 만든 Pig는 SQL 대신 **'Pig Latin'**이라는 아주 쉬운 절차적 스크립트 언어를 제공한다.
    A = LOAD 'data.txt' USING PigStorage(',');
    B = FILTER A BY age > 20;
    C = GROUP B BY gender;
    D = DUMP C;
    
    • 이 4줄의 스크립트를 치면, Pig 역시 이를 낚아채서 여러 개의 자바 맵리듀스 잡(Job)으로 번역해 하둡에 던져버린다.
  3. 용도에 따른 하이브와 피그의 공존:
    • Pig: 데이터 엔지니어가 더러운 원본 로그(Raw Data)를 1차로 씻어내고 깎아내는 정제 작업(ETL)에 투입된다.
    • Hive: 씻겨진 깨끗한 데이터를 통계학자나 기획자가 SQL로 조회하여 주간 매출 보고서를 뽑아낼 때 쓰인다.

📢 섹션 요약 비유: 'Hive'는 완성된 재료들을 가지고 "김치찌개 내놔!"라고 한마디로 주문하는(SQL) 식당 손님용 통역기입니다. 반면 'Pig'는 주방 안에서 "배추를 썰고 $\rightarrow$ 고기를 볶고 $\rightarrow$ 물을 부어라"라고 요리사(데이터 엔지니어)가 레시피 순서대로 재료를 손질할 때(스크립트) 쓰는 주방용 통역기입니다. 둘 다 결국 맵리듀스라는 가스레인지를 켜서 요리를 완성합니다.