돼지와 하이브의 차이? 왜 둘 다 있습니까? [닫은]


256

저의 배경-하둡 세계에서 4 주가되었습니다. Cloudera의 Hadoop VM을 사용하여 Hive, Pig 및 Hadoop에서 약간 눈을 led습니다. Map-Reduce 및 GFS에 대한 Google의 논문을 읽었습니다 ( PDF 링크 ).

나는 이해-

  • Pig의 언어 Pig Latin은 선언적 프로그래밍 스타일과 같은 SQL에서 (프로그래머가 생각하는 방식에 적합) Hive의 쿼리 언어가 SQL과 매우 유사합니다.

  • 돼지는 하둡 위에 있고 원칙적으로 드라이어드 위에 앉아도됩니다. 나는 틀렸을 수도 있지만 Hive는 Hadoop과 밀접한 관련이 있습니다.

  • Pig Latin 및 Hive 명령은 모두 작업을 매핑하고 줄이기 위해 컴파일됩니다.

내 질문-돼지 (예 : 돼지)가 목적을 달성 할 수있을 때 둘 다 갖는 목표는 무엇입니까? Yahoo!가 Pig를 전파했기 때문입니까? 페이스 북으로 하이브?


24
Hive는 구조화 된 데이터를위한 것입니다. 돼지는 구조화되지 않은 데이터를위한 것입니다.
Dead Programmer

답변:


151

Yahoo!의 Pig 아키텍트 인 Alan Gates 의이 에서 Pig 대신 Hive와 같은 SQL을 언제 사용할 것인지 비교해보십시오. 그는 Pig (vs. 선언적 SQL)와 같은 절차 적 언어의 유용성과 데이터 흐름 설계자에게의 유용성에 대해 매우 설득력있는 사례를 제시합니다.


Alan은 또한 아래 공유 j03m과 같이 Hive를 구체적으로 설명하는 기사를 수행합니다. 그에게서 좋은 물건!
Dolan Antenucci

14
Hive는 구조화 된 데이터를위한 것입니다. 돼지는 구조화되지 않은 데이터를위한 것입니다.
Dead Programmer

7
혼란 스러워요. "[...] 돼지와 같은 절차 언어의 유용성"이라고 말했습니까 ? 이 기사에서는 "Pig Latin은 절차 적"이라고 반복해서 주장하기 때문입니다.
매트 펜윅

4
일시적인지 확실하지 않지만 기사가 사라진 것 같습니다. 링크를 업데이트 할 수 있습니까 (빠른 검색으로 찾을 수 없음)?
Peter Klipfel

1
앨런 게이츠 포스트는 여기 .. .. 그것을 통해 이동하시기 바랍니다 developer.yahoo.com/blogs/hadoop/...
Mr.Chowdary

57

Hive는 SQL에 익숙한 커뮤니티에 호소하도록 설계되었습니다. 그 철학은 또 다른 스크립팅 언어가 필요하지 않다는 것입니다. Hive는 사용자가 선택한 언어 (SQL 절에 포함 가능)로 변환 스크립트를 지원하고 축소합니다. Facebook에서 SQL에 익숙한 분석가와 Python에서 데이터 마이너 프로그래밍에 의해 널리 사용됩니다. Pig의 SQL 호환성 노력은 AFAIK에서 포기되었으므로 두 프로젝트의 차이점은 매우 분명합니다.

SQL 구문을 지원한다는 것은 Microstrategy와 같은 기존 BI 도구와 통합 할 수 있음을 의미합니다. Hive에는 가까운 시일 내에이 작업을 수행 할 수있는 ODBC / JDBC 드라이버 (현재 진행중인 작업)가 있습니다. 또한 이러한 환경에서 일반적인 드릴 다운 쿼리를 지원할 수있는 인덱스 지원을 추가하기 시작했습니다.

마지막으로, 이것은 질문과 직접 ​​관련이 없습니다. Hive는 분석 쿼리를 수행하기위한 프레임 워크입니다. 플랫 파일을 쿼리하는 데 주로 사용되지만 다른 저장소를 쿼리 할 수없는 이유는 없습니다. 현재 Hive는 Hbase (대부분의 RDBMS와 같은 핵심 가치 저장소)에 저장된 데이터를 쿼리하는 데 사용할 수 있으며 HadoopDB 프로젝트는 Hive를 사용하여 페더레이션 RDBMS 계층을 쿼리합니다.


37

나는 이것이 가장 도움이된다는 것을 알았습니다 (그러나 1 년이 지났습니다)

특히 Pig vs Hive와 야후에서 언제 어디서 고용되었는지에 대해 이야기합니다. 나는 이것이 매우 통찰력있는 것을 발견했다. 몇 가지 흥미로운 메모 :

데이터 세트의 증분 변경 / 업데이트 :

