Perbedaan antara Babi dan Sarang? Mengapa keduanya? [Tutup]


256

Latar belakang saya - berusia 4 minggu di dunia Hadoop. Berkecimpung sedikit dalam Hive, Pig dan Hadoop menggunakan Cloudera's Hadoop VM. Telah membaca makalah Google tentang Map-Reduce dan GFS ( tautan PDF ).

Aku mengerti itu-

  • Bahasa Babi Babi Latin adalah pergeseran dari (sesuai cara berpikir programmer) SQL seperti gaya pemrograman deklaratif dan bahasa permintaan Hive sangat mirip dengan SQL.

  • Babi duduk di atas Hadoop dan pada prinsipnya juga bisa duduk di atas Dryad. Saya mungkin salah tetapi Hive sangat dekat dengan Hadoop.

  • Perintah Pig Latin dan Hive mengkompilasi untuk memetakan dan mengurangi pekerjaan.

Pertanyaan saya - Apa tujuan memiliki keduanya ketika seseorang (katakanlah Babi) dapat memenuhi tujuannya. Apakah hanya karena Babi diinjili oleh Yahoo! dan Sarang oleh Facebook?


24
Hive adalah untuk data terstruktur. Babi adalah untuk data yang tidak terstruktur.
Dead Programmer

Jawaban:


151

Lihat posting ini dari Alan Gates, arsitek Babi di Yahoo !, yang membandingkan kapan akan menggunakan SQL seperti Hive daripada Babi. Dia membuat kasus yang sangat meyakinkan tentang kegunaan bahasa prosedural seperti Babi (vs SQL deklaratif) dan utilitasnya untuk desainer aliran data.


Alan juga melakukan artikel yang membahas Hive secara khusus, seperti yang dibagikan j03m di bawah ini. Barang bagus darinya!
Dolan Antenucci

14
Hive adalah untuk data terstruktur. Babi adalah untuk data yang tidak terstruktur.
Programmer Mati

7
Saya bingung. Apakah Anda bermaksud mengatakan "[...] kegunaan bahasa prosedural seperti Babi"? Karena artikel itu berulang kali mengklaim bahwa "Pig Latin is Prosedural".
Matt Fenwick

4
Saya tidak yakin apakah ini sementara, tetapi artikelnya sepertinya sudah hilang. Bisakah Anda memperbarui tautannya (saya tidak dapat menemukannya dengan pencarian cepat)?
Peter Klipfel

1
Posting Alan Gates ada di sini .. silakan kunjungi .. developer.yahoo.com/blogs/hadoop/…
Mr.Chowdary

57

Hive dirancang untuk menarik komunitas yang nyaman dengan SQL. Filosofinya adalah bahwa kita belum membutuhkan bahasa scripting lagi. Hive mendukung peta dan mengurangi skrip transformasi dalam bahasa pilihan pengguna (yang dapat disematkan dalam klausa SQL). Ini banyak digunakan di Facebook oleh para analis yang merasa nyaman dengan SQL dan juga oleh para penambang data yang menggunakan pemrograman Python. Upaya kompatibilitas SQL di Babi telah ditinggalkan AFAIK - sehingga perbedaan antara kedua proyek sangat jelas.

Mendukung sintaks SQL juga berarti bahwa itu mungkin untuk diintegrasikan dengan alat BI yang ada seperti Microstrategy. Hive memiliki driver ODBC / JDBC (itu adalah pekerjaan yang sedang berlangsung) yang harus memungkinkan ini terjadi dalam waktu dekat. Ini juga mulai menambahkan dukungan untuk indeks yang seharusnya memungkinkan dukungan untuk pertanyaan pencarian umum di lingkungan seperti itu.

Akhirnya - ini tidak berkaitan dengan pertanyaan secara langsung - Hive adalah kerangka kerja untuk melakukan pertanyaan analitik. Meskipun penggunaannya yang dominan adalah untuk query file flat, tidak ada alasan mengapa itu tidak bisa meminta toko lain. Saat ini Hive dapat digunakan untuk permintaan data yang disimpan di Hbase (yang merupakan penyimpanan nilai kunci seperti yang ditemukan di sebagian besar RDBMSes), dan proyek HadoopDB telah menggunakan Hive untuk menanyakan tingkat RDBMS gabungan.


37

Saya menemukan ini yang paling membantu (meskipun, ini berumur satu tahun) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Ini secara khusus berbicara tentang Pig vs Hive dan kapan dan di mana mereka dipekerjakan di Yahoo. Saya menemukan ini sangat mendalam. Beberapa catatan menarik:

Pada perubahan tambahan / pembaruan untuk set data:

Sebaliknya, bergabung dengan data inkremental baru dan menggunakan hasil bersama dengan hasil dari gabungan penuh sebelumnya adalah pendekatan yang benar. Ini akan memakan waktu hanya beberapa menit. Operasi basis data standar dapat diimplementasikan dengan cara tambahan ini dalam Pig Latin, menjadikan Pig alat yang baik untuk kasus penggunaan ini.

Saat menggunakan alat lain melalui streaming:

Integrasi babi dengan streaming juga memudahkan para peneliti untuk mengambil skrip Perl atau Python yang telah mereka debug pada kumpulan data kecil dan menjalankannya terhadap kumpulan data besar.

Saat menggunakan Hive untuk penyimpanan data:

Dalam kedua kasus, model relasional dan SQL paling cocok. Memang, data pergudangan telah menjadi salah satu kasus penggunaan inti untuk SQL melalui banyak sejarahnya. Ini memiliki konstruksi yang tepat untuk mendukung jenis pertanyaan dan alat yang ingin digunakan analis. Dan itu sudah digunakan oleh alat dan pengguna di lapangan.

Sub proyek Hadoop Hive menyediakan antarmuka SQL dan model relasional untuk Hadoop. Tim Hive telah mulai bekerja untuk berintegrasi dengan alat BI melalui antarmuka seperti ODBC.


1
Saya senang sekali melihat perbandingan dari Yahoo, yang, dari apa yang saya pahami pencipta asli Babi, atau setidaknya seorang pendukung yang sangat besar. Sunting: dari Jakob di atas, saya melihat bahwa pengarangnya (Alan Gates) adalah Babi Arsitek di Yahoo - bagian yang luar biasa :)
Dolan Antenucci

3
Tautannya sudah mati. Saya pikir URL yang benar saat ini adalah: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie

1
Tautan yang diperbarui per di atas
j03m


2 tautan yang dibagikan di atas tidak ditemukan lagi.
Keshav Pradeep Ramanath

28

Lihatlah Perbandingan Pig Vs Hive dalam kulit kacang dari artikel "dezyre"

Sarang lebih baik dari BABI di: Partisi, Server, antarmuka web & dukungan JDBC / ODBC.

Beberapa perbedaan:

  1. Hive terbaik untuk data terstruktur & PIG terbaik untuk data semi terstruktur

  2. Hive digunakan untuk melaporkan & PIG untuk pemrograman

  3. Hive digunakan sebagai deklaratif SQL & PIG sebagai bahasa prosedural

  4. Sarang mendukung partisi & PIG tidak

  5. Sarang dapat memulai server berbasis hemat opsional & PIG tidak bisa

  6. Hive mendefinisikan tabel sebelumnya ( skema ) + menyimpan informasi skema dalam database & PIG tidak memiliki metadata database khusus

  7. Hive tidak mendukung Avro tetapi PIG mendukung . EDIT: Hive mendukung Avro, tentukan serde sebagai org.apache.hadoop.hive.serde2.avro

  8. Pig juga mendukung fitur COGROUP tambahan untuk melakukan sambungan luar tetapi sarangnya tidak. Tetapi kedua Hive & PIG dapat bergabung, memesan & mengurutkan secara dinamis.


17

Saya percaya bahwa jawaban sebenarnya untuk pertanyaan Anda adalah bahwa mereka adalah proyek independen dan tidak ada tujuan yang terkoordinasi secara terpusat. Mereka berada di ruang yang berbeda sejak awal dan telah tumbuh untuk tumpang tindih dengan waktu ketika kedua proyek berkembang.

Parafrase dari buku Hadoop O'Reilly:

Babi: bahasa dan lingkungan aliran data untuk menjelajahi kumpulan data yang sangat besar.

Hive: gudang data terdistribusi


22
Sarang tidak seperti RDBMS. Ini memproses file datar seperti Pig. Mereka berdua pada dasarnya melakukan hal yang sama. Lihatlah pengoptimal yang mereka gunakan saat menyusun pekerjaan karena itulah perbedaan nyata terbesar.
Steve Severance

12

Anda dapat mencapai hasil yang serupa dengan permintaan babi / sarang. Perbedaan utama terletak pada pendekatan untuk memahami / menulis / membuat kueri.

Babi cenderung membuat aliran data: langkah-langkah kecil di mana setiap Anda melakukan pemrosesan
Hive memberi Anda bahasa seperti SQL untuk beroperasi pada data Anda, jadi transformasi dari RDBMS jauh lebih mudah (Babi bisa lebih mudah bagi seseorang yang belum pernah mengalami sebelumnya. dengan SQL)

