일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux
- Docker
- airflow
- 가상환경
- 컴퓨터 네트워크
- dockerfile
- HADOOP
- 데브코스
- 데이터 엔지니어링
- 정리
- 종류
- Django
- S3
- TCP
- 데이터 웨어하우스
- 컴퓨터네트워크
- http
- airflow.cfg
- 자료구조
- redshift
- 데이터베이스
- AWS
- 데이터엔지니어링
- PYTHON
- 파이썬
- Go
- TIL
- 데이터 파이프라인
- sql
- 운영체제
- Today
- Total
홍카나의 공부방
[Hadoop] Apache Pig의 개요와 사용법 본문
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에서의 각 함수들과 매우 유사하다.
Pig는 간략히만 훑어보고, 추후 필요하다면 더욱 깊게 파고들 예정이다.
'Data Engineering > Hadoop' 카테고리의 다른 글
[Hadoop] MongoDB와 Hadoop (0) | 2024.05.27 |
---|---|
[Hadoop] Hive 소개와 작동 방식 (5) | 2024.05.26 |
[Hadoop] Apache Spark 2.0 개요와 RDD, DataSet (0) | 2024.05.19 |
[Hadoop] HDFS 개요와 HDFS 접근 방법, MapReduce (0) | 2024.05.12 |
[Hadoop] NCP에서 하둡 실습 환경 구축하기 (1) | 2024.05.11 |