Sự khác biệt giữa lợn và tổ ong? Tại sao có cả hai? [đóng cửa]


256

Hoàn cảnh của tôi - 4 tuần tuổi trong thế giới Hadoop. Tìm hiểu một chút về Hive, Pig và Hadoop bằng Cloudera's Hadoop VM. Đã đọc bài viết của Google về Map-Giảm và GFS ( liên kết PDF ).

Tôi hiểu điều đó-

  • Ngôn ngữ của Pig Pig Pig là một sự thay đổi từ (phù hợp với cách nghĩ của các lập trình viên) SQL giống như phong cách lập trình khai báo và ngôn ngữ truy vấn của Hive gần giống với SQL.

  • Heo ngồi trên đỉnh Hadoop và về nguyên tắc cũng có thể ngồi trên đỉnh Dryad. Tôi có thể sai nhưng Hive được kết hợp chặt chẽ với Hadoop.

  • Cả hai lệnh Pig Latin và Hive đều biên dịch thành Map và Giảm công việc.

Câu hỏi của tôi - Mục tiêu của việc có cả hai khi một người (nói Pig) có thể phục vụ mục đích là gì. Có phải chỉ vì Pig được truyền giáo bởi Yahoo! và Hive của Facebook?


24
Hive là cho dữ liệu có cấu trúc. Pig là cho dữ liệu phi cấu trúc.
Lập trình viên chết

Câu trả lời:


151

Kiểm tra bài đăng này từ Alan Gates, kiến ​​trúc sư Pig tại Yahoo!, So sánh khi nào sẽ sử dụng SQL như Hive thay vì Pig. Ông đưa ra một trường hợp rất thuyết phục về tính hữu ích của một ngôn ngữ thủ tục như Pig (so với SQL khai báo) và tiện ích của nó đối với các nhà thiết kế dataflow.


Alan cũng có một bài viết thảo luận cụ thể về Hive, như được chia sẻ j03m dưới đây. Thứ tốt từ anh ấy!
Dolan Antenucci

14
Hive là cho dữ liệu có cấu trúc. Pig là cho dữ liệu không có cấu trúc.
Lập trình viên chết

7
Tôi bối rối. Ý của bạn là nói "[...] tính hữu dụng của ngôn ngữ thủ tục như Pig"? Bởi vì bài báo liên tục tuyên bố rằng "Pig Latin là thủ tục".
Matt Fenwick

4
Tôi không chắc nó có tạm thời không, nhưng bài báo dường như không còn nữa. Bạn có thể cập nhật liên kết (tôi không thể tìm thấy nó với một tìm kiếm nhanh)?
Peter Klipfel

1
Bài đăng của Alan Gates là ở đây .. vui lòng xem qua nó .. developer.yahoo.com/bloss/hadoop/
triệt

57

Hive được thiết kế để thu hút cộng đồng thoải mái với SQL. Triết lý của nó là chúng ta không cần một ngôn ngữ kịch bản nữa. Hive hỗ trợ ánh xạ và giảm các tập lệnh biến đổi theo ngôn ngữ của sự lựa chọn của người dùng (có thể được nhúng trong các mệnh đề SQL). Nó được sử dụng rộng rãi trong Facebook bởi các nhà phân tích thoải mái với SQL cũng như lập trình khai thác dữ liệu trong Python. Các nỗ lực tương thích SQL trong Pig đã bị bỏ rơi AFAIK - vì vậy sự khác biệt giữa hai dự án là rất rõ ràng.

Hỗ trợ cú pháp SQL cũng có nghĩa là có thể tích hợp với các công cụ BI hiện có như Microstrargety. Hive có trình điều khiển ODBC / JDBC (đó là một công việc đang tiến hành) sẽ cho phép điều này xảy ra trong tương lai gần. Nó cũng bắt đầu thêm hỗ trợ cho các chỉ mục sẽ cho phép hỗ trợ cho các truy vấn chi tiết phổ biến trong các môi trường như vậy.

