이란 - hadoop wiki




돼지와 하이브의 차이점은 무엇입니까? 왜 둘 다 가지고 있니? (13)

내 배경 - 하둡 세계에서 4 주 된 Cloudera의 Hadoop VM을 사용하여 Hive, Pig 및 Hadoop에서 조금씩 손을.니다. Map-Reduce 및 GFS에 대한 Google의 문서를 읽으십시오 ( PDF 링크 ).

나는 이해-

  • 돼지의 언어 돼지 라틴어는 (프로그래머가 생각하는 방식에 맞는) SQL에서 선언적 스타일의 프로그래밍과 Hive의 쿼리 언어가 SQL과 매우 흡사합니다.

  • 돼지는 하둡 꼭대기에 앉아서 원칙적으로 드라이 어드 (Dryad) 위에 앉을 수 있습니다. 나는 틀릴 수도 있지만 Hive는 Hadoop과 밀접하게 연결되어 있습니다.

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

내 질문 - 돼지가 목적을 달성 할 수있을 때 두 가지 목표를 모두 달성하는 목표는 무엇입니까? 돼지는 야후!가 복음화 한 것입니까? 페이스 북의 하이브?


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

  2. 돼지 라틴은 복잡한 데이터 구조 (작은 그래프처럼)에 적합합니다. 돼지에는 터플 (Tuple) 컬렉션 인 DataBag이라는 데이터 구조가 있습니다. 때로는 여러 튜플을 포함하는 메트릭을 계산해야합니다 (튜플 간의 숨겨진 링크가 있습니다.이 경우 그래프라고 부릅니다). 이 경우 여러 개의 튜플과 관련된 메트릭을 계산하는 UDF를 작성하는 것은 매우 쉽습니다. 물론 하이브에서 할 수 있지만 돼지처럼 편리하지는 않습니다.

  3. 내 생각에 하이브보다 돼지에 UDF를 많이 쓰는 것이 쉽습니다.

  4. 돼지는 메타 데이터를 지원하지 않습니다 (또는 선택 사항입니다, 미래에는 hcatalog를 통합 할 수 있습니다). Hive는 테이블의 메타 데이터를 데이터베이스에 저장합니다.

  5. 로컬 환경에서 돼지 스크립트를 디버깅 할 수는 있지만, 하이브가 그렇게 할 수는 없습니다. 이유는 3 번입니다. 로컬 환경에서 하이브리드 메타 데이터를 설정해야하므로 시간이 많이 걸립니다.


"dezyre"기사의 너트 쉘 에서 돼지 대 하이브 비교를보세요.

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

약간의 차이점 :

  1. 하이브구조화 된 데이터 에 가장 적합하며 PIG세미 구조화 된 데이터에 가장 적합 합니다.

  2. 하이브프로그래밍을 위해 보고PIG 에 사용됩니다.

  3. 하이브절차 적 언어 로서 선언적 SQL & PIG 로 사용 됩니다.

  4. Hive파티션을 지원하고 PIG파티션을 지원하지 않습니다.

  5. 하이브 는 선택적인 중고품 기반의 서버를 시작할 수 있으며 PIG 는 시작할 수 없습니다

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

  7. HiveAvro를 지원하지 않지만 PIG 는 지원합니다. 편집 : 하이브 지원 Avro, org.apache.hadoop.hive.serde2.avro 같이 serde 지정

  8. 또한 돼지 는 외부 조인을 수행하기 위해 추가 COGROUP 기능을 지원하지만 하이브는 지원하지 않습니다. 그러나 Hive & PIG 는 모두 동적으로 가입하고, 정렬하고 정렬 할 수 있습니다.


Hive는 SQL에 익숙한 커뮤니티에 호소하기 위해 고안되었습니다. 그것의 철학은 우리가 또 다른 스크립팅 언어를 필요로하지 않는다는 것이 었습니다. Hive는 사용자가 선택한 언어 (SQL 절에 포함될 수 있음)로 변환 스크립트를 매핑하고 축소합니다. Python에서 프로그래밍하는 데이터 마이너뿐만 아니라 SQL에 익숙한 분석가가 Facebook에서 널리 사용됩니다. 돼지에서의 SQL 호환성 노력은 AFAIK를 포기했습니다. 두 프로젝트의 차이점은 매우 분명합니다.

SQL 구문을 지원한다는 것은 Microstrategy와 같은 기존 BI 도구와 통합 할 수 있다는 것을 의미합니다. 하이브는 가까운 장래에 이런 일이 일어나도록 허용해야하는 ODBC / JDBC 드라이버 (진행중인 작업)를 가지고 있습니다. 또한 이러한 환경에서 일반적인 드릴 다운 쿼리를 지원할 수있는 인덱스 지원을 추가하기 시작했습니다.

