Pig 개념
- 맵과 리듀스를 사용하지 않고 데이터를 처리하지 않아도 됨.
- 맵리듀스는 프로그래밍하는데 시간이 많이 걸림
- 간단한 스크립트 언어를 통해 더 쉽고 간결하게 가능 (SQL)
- 맵리듀스와 테즈를 기반으로 하기 때문에 10배 정도는 더 빠르다.
- 피그 스크립트 실행 방법
- Grunt
- Script
- Ambari
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, videoRelease:chararray, imdbLink:chararray);
- DUMP metadata; → 데이터 일부만 사용하길 원할 때, 디버깅할 때 유용하다.
- nameLookup = FOREACH metadata GENERATE movieID, movieTitle, ToUnixTime(ToDate(releaseDate, 'dd-MMM-yyyy')) AS releaseTime;
- ratingsByMovie = GROUP ratings BY movieID;
- (1, {(807, 1, 4,892528231,(554,1,3,876231938,)49,1,2,888068651),...})
- 가장 앞에 그룹으로 묶인 열의 이름은 group이다.
- DESCRIBE ratings; → 스키마를 볼 수 있다.
- fiveStarMovies = FILTER avgRatings BY avgRating > 4.0;
- 필터링
- fiveStarsWithData = JOIN fiveStarMovies BY movieID, nameLookup BY movieID;
- 조인
- 결과값으로 :: 형태의 값이 나온다.
- oldestFiveStarMovies = ORDER fiveStarsWithData BY nameLookup::releaseTime;
- 정렬
Ambari Pig Script
- Pig View로 들어가서 스크립트를 만들고 코드를 입력한다.
- Execute를 클릭 그러면 맵리듀스로 변환하여 코드를 실행한다.
- Execute on Tez를 이용하면 더 빠른 결과를 얻을 수 있다.
- 스크립트를 실행했을때 Timed-out 에러가 났을 때
- su root
- cd /etc/ambari-server/conf/ambari.properties
- views.request.connect.timeout.millis=50000
- views.request.read.timeout.millis=100000
Pig Latin Deeper
- 위에서 살펴본 문법 말고도 다양한 문법을 사용할 수 있다.
- STORE ratings INTO ‘outRatings’ USING PigStorage(’:’);
- DISTINCT, STREAM, MAPREDUCE
- COGROUP, CROSS, CUBE
- RANK, LIMIT
- UNION, SPLIT
- EXPLAIN
- ILLUSTRATE
- 이 밖에도 정말 다양한 문법이 있다.
- 만약 피그를 더 깊게 이해하고 싶다면 O’reilly에서 나온 Programming Pig라는 책을 추천
반응형
'데이터 엔지니어링 > Hadoop' 카테고리의 다른 글
Sec.6 NoSQL & Hadoop (0) | 2022.01.25 |
---|---|
Sec5. Hadoop & RDB (0) | 2022.01.25 |
Sec4. Spark (0) | 2022.01.25 |
Sec2. HDFS & MapReduce (0) | 2022.01.25 |
Sec1. 하둡 설치 및 개요 (0) | 2022.01.18 |