Cuối cùng - điều này không phù hợp với câu hỏi trực tiếp - Hive là một khung để thực hiện các truy vấn phân tích. Mặc dù công dụng chủ yếu của nó là truy vấn các tệp phẳng, không có lý do nào khiến nó không thể truy vấn các cửa hàng khác. Hiện tại Hive có thể được sử dụng để truy vấn dữ liệu được lưu trữ trong Hbase (là kho lưu trữ khóa-giá trị giống như dữ liệu được tìm thấy trong ruột của hầu hết các RDBMS) và dự án HadoopDB đã sử dụng Hive để truy vấn tầng RDBMS được liên kết.


37

Tôi thấy điều này hữu ích nhất (mặc dù, nó đã một năm tuổi) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Nó đặc biệt nói về Pig vs Hive và thời gian và nơi họ được tuyển dụng tại Yahoo. Tôi thấy điều này rất sâu sắc. Một số lưu ý thú vị:

Trên các thay đổi / cập nhật gia tăng cho các tập dữ liệu:

Thay vào đó, tham gia đối với dữ liệu gia tăng mới và sử dụng kết quả cùng với kết quả từ lần tham gia đầy đủ trước đó là cách tiếp cận chính xác. Điều này sẽ chỉ mất một vài phút. Các hoạt động cơ sở dữ liệu tiêu chuẩn có thể được thực hiện theo cách tăng dần này trong Pig Latin, làm cho Pig trở thành một công cụ tốt cho trường hợp sử dụng này.

Về việc sử dụng các công cụ khác thông qua truyền phát:

Tích hợp lợn với phát trực tuyến cũng giúp các nhà nghiên cứu dễ dàng lấy tập lệnh Perl hoặc Python mà họ đã gỡ lỗi trên một tập dữ liệu nhỏ và chạy nó với tập dữ liệu khổng lồ.

Về việc sử dụng Hive để lưu trữ dữ liệu:

Trong cả hai trường hợp, mô hình quan hệ và SQL là phù hợp nhất. Thật vậy, kho dữ liệu là một trong những trường hợp sử dụng cốt lõi cho SQL thông qua phần lớn lịch sử của nó. Nó có các cấu trúc phù hợp để hỗ trợ các loại truy vấn và công cụ mà các nhà phân tích muốn sử dụng. Và nó đã được sử dụng bởi cả các công cụ và người dùng trong lĩnh vực này.

Tiểu dự án Hadoop Hive cung cấp giao diện SQL và mô hình quan hệ cho Hadoop. Nhóm Hive đã bắt đầu làm việc để tích hợp với các công cụ BI thông qua các giao diện như ODBC.


1
+1 tuyệt vời khi thấy một so sánh từ Yahoo, người, từ những gì tôi hiểu người sáng tạo ban đầu của Pig, hoặc ít nhất là một người đề xuất rất lớn. Chỉnh sửa: từ Jakob ở trên, tôi thấy rằng tác giả (Alan Gates) là Kiến trúc sư Pig tại Yahoo - chia sẻ rất tuyệt vời :)
Dolan Antenucci

3
Liên kết đã chết. Tôi nghĩ rằng URL chính xác tại thời điểm này là: https://developer.yahoo.com/bloss/hadoop/pig-hive-yahoo-464.html .
agarie

1
Liên kết được cập nhật ở trên
j03m


2 liên kết được chia sẻ ở trên là không tìm thấy nữa.
Keshav Pradeep Ramanath

28

Hãy xem Pig Vs Hive So sánh trong một vỏ hạt từ một bài báo "dezyre"

Hive tốt hơn PIG trong: Phân vùng, Máy chủ, Giao diện web & Hỗ trợ JDBC / ODBC.

Một số khác biệt:

  1. Hive là tốt nhất cho Dữ liệu có cấu trúc & PIG là tốt nhất cho dữ liệu bán cấu trúc

  2. Hive được sử dụng để báo cáo & PIG cho lập trình

  3. Hive được sử dụng như một SQL declarative & PIG như một ngôn ngữ thủ tục

  4. Hive hỗ trợ phân vùng & PIG không

  5. Hive có thể bắt đầu một máy chủ dựa trên tiết kiệm tùy chọn & PIG không thể

  6. Hive xác định các bảng trước ( lược đồ ) + lưu trữ thông tin lược đồ trong cơ sở dữ liệu & PIG không có siêu dữ liệu chuyên dụng của cơ sở dữ liệu

  7. Hive không hỗ trợ Avro nhưng PIG thì có. EDIT: Hive hỗ trợ Avro, chỉ định serde là org.apache.hadoop.hive.serde2.avro

  8. Pig cũng hỗ trợ tính năng COGROUP bổ sung để thực hiện các phép nối ngoài nhưng tổ ong thì không. Nhưng cả Hive & PIG đều có thể tham gia, đặt hàng & sắp xếp linh hoạt .