대신 새로운 증분 데이터에 대해 조인하고 결과를 이전 전체 조인의 결과와 함께 사용하는 것이 올바른 방법입니다. 몇 분 밖에 걸리지 않습니다. Pig Latin에서 표준 데이터베이스 작업을이 증분 방식으로 구현할 수 있으므로 Pig는이 사용 사례에 적합한 도구입니다.

스트리밍을 통해 다른 도구를 사용하는 경우 :

스트리밍과의 돼지 통합은 또한 연구원들이 작은 데이터 세트에서 이미 디버깅 한 Perl 또는 Python 스크립트를 쉽게 가져 와서 거대한 데이터 세트에 대해 실행할 수 있도록합니다.

데이터웨어 하우징에 Hive를 사용하는 경우 :

두 경우 모두 관계형 모델과 SQL이 가장 적합합니다. 실제로, 데이터웨어 하우징은 많은 역사를 통해 SQL의 핵심 사용 사례 중 하나였습니다. 분석가가 사용하려는 쿼리 및 도구 유형을 지원하는 올바른 구성이 있습니다. 그리고 이미 현장에서 도구와 사용자 모두에 의해 사용되고 있습니다.

Hadoop 하위 프로젝트 Hive는 Hadoop에 대한 SQL 인터페이스 및 관계형 모델을 제공합니다. Hive 팀은 ODBC와 같은 인터페이스를 통해 BI 도구와 통합하기위한 작업을 시작했습니다.


1
+1은 필자가 필자 (Pig)의 최초 제작자 또는 최소한 매우 큰 지지자 인 것을 이해 한 야후와 비교 한 결과이다. 편집 : - 너무 큰 주 : 위의 야콥에서, 나는 저자 (알란 게이츠) 야후에서 돼지 건축가는 것을 알
고언 Antenucci

3
연결이 끊어졌습니다. 현재 정확한 URL은 https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html 입니다.
agarie

1
위의 업데이트 된 링크
j03m


위에서 공유 한 2 개의 링크를 더 이상 찾을 수 없습니다.
Keshav Pradeep Ramanath

28

"불완전한"기사 의 너트 쉘 에서 Pig Vs Hive 비교를 살펴보십시오.

Hive 는 파티션, 서버, 웹 인터페이스 및 JDBC / ODBC 지원에서 PIG 보다 낫습니다 .

몇 가지 차이점 :

  1. Hive구조화 된 데이터에 적합 하고 PIG반 구조화 된 데이터에 적합합니다

  2. 하이브 에 사용되는 보고돼지 에 대한 프로그래밍

  3. Hive절차 적 언어선언적 SQL & PIG 로 사용 됩니다.

  4. 하이브 지원 파티션PIG는 하지 않습니다

  5. 하이브는 옵션으로 시작할 수 있습니다 중고품 기반 서버PIG는 할 수 없습니다

  6. Hive 는 사전에 테이블을 정의하고 ( schema ) + 스키마 정보를 데이터베이스에 저장하며 PIG 에는 데이터베이스 의 전용 메타 데이터가 없습니다.

  7. HiveAvro를 지원하지 않지만 PIG 는 지원 합니다. 편집 : Hive는 Avro를 지원하고 org.apache.hadoop.hive.serde2.avro로 serde를 지정하십시오.

  8. Pig 는 외부 조인을 수행하기위한 추가 COGROUP 기능 도 지원 하지만 하이브는 지원하지 않습니다. 그러나 Hive와 PIG 는 동적으로 결합, 순서 및 정렬 할 수 있습니다 .


17

귀하의 질문에 대한 진정한 대답은 독립적 인 프로젝트이며 중앙에서 조정 된 목표가 없다는 것입니다. 그들은 초기에 다른 공간에 있었고 두 프로젝트가 확장됨에 따라 시간이 지남에 따라 겹쳤습니다.

Hadoop O'Reilly 책에서 해석 한 내용 :

Pig : 매우 큰 데이터 세트를 탐색하기위한 데이터 흐름 언어 및 환경

하이브 : 분산 데이터웨어 하우스


22
하이브는 RDBMS와 다릅니다. Pig처럼 플랫 파일을 처리합니다. 둘 다 기본적으로 같은 일을합니다. 작업을 컴파일 할 때 사용하는 옵티 마이저를 보면 가장 큰 차이가 있습니다.
스티브 세브란스

12

돼지 / 하이브 쿼리로 유사한 결과를 얻을 수 있습니다. 주요 차이점은 쿼리 이해 / 작성 / 만들기에 대한 접근 방식에 있습니다.

Pig는 데이터 흐름을 생성하는 경향이 있습니다. 각 단계에서 처리를 수행하는 작은 단계
Hive는 데이터에 대해 SQL과 유사한 언어를 사용하여 데이터를 처리 할 수 ​​있으므로 RDBMS에서 훨씬 쉽게 변환 할 수 있습니다. SQL로)

