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?
sumber
Jawaban:
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.
sumber
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.
sumber
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:
Saat menggunakan alat lain melalui streaming:
Saat menggunakan Hive untuk penyimpanan data:
sumber
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:
Hive terbaik untuk data terstruktur & PIG terbaik untuk data semi terstruktur
Hive digunakan untuk melaporkan & PIG untuk pemrograman
Hive digunakan sebagai deklaratif SQL & PIG sebagai bahasa prosedural
Sarang mendukung partisi & PIG tidak
Sarang dapat memulai server berbasis hemat opsional & PIG tidak bisa
Hive mendefinisikan tabel sebelumnya ( skema ) + menyimpan informasi skema dalam database & PIG tidak memiliki metadata database khusus
Hive tidak mendukung Avro tetapi PIG mendukung . EDIT: Hive mendukung Avro, tentukan serde sebagai org.apache.hadoop.hive.serde2.avro
Pig juga mendukung fitur COGROUP tambahan untuk melakukan sambungan luar tetapi sarangnya tidak. Tetapi kedua Hive & PIG dapat bergabung, memesan & mengurutkan secara dinamis.
sumber
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:
sumber
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.
sumber
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).
sumber
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
sumber
Baca perbedaan antara PIG dan HIVE di tautan ini.
http://www.aptibook.com/Articles/Pig-and-hive-keuntungan-disugian-fitur
Semua aspek diberikan. Jika Anda berada dalam kebingungan untuk memilih, maka Anda harus melihat halaman web itu.
sumber
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.
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.
Menulis UDF pada babi jauh lebih mudah daripada di Hive menurut saya.
Babi tidak memiliki dukungan metadata, (atau opsional, di masa depan dapat mengintegrasikan hcatalog). Hive memiliki metadata tabel yang disimpan dalam database.
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.
sumber
Saya menemukan di bawah tautan yang berguna untuk mengeksplorasi bagaimana dan kapan menggunakan HIVE dan PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
sumber
Berikut adalah beberapa tautan tambahan untuk menggunakan Babi atau Sarang.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
sumber
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.
sumber
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.
sumber
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)
sumber
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.
sumber
Ketika kita menggunakan
Hadoop
dalam 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.
sumber
Babi memakan apa saja! Artinya dapat mengkonsumsi data yang tidak terstruktur.
Sarang membutuhkan skema.
sumber
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.
sumber