17

Tôi tin rằng câu trả lời thực sự cho câu hỏi của bạn là chúng là / là các dự án độc lập và không có mục tiêu phối hợp tập trung. Chúng ở các không gian khác nhau từ rất sớm và đã phát triển chồng chéo theo thời gian khi cả hai dự án mở rộng.

Được diễn giải từ cuốn sách Hadoop O'Reilly:

Pig: một ngôn ngữ và môi trường dataflow để khám phá các bộ dữ liệu rất lớn.

Hive: kho dữ liệu phân tán


22
Hive không giống như RDBMS. Nó xử lý các tập tin phẳng giống như Pig. Cả hai về cơ bản đều làm điều tương tự. Nhìn vào các trình tối ưu hóa mà họ sử dụng khi biên dịch công việc vì đó là sự khác biệt thực sự lớn nhất.
Steve Severance

12

Bạn có thể đạt được kết quả tương tự với các truy vấn lợn / tổ ong. Sự khác biệt chính nằm trong cách tiếp cận để hiểu / viết / tạo truy vấn.

Pig có xu hướng tạo ra một luồng dữ liệu: các bước nhỏ trong đó mỗi lần bạn thực hiện một số xử lý
Hive cung cấp cho bạn ngôn ngữ giống như SQL để vận hành trên dữ liệu của bạn, vì vậy việc chuyển đổi từ RDBMS dễ dàng hơn nhiều (Pig có thể dễ dàng hơn cho những người không có kinh nghiệm trước đó với SQL)

Điều đáng chú ý là, đối với Hive, bạn có thể giao diện đẹp để làm việc với dữ liệu này (Beeswax cho HUE hoặc giao diện web Hive) và nó cũng cung cấp cho bạn thông tin về dữ liệu của bạn (lược đồ, v.v.) hữu ích như một thông tin trung tâm về dữ liệu của bạn.

Tôi sử dụng cả Hive và Pig, cho các truy vấn khác nhau (tôi sử dụng truy vấn đó để tôi có thể viết truy vấn nhanh hơn / dễ dàng hơn, tôi thực hiện theo cách này chủ yếu là truy vấn đặc biệt) - chúng có thể sử dụng cùng một dữ liệu làm đầu vào. Nhưng hiện tại tôi đang làm nhiều công việc của mình thông qua sáp ong.


12

Pig cho phép một người tải dữ liệu và mã người dùng tại bất kỳ điểm nào trong đường ống. Điều này có thể đặc biệt quan trọng nếu dữ liệu là dữ liệu phát trực tuyến, ví dụ dữ liệu từ các vệ tinh hoặc dụng cụ.

Hive, dựa trên RDBMS, cần dữ liệu được nhập trước (hoặc được tải) và sau đó nó có thể được xử lý. Vì vậy, nếu bạn đang sử dụng Hive khi truyền dữ liệu, bạn sẽ phải tiếp tục đổ đầy xô (hoặc tệp) và sử dụng tổ ong trên mỗi thùng chứa đầy , trong khi sử dụng các thùng khác để tiếp tục lưu trữ dữ liệu mới đến.

Heo cũng dùng đánh giá lười biếng. Nó cho phép lập trình dễ dàng hơn và người ta có thể sử dụng nó để phân tích dữ liệu theo nhiều cách khác nhau với sự tự do hơn so với ngôn ngữ như SQL như Hive. Vì vậy, nếu bạn thực sự muốn phân tích ma trận hoặc mẫu trong một số dữ liệu phi cấu trúc mà bạn có và muốn thực hiện các phép tính thú vị trên chúng, với Pig bạn có thể đi một khoảng cách hợp lý, trong khi với Hive, bạn cần một thứ khác để chơi với kết quả.