마지막으로 이것은 직접 질문과 관련이 없습니다. 하이브는 분석 쿼리를 수행하기위한 프레임 워크입니다. 주요 사용은 플랫 파일을 쿼리하는 것이지만 다른 상점을 쿼리 할 수있는 이유는 없습니다. 현재 Hive는 Hbase에 저장된 데이터를 쿼리하는 데 사용할 수 있으며 HadoopDB 프로젝트는 하이브를 사용하여 페더레이션 된 RDBMS 계층을 쿼리합니다.


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

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

돼지는 또한 게으른 평가를 사용합니다. 프로그래밍의 용이성을 높이고 Hive와 같은 SQL 언어보다 다양한 방식으로 데이터를 분석 할 수 있습니다. 그래서 당신이 가지고 있던 구조화되지 않은 데이터에서 행렬이나 패턴을 분석하고 흥미로운 계산을하고 싶다면 돼지와 함께 공정한 거리를 가면서 Hive로 결과와 함께 뭔가를해야합니다.

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

돼지는 병렬 처리에 매우 적합하므로 데이터 세트가 거대한 시스템, 즉 지연 시간 (결과의 특정 데이터를 얻는 시간)보다 결과의 처리량에 더 많은 관심이있는 시스템에서 우위를 점할 수 있습니다.


pig / hive 쿼리를 사용하면 비슷한 결과를 얻을 수 있습니다. 주요 차이점은 쿼리 이해 / 작성 / 작성 방법에 있습니다.

돼지는 데이터 흐름을 생성하는 경향이 있습니다. 각각의 단계에서 약간의 처리를하는 작은 단계
Hive는 SQL과 비슷한 언어로 데이터를 조작 할 수 있으므로 RDBMS에서의 변환이 훨씬 쉽습니다 (Pig는 이전에 SQL 사용 경험이 없었던 사람이라면 더 쉬울 수 있습니다)

Hive의 경우이 데이터 (Beeswax for HUE 또는 Hive 웹 인터페이스)를 사용하여 작업하기에 좋은 인터페이스가 될 수 있으며 또한 데이터 (스키마 등)에 대한 정보를 메타 스토어로 제공하여 귀하의 데이터에 대한 중앙 정보.

저는 하이브와 돼지를 모두 다른 쿼리에 사용합니다. (나는 더 빠르고 쉽게 쿼리를 작성할 수 있으며, 대부분이 임시 쿼리입니다.) - 입력과 동일한 데이터를 사용할 수 있습니다. 그러나 현재 나는 Beeswax를 통해 많은 일을하고 있습니다.


나는 당신의 질문에 대한 진정한 대답은 그들이 독립적 인 프로젝트이고 중앙 집중적 인 목표가 없다고 믿는다. 그들은 초기에 다른 공간에 있었고 두 프로젝트가 확장됨에 따라 시간이 겹치기 시작했습니다.

Hadoop O'Reilly 책에서 바꿔 치기 :

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

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



돼지는 무엇이든 먹는다! 그것이 체계화되지 않은 데이터를 소비 할 수 있음을 의미합니다.

Hive에는 스키마가 필요합니다.


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

하이브는 전체 데이터베이스가 아닙니다. Hadoop과 HDFS의 디자인 제약과 한계는 Hive가 할 수있는 것에 제한을 가하고 있습니다.

Hive는 데이터웨어 하우스 응용 프로그램에 가장 적합합니다.

1) 상대적으로 정적 인 데이터가 분석되고,

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

3) 데이터가 빠르게 변하지 않을 때.

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


야후!의 돼지 건축가 앨런 게이츠 (Alan Gates)의이 post 에서 돼지보다는 하이브 (Hive)와 같은 SQL을 언제 사용하는지 비교해보십시오. 그는 Pig (선언적 SQL)와 같은 절차 언어의 유용성과 데이터 흐름 디자이너에 대한 유용성에 대해 매우 설득력있는 사례를 제시합니다.



짧게 요약하면 다음과 같습니다.

1) 돼지는 hadoop에 대한 관계형 대수학이다.

2) Hive는 SQL over hado (돼지보다 한 단계 위)입니다.


HIG가 PIG에서 할 수없는 일은 무엇입니까?

파티셔닝은 HIVE를 사용하여 수행 할 수 있지만 PIG는 수행하지 않을 수 있습니다. 이는 출력을 우회하는 방법입니다.

HIG에서 PIG가 할 수없는 것은 무엇입니까?

위치 참조 - 필드 이름을 사용하지 않아도 $ 0 - 첫 번째 필드는 $ 1, 두 번째 필드는 $ 1과 같은 위치를 사용하여 참조 할 수 있습니다.

또 다른 근본적인 차이점은 PIG는 값을 쓰는 데 스키마가 필요하지 않지만 HIVE는 스키마가 필요하다는 것입니다.

JDBC와 다른 것을 사용하여 외부 응용 프로그램에서 HIVE로 연결할 수 있지만 PIG에서는 사용할 수 없습니다.

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





apache-pig