등장배경
모든 문제들을 Mapper와 Reducer의 개념에 맞춰서 재해석하는 것은 쉬운 일이 아니다. 따라서, MapReduce를 사용해 프로그램을 개발하고, 원하는 작업을 수행하기까지 오랜 시간이 걸린다는 문제를 해결하기 위해 등장했다.
Pig
Pig Latin이라는 스크립팅 언어로, Hadoop과 MapReduce 위에 구축되어, mapper와 reducer를 작성하지 않고도 MapReduce 작업을 수행할 수 있다.
Pig는 절차형 언어로, 아주 간단한 스크립트 양식을 사용해서 단계별로 데이터 간 관계를 설정하여 SQL과 비슷한 작업을 한다. 데이터를 고르고, 필터링하고, 한 줄씩 변형하는 작업을 할 수 있다. 즉, MapReduce 작업을 간소화해서 처리하는 방법이다. → 개발 과정이 빨라지게 됨 (내부적으로는 결국 MapReduce로 번역이 되는 것 맞음)
MapReduce 대신에 tez를 활용할 수도 있음. → MapReduce에 비해 훨씬 빠르기 떄문에
Pig Latin은 확장성도 괜찮은 편이라서 UDF (user-defined function) 의 활용도 가능하다.
- Pig Latin으로 작성한 스크립트는 MapReduce로 번역되고, Mapper와 Reducer는 YARN 위에서 돌아가며, HDFS의 데이터에 접근한다.
- Pig가 Tez 위에서도 동작한다는 점은 정말 멋진 점이다. 기본적으로 이런 Job 들을 훨씬 효율적으로 체계화하는 방식을 갖고 있고, 일르 DAG라고 부른다.. (ㄷㄷ)
- MapReduce를 바라보자면, 고정된 일련의 이벤트가 있다고 볼 수 있다. Mapper와 Reducer가 있고, 그렇게 처리한 데이터를 또다른 Mapper&Reducer가 받아서 데이터를 출력하면, 또 다음의 Mapper&Reducer가 이를 받는 순차적인 관계가 있음
- Tez는 이 Job 들의 상호의존성을 파악하고, 의도하는 바를 이루기 위해 효율적인 Path를 계산한다.
- 강사님 경험상 MapReduce에 비해 10배 정도는 빨랐다고 함
- Pig를 Hadoop 클러스터 위가 아니어도독립적으로도 사용할 수 있음.
Pig를 실행하기
- 마스터 노드에서 ‘pig’라고 입력하면 Grunt 프롬프트가 나옴. 여기서 Pig 스크립트를 한 줄씩 작성할 수 있음
- Script를 파일에 작성할 수도 있음. → crontab 등에 등록해서 실행할 수도 있음
- Ambari에서도 가능 → 우리는 Ambari에서 할 것임