Perlu juga dicatat, bahwa untuk Hive Anda dapat antarmuka yang bagus untuk bekerja dengan data ini (Lilin lebah untuk HUE, atau antarmuka web Hive), dan juga memberi Anda metastore untuk informasi tentang data Anda (skema, dll) yang berguna sebagai informasi pusat tentang data Anda.

Saya menggunakan Hive dan Pig, untuk kueri yang berbeda (saya menggunakannya di mana saya dapat menulis kueri lebih cepat / lebih mudah, saya melakukannya dengan cara ini sebagian besar ad-hoc queries) - mereka dapat menggunakan data yang sama sebagai input. Tetapi saat ini saya melakukan banyak pekerjaan saya melalui lilin lebah.


12

Babi memungkinkan seseorang untuk memuat data dan kode pengguna di setiap titik dalam pipa. Ini bisa sangat penting jika data adalah data streaming, misalnya data dari satelit atau instrumen.

Hive, yang berbasis RDBMS, membutuhkan data untuk diimpor pertama kali (atau dimuat) dan setelah itu dapat dikerjakan. Jadi jika Anda menggunakan Hive pada streaming data, Anda harus tetap mengisi ember (atau file) dan menggunakan sarang di setiap ember yang diisi , sambil menggunakan ember lain untuk tetap menyimpan data yang baru tiba.

Babi juga menggunakan evaluasi malas. Ini memungkinkan kemudahan pemrograman yang lebih besar dan seseorang dapat menggunakannya untuk menganalisis data dengan cara yang berbeda dengan lebih banyak kebebasan daripada dalam bahasa seperti SQL seperti Hive. Jadi jika Anda benar-benar ingin menganalisis matriks atau pola dalam beberapa data tidak terstruktur yang Anda miliki, dan ingin melakukan perhitungan yang menarik pada mereka, dengan Babi Anda dapat menempuh jarak yang cukup jauh, sementara dengan Hive, Anda memerlukan sesuatu yang lain untuk dimainkan dengan hasilnya.

Babi lebih cepat dalam impor data tetapi lebih lambat dalam eksekusi sebenarnya daripada bahasa yang ramah RDBMS seperti Hive.

Babi sangat cocok untuk paralelisasi dan sehingga mungkin memiliki keunggulan untuk sistem di mana dataset sangat besar, yaitu dalam sistem di mana Anda lebih peduli tentang throughput hasil Anda daripada latensi (waktu untuk mendapatkan datum hasil tertentu).


10

Hive Vs Pig-

Hive adalah sebagai antarmuka SQL yang memungkinkan pengguna yang mengerti sql atau alat lain seperti Tableu / Microstrategy / alat atau bahasa lain yang memiliki antarmuka sql ..

PIG lebih seperti pipa ETL..dengan perintah langkah demi langkah seperti mendeklarasikan variabel, perulangan, iterasi, pernyataan kondisional, dll.

Saya lebih suka menulis skrip Babi daripada sarang QL ketika saya ingin menulis logika langkah demi langkah yang kompleks. Ketika saya nyaman menulis satu sql untuk menarik data yang saya inginkan, saya menggunakan Hive. untuk sarang Anda perlu menentukan tabel sebelum query (seperti yang Anda lakukan di RDBMS)

Tujuan keduanya berbeda tetapi di bawah tenda, keduanya melakukan hal yang sama, konversi ke program pengurangan peta. Juga komunitas open source Apache menambahkan lebih banyak fitur ke kedua proyek yang ada



7
  1. Babi-latin adalah gaya aliran data, lebih cocok untuk insinyur perangkat lunak. Sedangkan sql lebih cocok untuk orang analitik yang terbiasa dengan sql. Untuk tugas yang kompleks, untuk sarang Anda harus secara manual membuat tabel sementara untuk menyimpan data perantara, tetapi tidak perlu untuk babi.

  2. Pig-latin cocok untuk struktur data yang rumit (seperti grafik kecil). Ada struktur data pada babi yang disebut DataBag yang merupakan kumpulan Tuple. Terkadang Anda perlu menghitung metrik yang melibatkan beberapa tupel (ada tautan tersembunyi antara tupel, dalam hal ini saya akan menyebutnya grafik). Dalam hal ini, sangat mudah untuk menulis UDF untuk menghitung metrik yang melibatkan beberapa tupel. Tentu saja itu bisa dilakukan di dalam sarang, tetapi tidak nyaman seperti pada babi.

  3. Menulis UDF pada babi jauh lebih mudah daripada di Hive menurut saya.

  4. Babi tidak memiliki dukungan metadata, (atau opsional, di masa depan dapat mengintegrasikan hcatalog). Hive memiliki metadata tabel yang disimpan dalam database.

  5. Anda dapat men-debug skrip babi di lingkungan lokal, tetapi akan sulit bagi sarang untuk melakukannya. Alasannya adalah poin 3. Anda perlu mengatur metadata sarang di lingkungan lokal Anda, sangat memakan waktu.