또한 Hive의 경우이 데이터 (Beeswax for HUE 또는 Hive 웹 인터페이스)와 함께 작동하기에 좋은 인터페이스를 제공 할 수 있으며 데이터 (스키마 등)에 대한 정보를 제공하는 메타 저장소를 제공합니다. 데이터에 대한 중앙 정보.

나는 다른 쿼리에 대해 Hive와 Pig를 모두 사용합니다 (질문을 더 빠르고 쉽게 작성할 수있는 쿼리를 사용합니다.이 방법은 대부분 임시 쿼리를 사용합니다). 입력과 동일한 데이터를 사용할 수 있습니다. 그러나 현재 밀랍을 통해 많은 일을하고 있습니다.


12

Pig를 사용하면 파이프 라인의 어느 시점에서나 데이터와 사용자 코드를로드 할 수 있습니다. 데이터가 스트리밍 데이터 (예 : 위성 또는 기기의 데이터) 인 경우 특히 중요 할 수 있습니다.

RDBMS 기반 인 Hive는 데이터를 먼저 가져 오거나로드 한 후 작업 할 수 있어야합니다. 따라서 스트리밍 데이터에서 Hive 를 사용하는 경우 다른 버킷을 사용하여 새로 도착하는 데이터를 계속 저장하는 동안 버킷 (또는 파일)을 채우고 채워진 각 버킷에서 하이브를 사용해야 합니다.

돼지는 또한 게으른 평가를 사용합니다. 프로그래밍이 쉬워지고 Hive와 같은 언어와 같은 SQL에서보다 더 많은 자유로 다른 방식으로 데이터를 분석하는 데 사용할 수 있습니다. 따라서 구조화되지 않은 일부 데이터에서 행렬 또는 패턴을 실제로 분석하고 흥미로운 계산을 원한다면 Pig를 사용하여 공정한 거리를 이동할 수 있지만 Hive를 사용하면 결과를 재생할 다른 것이 필요합니다.

Pig는 데이터 가져 오기에서는 빠르지 만 Hive와 같은 RDBMS 친화적 언어보다 실제 실행에서는 느립니다.

Pig는 병렬화에 매우 적합하므로 데이터 집합이 큰 시스템, 예를 들어 대기 시간 (결과의 특정 기준을 얻는 데 걸리는 시간)보다 결과 처리량에 더 관심이있는 시스템의 경우 우위를 점할 수 있습니다.


10

하이브 대 돼지

Hive는 SQL에 정통한 사용자 나 Tableu / Microstrategy와 같은 기타 도구 / SQL 인터페이스가있는 기타 도구 또는 언어를 허용하는 SQL 인터페이스입니다.

PIG는 ETL 파이프 라인과 비슷합니다. 변수 선언, 반복, 반복, 조건문 등과 같은 단계별 명령이 있습니다.

복잡한 단계별 논리를 작성하려면 Hive QL보다 Pig 스크립트를 작성하는 것이 좋습니다. 데이터를 가져 오기 위해 단일 SQL을 작성하는 것이 편할 때 Hive를 사용하고 싶습니다. 하이브를 위해 쿼리하기 전에 테이블을 정의해야합니다 (RDBMS에서와 같이)

두 가지의 목적은 다르지만 두 가지 모두 동일하며 맵 축소 프로그램으로 변환합니다. 또한 Apache 오픈 소스 커뮤니티는 두 프로젝트 모두에 더 많은 기능을 추가합니다.



7
  1. Pig-latin은 데이터 흐름 스타일이며 소프트웨어 엔지니어에게 더 적합합니다. SQL은 SQL에 익숙한 분석 전문가에게 더 적합합니다. 복잡한 작업의 경우, 하이브의 경우 중간 데이터를 저장하기 위해 임시 테이블을 수동으로 작성해야하지만 돼지에는 필요하지 않습니다.

  2. Pig-latin은 복잡한 데이터 구조 (작은 그래프처럼)에 적합합니다. 돼지에는 DataBag라는 데이터 구조가 있는데, 이는 Tuple의 모음입니다. 때로는 여러 튜플과 관련된 메트릭을 계산해야합니다 (튜플 사이에 숨겨진 링크가 있습니다.이 경우 그래프라고 부릅니다). 이 경우 여러 튜플과 관련된 메트릭을 계산하기 위해 UDF를 작성하는 것이 매우 쉽습니다. 물론 벌집에서 할 수는 있지만 돼지처럼 편리하지는 않습니다.

  3. 필자의 의견으로는 돼지로 UDF를 작성하는 것이 훨씬 쉽다.

  4. Pig는 메타 데이터를 지원하지 않습니다 (또는 나중에 hcatalog를 통합 할 수도 있습니다). Hive에는 데이터베이스에 저장된 테이블의 메타 데이터가 있습니다.

  5. 로컬 환경에서 pig 스크립트를 디버깅 할 수 있지만 하이브하기는 어렵습니다. 그 이유는 3입니다. 로컬 환경에서 시간이 많이 걸리는 하이브 메타 데이터를 설정해야합니다.