Pig nhanh hơn trong việc nhập dữ liệu nhưng thực thi thực tế chậm hơn so với ngôn ngữ thân thiện với RDBMS như Hive.

Pig rất phù hợp với việc song song hóa và do đó, nó có thể có lợi thế cho các hệ thống có bộ dữ liệu rất lớn, tức là trong các hệ thống mà bạn quan tâm nhiều hơn đến thông lượng kết quả của mình hơn độ trễ (thời gian để có bất kỳ dữ liệu cụ thể nào về kết quả).


10

Hive Vs Pig-

Hive giống như giao diện SQL cho phép người dùng hiểu biết về sql hoặc các công cụ khác như Tableu / Microstrargety / bất kỳ công cụ hoặc ngôn ngữ nào khác có giao diện sql ..

PIG giống như một đường ống ETL..với các lệnh từng bước như khai báo các biến, lặp, lặp, các câu lệnh có điều kiện, v.v.

Tôi thích viết các kịch bản Pig hơn hive QL khi tôi muốn viết logic từng bước phức tạp. Khi tôi cảm thấy thoải mái khi viết một sql duy nhất để lấy dữ liệu tôi muốn tôi sử dụng Hive. đối với tổ ong, bạn sẽ cần xác định bảng trước khi truy vấn (như bạn làm trong RDBMS)

Mục đích của cả hai đều khác nhau nhưng dưới vỏ bọc, cả hai đều làm như vậy, chuyển đổi sang các chương trình giảm bản đồ. Ngoài ra, cộng đồng nguồn mở Apache đang bổ sung ngày càng nhiều tính năng cho cả hai dự án



7
  1. Pig-latin là kiểu luồng dữ liệu, phù hợp hơn cho kỹ sư phần mềm. Trong khi sql phù hợp hơn cho người phân tích đã quen với sql. Đối với nhiệm vụ phức tạp, đối với tổ ong, bạn phải tạo thủ công để tạo bảng tạm thời để lưu trữ dữ liệu trung gian, nhưng không cần thiết cho lợn.

  2. Pig-latin phù hợp với cấu trúc dữ liệu phức tạp (như biểu đồ nhỏ). Có một cấu trúc dữ liệu ở lợn tên là DataBag, một bộ sưu tập của Tuple. Đôi khi bạn cần tính toán các số liệu liên quan đến nhiều bộ dữ liệu (có một liên kết ẩn giữa các bộ dữ liệu, trong trường hợp này tôi sẽ gọi nó là biểu đồ). Trong trường hợp này, rất dễ dàng để viết UDF để tính toán các số liệu liên quan đến nhiều bộ dữ liệu. Tất nhiên nó có thể được thực hiện trong tổ ong, nhưng nó không thuận tiện như ở lợn.

  3. Theo tôi, viết UDF ở lợn dễ hơn Hive.

  4. Pig không có hỗ trợ siêu dữ liệu, (hoặc là tùy chọn, trong tương lai, nó có thể tích hợp hcatalog). Hive có siêu dữ liệu của bảng được lưu trữ trong cơ sở dữ liệu.

  5. Bạn có thể gỡ lỗi kịch bản lợn trong môi trường địa phương, nhưng thật khó để có thể làm điều đó. Lý do là điểm 3. Bạn cần thiết lập siêu dữ liệu trung tâm trong môi trường cục bộ, rất tốn thời gian.




4

Từ liên kết: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datwarhouse-application-is-suitable-for-Hive ?

Hive không phải là một cơ sở dữ liệu đầy đủ. Các hạn chế và hạn chế thiết kế của Hadoop và HDFS áp đặt các giới hạn đối với những gì Hive có thể làm.

Hive phù hợp nhất cho các ứng dụng kho dữ liệu, trong đó

1) Dữ liệu tương đối tĩnh được phân tích,

2) Không cần thời gian phản hồi nhanh và

3) Khi dữ liệu không thay đổi nhanh chóng.

