욱이의 냉철한 공부

[Hadoop, Pig] 빅데이터 Pig 이해하기 본문

데이터엔지니어링/빅데이터 : Hadoop

[Hadoop, Pig] 빅데이터 Pig 이해하기

냉철한 욱 2021. 6. 22. 03:04

 

빅데이터의 유형

1) 구조화 데이터

- 행과 열로 구조화 되어 있다.

- 고객데이터, 업무데이터, 거래데이터 등

- 관계 데이터베이스에 저장

- 앞으로 언급할 관계 데이터베이스 : 오라클-db, my-sql, mariai-db

 

2) 반구조화 데이터

- XML, JSON : 키와 값 구조로 되어있다.

- NoSQL 데이터베이스에 저장

- 앞으로 언급할 NoSQL 데이터베이스 : Mongo-db, Cassndra, Hbase

 

3) 비구조화 데이터 ,빅데이터

- 텍스트, 동영상, 음성

- 하둡(분산처리시스템)에 저장 및 처리

- 앞으로 언급할 하둡에코(합체)시스템 : Hive1, Hive2, Pig, Spark

 

하둡 이해하기

https://warm-uk.tistory.com/56?category=810504

 


 

=> 하둡에 합체되어 사용하는 Apache Pig에 대해 알아보자!

 

 

=> Pig(돼지)가 Hadoop(코끼리) 위에 올라탔다.

 

1. 왜 Hive말고 Pig 사용하는가? : 성능 때문이다.

- Hive의 약한 부분은 JOIN이다.

한 개의 거대한 테이블은 상관없는데 여러 개의 테이블을 조인하여 MapReduce하게 된다면 셔플링 작업에 성능적인 제한사항이 있다. 실행계획과 함께 작업을 실행하면 해결 할 수 있지만 Hive에서는 약하다. 실행계획이란 여러 개의 작업 대안 중 하나를 선택하여 최적화 하는 것이다.

즉 여러 개의 테이블을 짬뽕해서 사용 할 때는 Pig가 성능적인 면에서 더 좋다.

 

* Pig의 장점 : 옵티마이저 실행한다.

- 예를 들어 작업을 실행하는데 방법이 a안, b안, c안, d안이 있다고 하자.

C안이 반복적인 작업을 덜 하기 때문에 C안을 쓰는 것이 가장 효율적이라고 알려줘야 한다.

더불어 C안이 CPU를 가장 적게 사용하기 때문에 이것이 좋은 방법이라고 알려줘야 한다.

이것이 옵티마이저를 실행하는 것.

- 하지만 단점도 있다. 잘못 실행하면 반복을 많이 하고 CPU를 많이 사용하게 된다.

 

* Pig 사용하는 기업 : Yahoo, Zum 등

 

 

 

 

 

 

2. 하둡의 합체시스템 Pig : 절차적 데이터 처리 언어 프레임워크

- 하둡의 한계를 극복하는 합체 시스템 (코끼리와 합체하자!)

대규모의 데이터를 쉽게 분석할 수 있도록 스크립트 수준의 언어를 제공하는 분석 플랫폼

Hadoop 상에서 구동하면 스크립트가 내부적으로 MapReduce로 수행된다.

 

- Pig는 고수준 언어로 데이터 분석을 프로그래밍할 수 있는 방대한 양의 데이터 분석 플랫폼이며, 이를 평가할 수 있는 인프라도 함께 제공하며 큰 특징은 대규모 병렬 처리에 대응할 수 있는 구조라 대규모 데이터 처리가 용이하다는 것이다.

 

 

 

 

 

 

3. Pig 언어 : Pig Latin(피그 라틴)

- 스크립트 : 데이터 흐름을 명시적으로 보여 줄 수 있는 코드 작성

작업들 다 모아서 세트를 만든다. 한 세트로 만들어 주는 것이 스크립트이다.

 

- 이해하기 쉽고 유지보수가 쉽다.

 

- 시스템이 코드 실행을 자동으로 최적화하므로(옵티마이저) 사용자는 효율성을 생각하지 않고 프로그래밍 내용에만 집중

 

- Pig Latin으로 작성한 데이터 처리 프로그램은 논리적인 실행 계획으로 변환되고, 이것은 최종적으로 MapReduce 실행 계획으로 변환

 

- int, long, double 등 기본형 외에 Relation, Bag, Tuple과 같은 고수준 자료구조를 제공하고, Filter, Foreach, Group, Join, Load, Store 등 관계연산을 지원한다. 사용자 지정 함수도 정의 가능하다.

 

- R이나 스칼라하고 비슷하다. SQL하고는 전혀 다른 언어이다. 간단해서 쉬울 수도 있지만 처음 보는 언어이기 때문에 어려울 수 있다.

 

- HDPS 파일만 가져올 수 있다.

 

* 실행하는 모습

- A, B, C, D ... 이렇게 개별적으로 나누는 이유는 나중에 똑같은 작업을 다시 할 수 있기 때문이다.

 

- 작업이 축적되는 것이다. A가 있어야 C를 할 수 있고, C가 있어야 D를 할 수 있다.

 

- MapReduce를 몇 번하는지 확인 할 수 있다. 6개의 MapReduce를 동시에 수행한다.

 

- 여러 개의 작업을 동시에 수행 할 때 Pig가 훨씬 좋은 성능을 보여준다.

 

- Hive보다 더 계획적으로 MapReduce를 수행하며 여러 개의 작업을 Control 할 수 있다.

 

- MapReduce 작업을 개별적으로 설정할 수 있다.

 

 

 

 

4. Hive 말고 무조건 Pig를 사용하는 것이 좋은 것은 아니다. 상황에 따라 다르다.

- Hive 편리성을 위하여 MapReduce 작업을 완전 대체하는 것이고, 개별적으로 분석하는 것이 아니라 믿고 기다리는 것이다. 완전 다 Control 하기 위해서는 Java를 배워야..

 

- 반면에 개별적으로 Control 하며 깊고 자세하게 성능적으로도 최적화 하면서 사용하기 위해서는 Pig