4

링크에서 : http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

Hive는 전체 데이터베이스가 아닙니다. Hadoop 및 HDFS의 디자인 제약 및 제한은 Hive가 수행 할 수있는 작업에 제한을 둡니다.

Hive는 데이터웨어 하우스 애플리케이션에 가장 적합합니다.

1) 상대적으로 정적 데이터가 분석됩니다.

2) 빠른 응답 시간이 필요하지 않으며

3) 데이터가 급격히 변하지 않는 경우.

Hive는 OLTP, 온라인 트랜잭션 처리에 필요한 중요한 기능을 제공하지 않습니다. OLAP 도구 인 Online Analytic Processing에 더 가깝습니다. 따라서 Hive는 대규모 데이터 세트를 유지 관리하고 통찰, 보고서 등을 관리하는 데이터웨어 하우스 응용 프로그램에 가장 적합합니다.


4

간단히 말해서, Pig는 하둡과 함께 사용되는 MapReduce 프로그램을 작성하기위한 고급 플랫폼이며, 돼지 스크립트를 사용하여 많은 양의 데이터를 원하는 형식으로 처리합니다.

일단 처리 된 데이터가 획득되면,이 처리 된 데이터는 원하는 결과를 얻기 위해 추후 처리를 위해 HDFS에 유지된다.

저장된 처리 된 데이터 외에 HIVE SQL 명령을 적용하여 원하는 결과를 얻을 수 있습니다. 내부적으로이 hive sql 명령은 MAP Reduce 프로그램을 실행합니다.


이것은 실제로 지식 기반에 의미있는 추가가 아닙니다. 더 많은 정보 추가
agconti

4

간단히 말해서 두 가지 모두에 대한 높은 수준의 개요를 제공하려면 :

1) 돼지는 hadoop보다 관계형 대수

2) Hive는 SQL over hadoop (Pog보다 한 수준 위)입니다.


대수 비교는 흥미 롭습니다
Ravindra babu

3

PIG에서 불가능한 HIVE가 무엇을 할 수 있습니까?

PIG가 아닌 HIVE를 사용하여 파티셔닝을 수행 할 수 있으며 이는 출력을 우회하는 방법입니다.

HIVE에서 불가능한 PIG는 무엇을 할 수 있습니까?

위치 참조-필드 이름이 없어도 첫 번째 필드의 경우 $ 0, 초의 경우 $ 1 등의 위치를 ​​사용하여 참조 할 수 있습니다.

또 다른 근본적인 차이점은 PIG에는 값을 작성하기 위해 스키마가 필요하지 않지만 HIVE에는 스키마가 필요하다는 것입니다.

JDBC 및 기타를 사용하여 외부 응용 프로그램에서 HIVE로 연결할 수 있지만 PIG로는 연결할 수 없습니다.

참고 : 둘 다 HDFS (hadoop 분산 파일 시스템)에서 실행되며 명령문은 Map Reduce 프로그램으로 변환됩니다.


3

우리가 Hadoop의미에서 사용 하는 것은 우리가 거대한 데이터 처리를 시도한다는 것을 의미합니다. 데이터 처리 의 최종 목표는 그로부터 컨텐츠 / 보고서를 생성하는 것입니다.

내부적으로 두 가지 주요 활동으로 구성됩니다.

1) 로딩 데이터 처리

2) 컨텐츠를 생성하여보고 등을 위해 사용합니다.

로드 / 데이터 처리-> Pig가 도움이 될 것입니다.

이것은 ETL로 도움이됩니다 (돼지 스크립트를 사용하여 etl 작업을 수행 할 수 있습니다).

결과가 처리되면 하이브를 사용하여 처리 된 결과를 기반으로 보고서를 생성 할 수 있습니다.

Hive : 창고 처리를 위해 hdfs 위에 구축되었습니다.

돼지에서 생성 된 처리 된 컨텐츠의 하이브를 사용하여 임시 보고서를 쉽게 생성 할 수 있습니다.


1

돼지는 아무것도 먹는다! 비정형 데이터를 소비 할 수 있음을 의미합니다.

하이브에는 스키마가 필요합니다.


1

Pig는 일반적으로 말하는 ETL 워크로드 유형에 유용합니다. 예를 들어 매일 데이터를 변환해야합니다.

임시 쿼리를 실행하거나 데이터를 탐색하려는 경우 Hive가 빛납니다. 때로는 시각화 계층 (Tableau / Qlikview)의 인터페이스 역할을 할 수 있습니다.

둘 다 필수적이며 다른 목적으로 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.