아파치 피그
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
아파치 피그(Apache Pig)는 2006년 야후 연구소에서 개발된 대용량 데이터 세트 처리를 위한 플랫폼으로, 맵리듀스 작업을 쉽게 생성하고 실행할 수 있도록 지원한다. 피그는 피그 라틴(Pig Latin)이라는 자체 프로그래밍 언어를 사용하며, SQL과 비교하여 중첩 관계형 모델 사용, 지연 평가, ETL 지원 등의 특징을 갖는다. 피그는 파이프라인의 어느 지점에서든 사용자 코드를 포함할 수 있어 데이터 처리 흐름을 유연하게 제어할 수 있으며, SQL보다 데이터 처리 스트림 분할에 용이하다.
더 읽어볼만한 페이지
- 데이터 모델링 언어 - 임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. - 데이터 모델링 언어 - 데이터 정의 언어
데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다. - 질의 언어 - 임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. - 질의 언어 - XQuery
XQuery는 함수형 프로그래밍 패러다임을 지원하며 XPath 식 구문의 상위 집합을 포함하는 XML 데이터 추출 및 조작을 위한 쿼리 언어로서, FLWOR 식을 통해 XML 데이터 조작 및 새로운 XML 문서 구성을 지원하고 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 한다. - 하둡 - 아파치 하둡
아파치 하둡은 대용량 데이터를 분산 처리하기 위한 자바 기반의 오픈 소스 프레임워크로, HDFS, 맵리듀스, YARN 등의 모듈로 구성되어 클라우드 환경에서도 사용된다. - 하둡 - 맵리듀스
맵리듀스는 대용량 데이터 처리를 위해 구글에서 개발한 프로그래밍 모델이자 프레임워크로, Map과 Reduce 함수를 사용하여 데이터를 병렬 처리하며 하둡 등의 오픈 소스 구현을 통해 널리 쓰인다.
| 아파치 피그 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 개발자 | 아파치 소프트웨어 재단, 야후 리서치 |
| 발표일 | 2008년 9월 11일 |
| 최신 버전 | 0.17.0 |
| 최신 버전 발표일 | 2017년 6월 19일 |
| 운영체제 | 마이크로소프트 윈도우, macOS, 리눅스 |
| 프로그래밍 언어 | 자바 |
| 장르 | 데이터 분석 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | 아파치 피그 공식 웹사이트 |
2. 역사
아파치 피그(Apache Pig)는 2006년경 야후 연구소에서 연구자들이 매우 큰 데이터 세트에 대해 맵리듀스(MapReduce) 작업을 임시로 생성하고 실행할 수 있도록 개발되었다.[4] 2007년에 아파치 소프트웨어 재단(Apache Software Foundation)으로 이전되었다.[5]
피그 프로그래밍 언어의 이름은 기억하기 쉽고, 철자하기 쉬우며, 참신하다는 이유로 임의로 선택되어 굳어졌다.[7][8][9]
프로젝트 초기 연구원들은 이 언어를 단순히 '그 언어'라고 불렀으나, 이후 이름을 붙일 필요성이 생겼다. 한 연구원이 즉흥적으로 '피그(Pig)'를 제안했고, 이 이름이 그대로 사용되었다. 앨런 게이츠(Alan Gates)와 다니엘 다이(Daniel Dai)는 ''프로그래밍 피그, 2판''(2017년 11월)에서 이 이름이 괴짜 같지만 기억하기 쉽고 철자하기도 쉽다고 언급했다. 또한, 이 이름은 언어를 위한 피그 라틴(Pig Latin), 셸을 위한 그런트(Grunt), CPAN과 유사한 공유 저장소를 위한 피기뱅크(PiggyBank)와 같은 재미있는 명명법을 제공했다.[7][8][9]
2. 1. 개발 배경
아파치 피그(Apache Pig)는 2006년경 야후 연구소에서 연구자들이 매우 큰 데이터 세트에 대해 맵리듀스(MapReduce) 작업을 임시로 생성하고 실행할 수 있도록 개발되었다.[4] 2007년에 아파치 소프트웨어 재단(Apache Software Foundation)으로 이전되었다.[5]2. 2. 버전별 출시 내역
2. 3. 프로젝트 명칭 (Pig)
피그 프로그래밍 언어의 이름은 기억하기 쉽고, 철자하기 쉬우며, 참신하다는 이유로 임의로 선택되어 굳어졌다.[7][8][9]프로젝트 초기 연구원들은 이 언어를 단순히 '그 언어'라고 불렀으나, 이후 이름을 붙일 필요성이 생겼다. 한 연구원이 즉흥적으로 '피그(Pig)'를 제안했고, 이 이름이 그대로 사용되었다. 앨런 게이츠(Alan Gates)와 다니엘 다이(Daniel Dai)는 ''프로그래밍 피그, 2판''(2017년 11월)에서 이 이름이 괴짜 같지만 기억하기 쉽고 철자하기도 쉽다고 언급했다. 또한, 이 이름은 언어를 위한 피그 라틴(Pig Latin), 셸을 위한 그런트(Grunt), CPAN과 유사한 공유 저장소를 위한 피기뱅크(PiggyBank)와 같은 재미있는 명명법을 제공했다.[7][8][9]
3. 피그 라틴 (Pig Latin)
피그 라틴(Pig Latin)으로 작성된 "단어 수 세기" 프로그램 예시는 다음과 같다.
```pig
input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS (line:chararray);
- - 각 줄에서 단어를 추출하여 Pig bag 데이터 유형에 넣은 다음, bag을 평탄화하여 각 행에 단어를 하나씩 가져옵니다.
words = FOREACH input_lines GENERATE FLATTEN(TOKENIZE(line)) AS word;
- - 공백만 있는 단어를 필터링합니다.
filtered_words = FILTER words BY word MATCHES '\\w+';
- - 각 단어에 대한 그룹을 생성합니다.
word_groups = GROUP filtered_words BY word;
- - 각 그룹의 항목 수를 계산합니다.
word_count = FOREACH word_groups GENERATE COUNT(filtered_words) AS count, group AS word;
- - 레코드를 수에 따라 정렬합니다.
ordered_word_count = ORDER word_count BY count DESC;
STORE ordered_word_count INTO '/tmp/number-of-words-on-internet';
```
위 프로그램은 인터넷의 모든 웹 페이지와 같은 데이터 세트에서 단어 수를 세기 위해 하둡 클러스터의 여러 컴퓨터에 분산될 수 있는 병렬 실행 작업을 생성한다.
3. 1. 특징
3. 2. 예제: 워드 카운트 (Word Count)
다음은 피그 라틴으로 작성된 워드 카운트 프로그램 예시이다.```
input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS (line:chararray);
- - 각 줄에서 단어를 추출하여 Pig bag 데이터 유형에 넣은 다음, bag을 평탄화하여 각 행에 단어를 하나씩 가져옵니다.
words = FOREACH input_lines GENERATE FLATTEN(TOKENIZE(line)) AS word;
- - 공백만 있는 단어를 필터링합니다.
filtered_words = FILTER words BY word MATCHES '\\w+';
- - 각 단어에 대한 그룹을 생성합니다.
word_groups = GROUP filtered_words BY word;
- - 각 그룹의 항목 수를 계산합니다.
word_count = FOREACH word_groups GENERATE COUNT(filtered_words) AS count, group AS word;
- - 레코드를 수에 따라 정렬합니다.
ordered_word_count = ORDER word_count BY count DESC;
STORE ordered_word_count INTO '/tmp/number-of-words-on-internet';
```
위 프로그램은 Hadoop 클러스터의 여러 컴퓨터에 분산될 수 있는 병렬 실행 작업을 생성하여 데이터 세트에서 단어 수를 계산한다.
4. Pig vs SQL
SQL과 비교하여 피그는 다음과 같은 특징을 갖는다.
- 중첩 관계형 모델을 사용한다.
- 지연 평가를 사용한다.
- 추출, 변환, 적재(ETL)를 사용한다.
- 파이프라인의 어느 시점에서든 데이터를 저장할 수 있다.
- 실행 계획을 선언한다.
- 파이프라인 분할을 지원하므로 워크플로가 엄격한 순차적 파이프라인 대신 DAG를 따라 진행될 수 있다.
데이터가 로드되면 DBMS가 MapReduce 시스템보다 훨씬 빠르다는 주장이 있지만, 데이터 로드에는 데이터베이스 시스템에서 훨씬 더 오래 걸린다. 또한 RDBMS는 열 저장, 압축된 데이터 작업, 효율적인 임의 데이터 접근을 위한 인덱스, 트랜잭션 수준의 내결함성에 대한 즉시 지원을 제공한다.[10]
피그 라틴은 절차적이며 파이프라인 패러다임에 매우 자연스럽게 적합하지만, SQL은 선언적이다. SQL에서 사용자는 두 테이블의 데이터를 조인해야 한다고 지정할 수 있지만, 어떤 조인 구현을 사용할지는 지정할 수 없다(SQL에서 JOIN의 구현을 지정할 수 있으므로 "... 많은 SQL 애플리케이션의 경우 쿼리 작성자는 데이터에 대한 충분한 지식이나 적절한 조인 알고리즘을 지정할 수 있는 전문 지식이 없을 수 있습니다."). 피그 라틴을 사용하면 사용자가 스크립트 실행에 사용할 구현 또는 구현 측면을 여러 가지 방법으로 지정할 수 있다.[2] 실제로 피그 라틴 프로그래밍은 쿼리 실행 계획을 지정하는 것과 유사하므로 프로그래머가 데이터 처리 작업의 흐름을 명시적으로 제어하기가 더 쉽다.[11]
SQL은 단일 결과를 생성하는 쿼리를 중심으로 한다. SQL은 트리를 자연스럽게 처리하지만, 데이터 처리 스트림을 분할하고 각 하위 스트림에 다른 연산자를 적용하는 내장 메커니즘이 없다. 피그 라틴 스크립트는 파이프라인이 아닌 방향 비순환 그래프 (DAG)를 설명한다.[2]
파이프라인의 어느 지점에서든 사용자 코드를 포함할 수 있는 피그 라틴의 기능은 파이프라인 개발에 유용하다. SQL을 사용하는 경우 먼저 데이터를 데이터베이스로 가져온 다음 정제 및 변환 프로세스를 시작할 수 있다.[12]
4. 1. Pig의 특징 (SQL 대비)
SQL과 비교하여 피그는 다음과 같은 특징을 갖는다.- 중첩 관계형 모델을 사용한다.
- 지연 평가를 사용한다.
- 추출, 변환, 적재(ETL)를 사용한다.
- 파이프라인의 어느 시점에서든 데이터를 저장할 수 있다.
- 실행 계획을 선언한다.
- 파이프라인 분할을 지원하므로 워크플로가 엄격한 순차적 파이프라인 대신 DAG를 따라 진행될 수 있다.
데이터가 로드되면 DBMS가 MapReduce 시스템보다 훨씬 빠르다는 주장이 있지만, 데이터 로드에는 데이터베이스 시스템에서 훨씬 더 오래 걸린다. 또한 RDBMS는 열 저장, 압축된 데이터 작업, 효율적인 임의 데이터 접근을 위한 인덱스, 트랜잭션 수준의 내결함성에 대한 즉시 지원을 제공한다.[10]
피그 라틴은 절차적이며 파이프라인 패러다임에 매우 자연스럽게 적합하지만, SQL은 선언적이다. SQL에서 사용자는 두 테이블의 데이터를 조인해야 한다고 지정할 수 있지만, 어떤 조인 구현을 사용할지는 지정할 수 없다(SQL에서 JOIN의 구현을 지정할 수 있으므로 "... 많은 SQL 애플리케이션의 경우 쿼리 작성자는 데이터에 대한 충분한 지식이나 적절한 조인 알고리즘을 지정할 수 있는 전문 지식이 없을 수 있습니다."). 피그 라틴을 사용하면 사용자가 스크립트 실행에 사용할 구현 또는 구현 측면을 여러 가지 방법으로 지정할 수 있다.[2] 실제로 피그 라틴 프로그래밍은 쿼리 실행 계획을 지정하는 것과 유사하므로 프로그래머가 데이터 처리 작업의 흐름을 명시적으로 제어하기가 더 쉽다.[11]
SQL은 단일 결과를 생성하는 쿼리를 중심으로 한다. SQL은 트리를 자연스럽게 처리하지만, 데이터 처리 스트림을 분할하고 각 하위 스트림에 다른 연산자를 적용하는 내장 메커니즘이 없다. 피그 라틴 스크립트는 파이프라인이 아닌 방향 비순환 그래프 (DAG)를 설명한다.[2]
파이프라인의 어느 지점에서든 사용자 코드를 포함할 수 있는 피그 라틴의 기능은 파이프라인 개발에 유용하다. SQL을 사용하는 경우 먼저 데이터를 데이터베이스로 가져온 다음 정제 및 변환 프로세스를 시작할 수 있다.[12]
4. 2. SQL의 장점 (Pig 대비)
관계형 데이터베이스 관리 시스템(RDBMS)은 데이터가 로드되면 MapReduce 시스템보다 빠른 처리 속도를 제공한다.[10] 하지만, 데이터 로드에는 데이터베이스 시스템에서 더 오랜 시간이 걸린다. RDBMS는 열 저장, 압축된 데이터 작업, 효율적인 임의 데이터 접근을 위한 인덱스, 트랜잭션 수준의 내결함성을 기본적으로 지원한다.[10]4. 3. 사용자 코드 통합
피그 라틴은 파이프라인의 어느 지점에서든 사용자 코드를 포함할 수 있어 파이프라인 개발에 유용하다.[12] SQL을 사용하는 경우에는 먼저 데이터를 데이터베이스로 가져온 다음 정제 및 변환 프로세스를 시작할 수 있다.[12]5. 한국에서의 활용
참조
[1]
웹사이트
Hadoop: Apache Pig
http://pig.apache.or[...]
2011-09-02
[2]
웹사이트
"[PIG-4167] Initial implementation of Pig on Spark - ASF JIRA"
https://issues.apach[...]
2018-12-29
[3]
웹사이트
Pig user defined functions
http://pig.apache.or[...]
2013-05-03
[4]
웹사이트
Yahoo Blog:Pig – The Road to an Efficient High-level language for Hadoop
https://developer.ya[...]
2015-05-23
[5]
웹사이트
Pig into Incubation at the Apache Software Foundation
https://developer.ya[...]
2015-05-23
[6]
웹사이트
Apache Pig Releases
https://pig.apache.o[...]
2019-03-13
[7]
웹사이트
1. What Is Pig? - Programming Pig, 2nd Edition [Book]
https://www.oreilly.[...]
2021-08-01
[8]
서적
Programming Pig
https://www.worldcat[...]
2016
[9]
간행물
Pig mascot questions
https://www.mail-arc[...]
2021-07-27
[10]
웹사이트
Communications of the ACM: MapReduce and Parallel DBMSs: Friends or Foes?
http://database.cs.b[...]
2015-05-23
[11]
웹사이트
ACM SigMod 08: Pig Latin: A Not-So-Foreign Language for Data Processing
http://infolab.stanf[...]
2015-05-23
[12]
웹사이트
Yahoo Pig Development Team: Comparing Pig Latin and SQL for Constructing Data Processing Pipelines
https://developer.ya[...]
2015-05-23
[13]
웹인용
Hadoop: Apache Pig
http://pig.apache.or[...]
2011-09-02
[14]
웹인용
Yahoo Blog:Pig – The Road to an Efficient High-level language for Hadoop
http://developer.yah[...]
2010-11-01
[15]
웹인용
Yahoo Blog:Pig – The Road to an Efficient High-level language for Hadoop
http://developer.yah[...]
2010-11-01
[16]
웹인용
The Apache Software Foundation
http://apache.org/
2010-11-01
[17]
웹인용
Apache Pig Releases
https://pig.apache.o[...]
2019-03-13
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com