홍카나의 공부방

[Hadoop] Apache Pig의 개요와 사용법 본문

Data Engineering/Hadoop

[Hadoop] Apache Pig의 개요와 사용법

홍문관카페나무 2024. 5. 19. 14:19

 

Why Pig?

 

하둡 에코시스템 내부의 Pig는 분산 데이터 처리를 목적으로 사용하는 프로그램이다.

Hadoop의 기본 데이터 처리 구조인 Mapper와 Reducer의 프레임에 맞춰서 개발하기 쉽지 않은 문제들도 있을 것인데, 이럴 때 사용할 수 있는 대안중 하나가 바로 Pig다. Pig는 맵리듀스 위에서 작동하고, Pig Latin이라는 새로운 프로그래밍 언어를 사용한다. 그리고 절차형 언어로, 언어 자체가 SQL과 굉장히 유사한 특징을 가지고 있어 SQL에 익숙하다면 쉽게 배울 수 있는 언어다.

 

Pig Latin은 내부적으로 맵리듀스 작업으로 변환되어 Hadoop 클러스터에서 실행된다.

 

 

Pig의 사용법

마스코트가 돼지(...)다.

 

Pig를 사용할 수 있는 방법은 여러 가지가 있다.

  • 첫 번째로는 명령줄 해석 프로그램인 Grunt를 사용하는 것이다. Grunt 프롬프트에서 Pig 스크립트를 한 줄씩 사용할 수 있다.
  • 두 번째로는 Script 형태로 만들어서 주기적으로 실행을 시켜 볼 수 있다.
  • 세 번째로는 Ambari, Hue에서 구성된 Pig 서비스 화면에서 Pig를 사용하는 것이다.

 

Pig - 쉬운 사용 예시

 

MovieLens-100k 데이터를 기반으로 다음의 Pig 코드를 작성해보았다.

 

ratings = LOAD '/user/maria_dev/ml-100k/u.data' AS (userID:int, movieID:int, rating:int, ratingTime:int);

metadata = LOAD '/user/maria_dev/ml-100k/u.item' USING PigStorage('|')
	AS (movieID:int, movieTitle:chararray, releaseDate:chararray, videoRealese:chararray, imdblink:chararray);
   
nameLookup = FOREACH metadata GENERATE movieID, movieTitle,
	ToUnixTime(ToDate(releaseDate, 'dd-MMM-yyyy')) AS releaseTime;
   
ratingsByMovie = GROUP ratings BY movieID;

avgRatings = FOREACH ratingsByMovie GENERATE group as movieID, AVG(ratings.rating) as avgRating;

fiveStarMovies = FILTER avgRatings BY avgRating > 4.0;

fiveStarsWithData = JOIN fiveStarMovies BY movieID, nameLookup BY movieID;

oldestFiveStarMovies = ORDER fiveStarsWithData BY nameLookup::releaseTime;

DUMP oldestFiveStarMovies;

 

1. ratings 객체를 할당하는 LOAD 코드는 Mapper가 할 작업을 대신하는 코드다. 내부적으로는 MapReduce가 진행되며, 해당 경로에 있는 u.data 파일을 AS 뒤에 있는 {key:data type} 형태로 일종의 column으로 불러오고 할당하는 코드라고 볼 수 있다. SQL에서 CREATE TABLE과 비슷하다.

 

2. USING PigStorage('|')로 .csv의 구분자인 '|'로 데이터를 분류할 수 있도록 설정했다.

 

3. metadata 객체의 각 행에 대해서(FOREACH) movieID, movieTitle, releaseTim을 형변환 해서 불러왔다.

 

4. 이후 FILTER, JOIN, ORDER BY, GROUP BY 등은 SQL에서의 각 함수들과 매우 유사하다.

 

Ambari - Pig View에서 위 스크립트를 실행한 결과

 

Pig는 간략히만 훑어보고, 추후 필요하다면 더욱 깊게 파고들 예정이다.

반응형