Apache Pig 기초: 설치, 실행 및 데이터 처리 실습

Apache Pig는 Hadoop 기반 대규모 데이터 처리를 위한 고수준 스크립팅 프레임워크로, 원시 MapReduce Java API보다 추상화 수준이 높습니다. Pig Latin 언어를 통해 복잡한 데이터 변환 작업을 간결하게 표현할 수 있으며, 특히 중첩된 튜플, 벡터, 맵과 같은 풍부한 데이터 타입과 다중 조인(Join), 그룹화, 필터링 등 관계형 연산을 직관적으로 지원합니다.

구성 요소

Pig는 두 가지 핵심 구성 요소로 이루어져 있습니다:

  • Pig Latin: 데이터 흐름을 선언적으로 기술하는 스크립트 언어. 각 문장은 입력 데이터에 대한 변환 단계를 정의합니다.
  • 실행 엔진: 로컬 JVM 또는 Hadoop 클러스터에서 Pig Latin 스크립트를 자동으로 MapReduce 잡으로 컴파일·실행합니다. 사용자는 분산 처리 메커니즘을 직접 관리하지 않아도 됩니다.

환경 설정 (Hadoop 2.2.0 + Pig 0.12.1)

공식 릴리스 페이지에서 pig-0.12.1.tar.gz를 다운로드 후 압축 해제하고, 환경 변수를 설정합니다:

tar xzf pig-0.12.1.tar.gz
export PIG_HOME=/opt/pig-0.12.1
export PATH=$PIG_HOME/bin:$PATH

Hadoop 2.x와 호환성을 확보하기 위해 소스 재빌드가 필요합니다. ant 명령어로 Hadoop 2.3 호환 빌드를 수행하세요:

cd pig-0.12.1
ant clean jar-all -Dhadoopversion=23

또한 Hadoop 경로를 명시해야 하며, 다음 변수를 추가합니다:

export HADOOP_HOME=/opt/hadoop-2.2.0
export PATH=$HADOOP_HOME/bin:$PATH

실행 모드

  • 로컬 모드: pig -x local — 파일 시스템을 직접 접근하며 작은 샘플 데이터 검증에 적합합니다.
  • 클러스터 모드: pig -x mapreduce — 기본값이며, HDFS 상의 데이터를 대상으로 분산 처리를 수행합니다.

실제 작업 예시: 사용자 계정 목록 추출

먼저 /etc/passwd를 HDFS에 업로드합니다:

hadoop fs -mkdir -p /input
hadoop fs -put /etc/passwd /input/passwd.txt

다음으로 Pig 셸에서 다음과 같이 실행합니다:

A = LOAD '/input/passwd.txt' USING PigStorage(':') AS (username:chararray, password:chararray, uid:int, gid:int, gecos:chararray, home:chararray, shell:chararray);
B = FOREACH A GENERATE username;
DUMP B;

출력 결과는 다음과 유사합니다:

(root)
(bin)
(daemon)
(adm)
...
(sshd)

이 과정에서 Pig는 내부적으로 하나 이상의 MapReduce 잡을 생성하여 실행합니다. 로그 출력에는 처리된 레코드 수, 전송된 바이트, 잡 ID 등 실행 메타데이터가 포함됩니다.

적용 범위 및 제약 사항

Pig는 주로 배치 기반 대용량 데이터 처리에 최적화되어 있으며, 실시간 쿼리나 점진적 업데이트, 인덱싱 기반 빠른 조회 등에는 부적합합니다. 전체 데이터셋 스캔이 불가피한 경우, 일부 레코드만 필요한 쿼리에서는 성능 저하가 발생할 수 있습니다.

최신 버전의 Pig는 최적화된 쿼리 계획 생성기와 파이프라인 병합 기법을 통해 네이티브 MapReduce와의 성능 격차를 지속적으로 줄이고 있습니다. 따라서 복잡한 Java 코드 작성 및 튜닝 시간을 절감하고 싶을 때, Pig Latin은 효율적인 대안입니다.

활용 방식 요약

  • 스크립트 실행: pig analyze_user.pig 또는 pig -e "A = LOAD 'data'; DUMP A;"
  • 대화형 셸(Grunt): pig 명령어로 진입 후 즉시 명령어 입력 가능
  • Java 임베디드 사용: PigServer 클래스를 통해 애플리케이션 내에서 Pig 작업을 제어할 수 있음

비교 분석

  • Pig vs SQL: Pig Latin은 데이터 흐름 중심의 절차적 언어이며, SQL은 결과 기반의 선언적 언어입니다.
  • Pig vs Hive: Hive는 SQL 인터페이스를 제공해 전통적 DB 분석가에게 친숙하지만, Pig는 더 유연한 데이터 구조와 복잡한 ETL 파이프라인 구축에 강점이 있습니다.
  • 저장소 의존성: Pig는 자체 저장소를 갖지 않으며, HDFS 위에서 동작하며, 메타데이터는 별도 관리되지 않습니다. 반면 Hive는 메타스토어(MetaStore)를 통해 테이블 스키마를 유지합니다.

태그: apache-pig hadoop MapReduce pig-latin big-data

10월 7일 16:18에 게시됨