Hadoop Pig 튜토리얼: Apache Pig란 무엇입니까? Archi강의, 예시
⚡ 스마트 요약
Apache Pig는 Hadoop에서 대규모 데이터 세트를 분석하기 위한 고급 플랫폼으로, Pig Latin 데이터 흐름 언어와 각 스크립트를 MapReduce, Tez 또는 기타 형식으로 컴파일하는 런타임을 결합합니다. Spark 작업을 자동으로 처리합니다.
이 튜토리얼은 Apache Pig의 기본 개념을 설명하는 것으로 시작하여 설치 및 Pig Latin 스크립트 실행 과정을 처음부터 끝까지 안내합니다.
아파치 돼지 란 무엇입니까?
피그는 고급입니다 프로그래밍 언어 대규모 데이터 세트를 분석하는 데 유용합니다. Pig는 Yahoo!의 개발 노력의 결과물입니다.
MapReduce 프레임워크에서는 프로그램을 일련의 Map 및 Reduce 단계로 변환해야 합니다. 그러나 이는 데이터 분석가에게 익숙한 프로그래밍 모델이 아닙니다. 따라서 이러한 격차를 해소하기 위해 절대적인 개념이 필요합니다.trac피그(Pig)라는 이름의 건물은 그 위에 지어졌습니다. 하둡.
Apache Pig를 사용하면 MapReduce 프로그램을 작성하는 데 드는 시간을 줄이고 대규모 데이터 세트 분석에 더 집중할 수 있습니다. 무엇이든 먹는 돼지처럼 Apache Pig 프로그래밍 언어는 모든 종류의 데이터를 처리할 수 있도록 설계되었습니다. 그래서 이름이 'Pig'인 것입니다! 아래 프로젝트 마스코트도 같은 의미를 전달합니다.
이 프로젝트는 아직 진행 중입니다. Apache Pig 0.18.0 2025년 9월 15일에 출시되었으며 Hadoop 3, Tez 0.10, Hive 3에 대한 지원이 추가되었습니다. Spark 3, HBase 2 및 Python 3년은 다음과 같습니다. Apache Pig 릴리스 페이지아래의 안내는 훨씬 이전 버전인 0.12.1 버전을 기준으로 작성되었으므로, 최신 버전에서는 동작 방식이 다를 수 있는 몇 가지 단계에 대한 설명이 포함되어 있습니다.
돼지 Archi강의
Pig의 아키텍처는 두 가지 구성 요소로 이루어져 있습니다.
- 돼지 라틴, 그것은 언어이다
- 런타임 환경, 피그 라틴 프로그램을 실행하기 위해서입니다.
피그 라틴 프로그램은 입력 데이터에 적용되어 출력을 생성하는 일련의 연산 또는 변환으로 구성됩니다. 이러한 연산은 데이터 흐름을 설명하며, 이는 하둡 피그 실행 환경에 의해 실행 가능한 표현으로 변환됩니다. 이러한 변환의 결과는 기본적으로 일련의 연산으로 나타납니다. MapReduce 프로그래머가 알지 못하는 작업들입니다. 따라서 하둡의 Pig를 사용하면 프로그래머는 실행 방식보다는 데이터 자체에 집중할 수 있습니다.
피그 라틴은 데이터 처리에서 흔히 사용되는 키워드(예: 조인, 그룹화, 필터)를 활용하는 비교적 엄격한 언어입니다. 아래 다이어그램을 참조하세요. tracGrunt 셸에서 작성된 스크립트가 파서, 최적화 프로그램, 컴파일러를 거쳐 실행 엔진에 도달하는 과정을 보여줍니다.
실행 모드
Hadoop의 Pig에는 두 가지 실행 모드가 있으며, 아래의 설치 안내에서는 두 모드 모두를 사용합니다.
- 로컬 모드: 이 모드에서 Hadoop Pig 언어는 단일 서버에서 실행됩니다. JVM 이 모드는 로컬 파일 시스템을 활용합니다. 이 모드는 Hadoop 환경에서 Pig를 사용하여 소규모 데이터 세트를 분석하는 데에만 적합합니다.
- MapReduce 모드: 이 모드에서는 Pig Latin으로 작성된 쿼리가 MapReduce 작업으로 변환되어 Hadoop 클러스터(클러스터는 유사 분산형 또는 완전 분산형일 수 있음)에서 실행됩니다. 완전 분산형 클러스터를 사용하는 MapReduce 모드는 대규모 데이터 세트에서 Pig를 실행하는 데 유용합니다.
저 두 가지는 고전적인 조합입니다. 최신 릴리스에서는 실제로 6가지 실행 유형(exectype)을 제공하며, 각 유형은 동일한 방식으로 선택됩니다. -x 깃발은 문서에 명시된 바와 같습니다. Pig 0.18.0 시작 가이드.
| 실행 유형 | Command | 일이 진행되는 곳 |
|---|---|---|
| 지방의 | 돼지 -x 로컬 | 로컬 파일 시스템에 대한 단일 JVM |
| 테즈 지역 | pig -x tez_local | Tez 런타임을 사용하는 단일 JVM (실험적) |
| Spark 지방의 | pig -x spark_local | 단일 JVM을 사용하여 Spark 런타임(실험적) |
| MapReduce | pig 또는 pig -x mapreduce | HDFS가 포함된 Hadoop 클러스터입니다. 이것이 기본 설정입니다. |
| TEZ | 피그-x 테즈 | Tez 엔진이 실행되는 Hadoop 클러스터 |
| Spark | 돼지 -x 스파크 | A SparkYARN 또는 Mesos 클러스터(HDFS 포함) |
피그 라틴 데이터 유형 및 Opera토르
스크립트를 작성하기 전에 Pig가 어떤 데이터를 저장할 수 있고 어떤 작업을 수행할 수 있는지 아는 것이 도움이 됩니다. 데이터 모델은 완전히 중첩되어 있어 Pig가 관계형 테이블에서는 읽을 수 없는 로그 파일이나 기타 구조가 느슨한 입력 데이터를 읽을 수 있습니다.
피그 라틴은 두 가지 유형의 타입을 제공합니다.
- 스칼라 유형:
int,long,float,double,chararray,bytearray,boolean,datetime,bigintegerbigdecimal예제 스크립트 뒷부분에서는 모든 열을 다음과 같이 선언합니다.chararray. - 복합 유형: a 튜플 필드들의 순서가 있는 집합이며 행처럼 동작합니다. 가방 튜플의 순서가 지정되지 않은 컬렉션이며 테이블처럼 동작합니다. 지도 키는 반드시 특정 값이어야 하는 키-값 쌍의 집합입니다.
chararray.
운영자들은 소수의 직종으로 나뉘며, 그중 몇몇이 거의 모든 파이프라인을 담당합니다.
| Opera바위 산 | 그것이하는 일 |
|---|---|
| 로드/저장 | 파일 시스템에서 관계를 읽고 결과를 다시 저장합니다. |
| FILTER | 조건을 만족하는 튜플만 유지합니다. |
| 각각 … 생성 | 열별로 작업하여 새 필드를 생성합니다. |
| 그룹/공동그룹 | 키를 사용하여 하나 이상의 관계를 그룹화합니다. |
| JOIN | 내부 조인 또는 외부 조인을 사용하여 관계를 결합합니다. |
| 연합/분열 | 관계를 하나로 합치거나, 하나를 여러 개로 분할합니다. |
| 정렬 기준 / 고유값 / 제한 | 튜플을 정렬하고, 중복을 제거하고, 튜플 개수를 제한합니다. |
| 나열/설명/해석/삽화 | 결과, 스키마, 실행 계획 및 샘플 실행을 검사합니다. |
네 명의 검사 담당자는 Grunt 단축키도 사용할 수 있어 시간을 절약할 수 있습니다.ping 디버깅 중: \d DUMP의 경우, \de 설명하려면, \e 설명과 \i 일러스트레이트용.
사전 조건
Pig는 클라이언트 측 도구입니다. 스크립트를 분석하고, 작업을 계획하고, 작업을 제출하지만, 자체적인 스토리지나 클러스터를 제공하지 않으므로 먼저 Hadoop이 설치되어 있어야 합니다. Apache 요구 사항 목록은 간단합니다.
| 구성 요소 | 요구 사항 | 필요한 이유 |
|---|---|---|
| 하둡 | Hadoop 2.x 또는 3.x 버전, 그리고 HADOOP_HOME이 내보내진 환경 | HDFS와 실행 엔진을 제공합니다. HADOOP_HOME이 없으면 Pig 0.18.0은 내장 Hadoop 2.7.3을 사용합니다. |
| Java | Java 1.7 버전 이상, JAVA_HOME이 설치 루트로 설정되어 있어야 합니다. | Pig와 Hadoop 데몬은 다음과 같습니다. Java 프로그램 |
| Python (선택 사항) | Python 2.7 | 스트리밍에만 필요합니다. Python 사용자 정의 함수 |
| 개미 (선택 사항) | 앤트 1.8 | Pig를 소스 코드에서 빌드하거나 재컴파일할 때만 필요합니다. |
위 목록과 함께 두 가지 실용적인 사항을 고려해야 합니다. 첫째, 모든 작업을 이미 홈 디렉터리가 있는 Linux 사용자 권한으로 실행하십시오. HDFS 그리고 해당 폴더에 쓰기 권한을 부여합니다. 이 튜토리얼에서는 다음을 사용합니다. hduser첫째, Hadoop 설정 중에 생성된 계정을 사용하십시오. 둘째, MapReduce 모드에서 Pig를 실행하기 전에 클러스터를 시작하십시오. NameNode와 ResourceManager가 다운되면 Pig가 즉시 실패하기 때문입니다. Hadoop이 아직 설치되지 않은 경우, 다음 단계를 따르십시오. 하둡 설치 방법 먼저.
Pig를 다운로드하고 설치하는 방법
이제 이 Apache Pig 튜토리얼에서는 Pig를 다운로드하고 설치하는 방법을 알아봅니다.
본격적인 과정을 시작하기 전에 Hadoop이 설치되어 있는지 확인하십시오. 사용자 이름을 'hduser'로 변경하십시오(Hadoop 구성 시 사용한 ID입니다. 필요에 따라 본인의 Hadoop 구성 시 사용했던 사용자 ID로 변경할 수 있습니다).
단계 1) Pig Hadoop의 최신 안정 버전을 다음 미러 사이트 중 하나에서 다운로드하십시오.
https://pig.apache.org/releases.html
아래 그림과 같이 src.tar.gz 파일이 아닌 tar.gz 파일을 선택하여 다운로드하세요.
단계 2) 다운로드가 완료되면 다운로드한 tar 파일이 있는 디렉토리로 이동하여 해당 tar 파일을 Pig Hadoop을 설치하려는 위치로 이동합니다. 이 예에서는 /usr/local로 이동합니다.
Pig Hadoop 파일이 포함될 디렉토리로 이동하세요.
cd /usr/local
Extractar 파일의 내용은 다음과 같습니다.
sudo tar -xvf pig-0.12.1.tar.gz
단계 3) ~/.bashrc 파일을 수정하여 Pig 관련 환경 변수를 추가하세요.
원하는 텍스트 편집기로 ~/.bashrc 파일을 열고 아래와 같이 수정하세요.
export PIG_HOME=<Installation directory of Pig> export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH
단계 4) 이제 아래 명령어를 사용하여 이 환경 구성을 불러오세요.
. ~/.bashrc
단계 5) 하둡 2.2.0을 지원하도록 Pig를 다시 컴파일해야 합니다.
다음은 그 방법을 설명하는 단계입니다.
Pig 홈페이지로 이동하세요.
cd $PIG_HOME
Ant를 설치하세요.
sudo apt-get install ant
참고: 다운로드가 시작되면 인터넷 속도에 따라 소요 시간이 달라집니다.
Pig를 다시 컴파일합니다.
sudo ant clean jar-all -Dhadoopversion=23
이 재컴파일 과정에서 여러 구성 요소가 다운로드되므로 시스템이 인터넷에 연결되어 있어야 합니다.
또한, 이 과정이 중간에 멈추고 20분 이상 명령 프롬프트에 아무런 변화가 없는 경우 Ctrl + c를 누르고 동일한 명령을 다시 실행하십시오.
저희의 경우 20분이 걸립니다.
이 재컴파일 단계는 배포된 JAR 파일이 Hadoop 1을 기반으로 빌드되었던 0.12.1 시대에 속합니다. -Dhadoopversion=23 플래그를 변경하여 Ant 빌드를 Hadoop 0.23 및 2.x 버전으로 전환했습니다. Apache Pig 0.18.0에는 Hadoop 3뿐만 아니라 Hadoop 2.7 이상에서도 실행되는 바이너리가 포함되어 있으므로, 최신 릴리스에서는 일반적으로 tarball 압축을 풀고 아래 테스트로 바로 넘어갈 수 있습니다.
단계 6) 다음 명령어를 사용하여 Pig 설치를 테스트하세요.
pig -help
예제 돼지 스크립트
Pig가 설치되면 이 Apache Pig 튜토리얼의 나머지 부분에서는 전체 스크립트가 실행됩니다. 우리는 Pig 스크립트를 사용하여 각 국가별 판매 제품 수를 계산할 것입니다.
입력: 입력 데이터 세트는 CSV 파일입니다. SalesJan2009.csv.
단계 1) 하둡을 시작하세요.
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
단계 2) 빅데이터용 Pig 라이브러리는 MapReduce 모드를 사용하여 HDFS에서 파일을 가져와 결과를 다시 HDFS에 저장합니다.
로컬 파일 시스템의 ~/input/SalesJan2009.csv에 저장된 SalesJan2009.csv 파일을 HDFS(Hadoop 분산 파일 시스템) 홈 디렉터리로 복사하십시오.
이 Apache Pig 예제에서는 파일이 input 폴더에 있습니다. 파일이 다른 위치에 저장되어 있다면 해당 위치의 파일 이름을 지정하세요.
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/input/SalesJan2009.csv /
파일이 실제로 복사되었는지 확인하십시오.
$HADOOP_HOME/bin/hdfs dfs -ls /
단계 3) 피그 구성.
먼저 $PIG_HOME/conf 디렉토리로 이동하여 원본 속성 파일의 사본을 보관하십시오.
cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original
원하는 텍스트 편집기를 사용하여 pig.properties 파일을 열고 pig.logfile을 사용하여 로그 파일 경로를 지정하십시오.
sudo gedit pig.properties
로거는 이 파일을 사용하여 오류를 기록합니다.
단계 4) 'pig' 명령어를 실행하면 Pig 명령 프롬프트가 시작됩니다. Pig 명령 프롬프트는 Pig 쿼리를 실행할 수 있는 대화형 셸입니다.
pig
단계 5) Pig용 Grunt 명령 프롬프트에서 아래의 Pig 명령어를 순서대로 실행하십시오.
— A. 데이터가 포함된 파일을 로드합니다.
salesTable = LOAD '/SalesJan2009.csv' USING PigStorage(',') AS (Transaction_date:chararray,Product:chararray,Price:chararray,Payment_Type:chararray,Name:chararray,City:chararray,State:chararray,Country:chararray,Account_Created:chararray,Last_Login:chararray,Latitude:chararray,Longitude:chararray);
이 명령 다음에 Enter를 누르십시오.
— B. 국가 필드를 기준으로 데이터를 그룹화합니다.
GroupByCountry = GROUP salesTable BY Country;
— C. 'GroupByCountry'의 각 튜플에 대해 '국가명: 판매된 제품 수' 형식의 결과 문자열을 생성합니다.
CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));
이 명령 다음에 Enter를 누르십시오.
— D. 데이터 흐름 결과를 HDFS의 'pig_output_sales' 디렉터리에 저장합니다.
STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');
이 명령을 실행하는 데 시간이 다소 걸립니다. 완료되면 다음 화면이 나타납니다.
단계 6) 결과는 명령 인터페이스를 통해 확인할 수 있습니다.
$HADOOP_HOME/bin/hdfs dfs -cat pig_output_sales/part-r-00000
결과는 웹 인터페이스를 통해서도 확인할 수 있습니다.
웹 브라우저에서 http://localhost:50070/을 엽니다.
포트 50070은 Hadoop 2의 NameNode 웹 UI입니다. Hadoop 3에서는 동일한 페이지가 포트 9870으로 이동했으므로 클러스터가 Hadoop 3을 실행하는 경우 해당 주소를 사용하십시오.
이제 '파일 시스템 찾아보기'를 선택하고 /user/hduser/pig_output_sales 경로로 이동하세요.
스크립트가 생성한 국가 및 제품 수량 쌍을 보려면 part-r-00000 파일을 여십시오.
Apache Pig vs Hive vs MapReduce
Pig는 단독으로 평가되는 경우가 드뭅니다. 보통은 해당 작업이 Pig에 적합한지, 아니면 다른 도구에 적합한지에 대해 질문합니다. 하이브 또는 직접 작성한 MapReduce 프로그램에서도 마찬가지입니다. 세 가지 모두 동일한 클러스터에서 작업으로 실행되기 때문입니다.
| 아래 | 맵리듀스(Java) | 아파치 돼지 | 아파치 하이브 |
|---|---|---|---|
| 인터페이스 | Java API | 피그 라틴(Pig Latin)은 데이터 흐름 스크립팅 언어입니다. | 하이브QLSQL 방언 |
| 복근의 수준trac기 | 높음 | 중급 | 높음 |
| 일반적인 사용자 | Java 개발자 | 데이터 엔지니어 또는 연구원 | SQL에 능숙한 분석가 |
| 적합한 데이터 | 무엇이든 수동으로 처리합니다. | 구조화된 데이터와 반구조화된 데이터 형식을 지원하며, 스키마는 로드 시 선택 사항입니다. | 메타스토어에 등록된 구조화된 테이블 |
| Code 음량 | 대부분의 라인 | 줄 수가 더 적습니다 | 쿼리에 필요한 최소 줄 수 |
| 실행됨 | MapReduce 작업 | MapReduce, Tez 또는 Spark 작업 | MapReduce, Tez 또는 Spark 작업 |
| 최고 | 완벽한 제어 및 사용자 정의 로직 | 다단계 ETL 파이프라인 | 임시 쿼리 및 보고 |
실제로 구분은 간단합니다. 데이터가 이미 테이블 형태이고 쿼리가 SQL처럼 보일 때는 Hive를 사용합니다. 입력 데이터가 복잡하거나, 파이프라인이 단일 쿼리가 아닌 일련의 변환으로 구성되거나, 동일한 스크립트가 여러 분기를 거쳐 다시 결합해야 하는 경우에는 Pig를 사용합니다. MapReduce는 절대적인 기준이 충족되지 않을 때만 사용합니다.trac줄 수가 빠르게 늘어나기 때문에 논리를 표현하는 데 어려움이 있습니다.
돼지는 또한 생태계의 다른 구성원들과 조화롭게 어우러져 살아갑니다. 스쿱과 플룸 원시 데이터를 가져와서 Pig 또는 Hive로 형태를 만들고, 스케줄러를 사용하면 됩니다. 아파치 오지 이러한 단계를 반복 가능한 파이프라인으로 연결합니다. 이러한 도구가 어디에 활용되는지에 대한 더 넓은 관점은 가이드를 참조하십시오. 빅 데이터 그리고 요약 빅 데이터 도구수기로 작성하는 스크립트를 대체할 수 있는 상용 ETL 솔루션은 다음을 참조하십시오. 탈 렌드.