4

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

Hive bukan database lengkap. Kendala desain dan batasan Hadoop dan HDFS memberikan batasan pada apa yang dapat dilakukan Hive.

Hive paling cocok untuk aplikasi data warehouse, di mana

1) Data yang relatif statis dianalisis,

2) Waktu respons cepat tidak diperlukan, dan

3) Ketika data tidak berubah dengan cepat.

Hive tidak menyediakan fitur penting yang diperlukan untuk OLTP, Pemrosesan Transaksi Online. Lebih dekat untuk menjadi alat OLAP, Pemrosesan Analitik Online. Jadi, Hive paling cocok untuk aplikasi data warehouse, di mana kumpulan data besar dikelola dan ditambang untuk wawasan, laporan, dll.


4

Dengan kata-kata yang lebih sederhana, Pig adalah platform tingkat tinggi untuk membuat program MapReduce yang digunakan dengan Hadoop, menggunakan skrip babi kami akan memproses sejumlah besar data ke dalam format yang diinginkan.

Setelah data yang diproses diperoleh, data yang diproses ini disimpan dalam HDFS untuk diproses lebih lanjut untuk mendapatkan hasil yang diinginkan.

Di atas data yang diproses yang tersimpan, kami akan menerapkan perintah SQL HIVE untuk mendapatkan hasil yang diinginkan, secara internal perintah sql ini menjalankan program MAP Reduce.


ini bukan tambahan yang berarti bagi basis pengetahuan. coba tambahkan lebih banyak informasi
agconti

4

Singkatnya, untuk memberikan ikhtisar tingkat yang sangat tinggi dari keduanya:

1) Babi adalah aljabar relasional di atas hadoop

2) Sarang adalah SQL over hadoop (satu tingkat di atas Babi)


Perbandingan aljabar menarik
Ravindra babu

3

Apa yang bisa dilakukan oleh HIVE yang tidak mungkin terjadi pada PIG?

Partisi dapat dilakukan dengan menggunakan HIVE tetapi tidak dalam PIG, ini adalah cara mem-bypass output.

Apa yang bisa dilakukan PIG yang tidak mungkin pada HIVE?

Referensi posisi - Bahkan ketika Anda tidak memiliki nama bidang, kita dapat referensi menggunakan posisi seperti $ 0 - untuk bidang pertama, $ 1 untuk yang kedua dan seterusnya.

Dan perbedaan mendasar lainnya adalah, PIG tidak memerlukan skema untuk menuliskan nilai-nilai tetapi HIVE memang membutuhkan skema.

Anda dapat terhubung dari aplikasi eksternal apa pun ke HIVE menggunakan JDBC dan lainnya tetapi tidak dengan PIG.

Catatan: Keduanya berjalan di atas HDFS (sistem file terdistribusi hadoop) dan pernyataan dikonversi ke program Mengurangi Peta.


3

Ketika kita menggunakan Hadoopdalam arti itu berarti kita mencoba untuk memproses data yang sangat besar . Tujuan akhir dari pemrosesan data adalah untuk menghasilkan konten / laporan dari itu.

Jadi secara internal terdiri dari 2 kegiatan utama:

1) Memuat Pemrosesan Data

2) Hasilkan konten dan gunakan untuk pelaporan / dll.

Memuat / Memproses Data -> Babi akan sangat membantu di dalamnya.

Ini membantu sebagai ETL (Kita bisa melakukan operasi etl menggunakan skrip babi.).

Setelah hasilnya diproses, kita dapat menggunakan sarang untuk menghasilkan laporan berdasarkan hasil yang diproses.

Sarang: Ini dibangun di atas hdfs untuk pemrosesan gudang.

Kami dapat membuat laporan adhoc dengan mudah menggunakan sarang dari konten yang diproses yang dihasilkan dari babi.


1

Babi memakan apa saja! Artinya dapat mengkonsumsi data yang tidak terstruktur.

Sarang membutuhkan skema.


1

Babi berguna untuk jenis beban kerja ETL secara umum. Misalnya serangkaian transformasi yang perlu Anda lakukan untuk data Anda setiap hari.

Sarang bersinar ketika Anda perlu menjalankan permintaan adhoc atau hanya ingin menjelajahi data. Kadang-kadang dapat bertindak sebagai antarmuka ke Layer visualisasi Anda (Tableau / Qlikview).

Keduanya penting dan melayani tujuan yang berbeda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.