Hive không cung cấp các tính năng quan trọng cần thiết cho OLTP, Xử lý giao dịch trực tuyến. Nó gần hơn là một công cụ OLAP, Xử lý phân tích trực tuyến. Vì vậy, Hive phù hợp nhất cho các ứng dụng kho dữ liệu, trong đó một bộ dữ liệu lớn được duy trì và khai thác để hiểu biết, báo cáo, v.v.


4

Nói một cách đơn giản, Pig là một nền tảng cấp cao để tạo các chương trình MapReduce được sử dụng với Hadoop, sử dụng các tập lệnh pig, chúng tôi sẽ xử lý lượng lớn dữ liệu thành định dạng mong muốn.

Khi dữ liệu đã xử lý thu được, dữ liệu đã xử lý này được giữ trong HDFS để xử lý sau để có kết quả mong muốn.

Ngoài dữ liệu đã xử lý được lưu trữ, chúng tôi sẽ áp dụng các lệnh SQL HIVE để có được kết quả mong muốn, bên trong các lệnh sql hive này chạy các chương trình MAP Giảm.


Đây không thực sự là một bổ sung có ý nghĩa cho cơ sở kiến ​​thức. thử thêm thông tin
agconti

4

Để cung cấp một cái nhìn tổng quan ở mức rất cao của cả hai, tóm lại:

1) Pig là một đại số quan hệ trên hadoop

2) Hive là một SQL trên hadoop (một cấp trên Pig)


So sánh đại số là thú vị
Ravindra babu

3

Những gì HIVE có thể làm mà không thể có trong PIG?

Phân vùng có thể được thực hiện bằng HIVE nhưng không phải trong PIG, đó là một cách bỏ qua đầu ra.

PIG có thể làm gì mà không thể có trong HIVE?

Tham chiếu vị trí - Ngay cả khi bạn không có tên trường, chúng tôi có thể tham chiếu bằng cách sử dụng vị trí như $ 0 - cho trường đầu tiên, $ 1 cho lần thứ hai, v.v.

Và một sự khác biệt cơ bản khác là, PIG không cần một lược đồ để viết các giá trị nhưng HIVE không cần một lược đồ.

Bạn có thể kết nối từ bất kỳ ứng dụng bên ngoài nào đến HIVE bằng cách sử dụng JDBC và các ứng dụng khác nhưng không phải với PIG.

Lưu ý: Cả hai đều chạy trên HDFS (hệ thống tệp phân tán hadoop) và các câu lệnh được chuyển đổi thành các chương trình Map Giảm.


3

Khi chúng tôi đang sử dụng Hadooptheo nghĩa nó có nghĩa là chúng tôi đang cố gắng xử lý dữ liệu lớn Mục tiêu cuối cùng của việc xử lý dữ liệu sẽ là tạo nội dung / báo cáo từ đó.

Vì vậy, bên trong nó bao gồm 2 hoạt động chính:

1) Đang xử lý dữ liệu

2) Tạo nội dung và sử dụng nó cho báo cáo / vv ..

Đang tải / Xử lý dữ liệu -> Pig sẽ hữu ích trong đó.

Điều này giúp như một ETL (Chúng tôi có thể thực hiện các thao tác etl bằng cách sử dụng tập lệnh pig.).

Khi kết quả được xử lý, chúng tôi có thể sử dụng tổ ong để tạo báo cáo dựa trên kết quả được xử lý.

Hive: Nó được xây dựng trên đỉnh hdfs để xử lý kho.

Chúng tôi có thể dễ dàng tạo các báo cáo adhoc bằng cách sử dụng tổ ong từ nội dung được xử lý được tạo từ lợn.


1

Heo ăn gì cũng được! Có nghĩa là nó có thể tiêu thụ dữ liệu phi cấu trúc.

Hive yêu cầu một lược đồ.


1

Nói chung, Pig rất hữu ích cho loại khối lượng công việc ETL. Ví dụ: tập hợp các biến đổi bạn cần thực hiện đối với dữ liệu của mình mỗi ngày.

Hive tỏa sáng khi bạn cần chạy truy vấn adhoc hoặc chỉ muốn khám phá dữ liệu. Nó đôi khi có thể hoạt động như giao diện cho Lớp trực quan hóa của bạn (Tableau / Qlikview).

Cả hai đều cần thiết và phục vụ mục đích khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.