Differenza tra maiale e alveare? Perché entrambi? [chiuso]


256

Il mio background: 4 settimane nel mondo di Hadoop. Abbandonato un po 'in Hive, Pig e Hadoop usando l'Hadoop VM di Cloudera. Ho letto l'articolo di Google su Map-Reduce e GFS ( link PDF ).

Lo capisco-

  • Il linguaggio del maiale Il latino del maiale è un passaggio da (si adatta al modo in cui i programmatori pensano) SQL come stile dichiarativo di programmazione e il linguaggio di query di Hive ricorda da vicino SQL.

  • Il maiale si trova in cima a Hadoop e in linea di principio può anche sedersi in cima a Dryad. Potrei sbagliarmi, ma Hive è strettamente associato a Hadoop.

  • Entrambi i comandi Pig Latin e Hive vengono compilati per mappare e ridurre i lavori.

La mia domanda: qual è l'obiettivo di avere entrambi quando uno (diciamo maiale) potrebbe servire allo scopo. È solo perché il maiale è evangelizzato da Yahoo! e Hive di Facebook?


24
Hive è per dati strutturati. Il maiale è per dati non strutturati.
Dead Programmer

Risposte:


151

Dai un'occhiata a questo post di Alan Gates, architetto di maiale di Yahoo !, che confronta quando userebbe un SQL come Hive anziché Pig. Fa un caso molto convincente per quanto riguarda l'utilità di un linguaggio procedurale come Pig (vs. SQL dichiarativo) e la sua utilità per i progettisti del flusso di dati.


Alan fa anche un articolo che discute specificamente di Hive, come condiviso j03m sotto. Roba buona da lui!
Dolan Antenucci,

14
Hive è per dati strutturati. Il maiale è per dati non strutturati.
Dead Programmer

7
Non ho capito bene. Intendevi dire "utilità [...] di un linguaggio procedurale come Pig"? Perché l'articolo afferma ripetutamente che "Il latino latino è procedurale".
Matt Fenwick,

4
Non sono sicuro che sia temporaneo, ma l'articolo sembra essere sparito. Puoi aggiornare il link (non sono riuscito a trovarlo con una ricerca rapida)?
Peter Klipfel,

1
Il post di Alan Gates è qui .. per favore
leggilo

57

Hive è stato progettato per attrarre una comunità a suo agio con SQL. La sua filosofia era che non abbiamo bisogno di un altro linguaggio di scripting. Hive supporta la mappatura e riduce gli script di trasformazione nella lingua scelta dall'utente (che può essere incorporata nelle clausole SQL). È ampiamente utilizzato in Facebook dagli analisti a loro agio con SQL, nonché dalla programmazione di data mining in Python. Gli sforzi di compatibilità SQL in Pig sono stati abbandonati AFAIK - quindi la differenza tra i due progetti è molto chiara.

Supportare la sintassi SQL significa anche che è possibile integrarsi con strumenti di BI esistenti come Microstrategy. Hive ha un driver ODBC / JDBC (che è un work in progress) che dovrebbe consentire che ciò accada nel prossimo futuro. Sta anche iniziando ad aggiungere il supporto per gli indici che dovrebbe consentire il supporto di query drill-down comuni in tali ambienti.

Infine - questo non è direttamente pertinente alla domanda - Hive è un framework per eseguire query analitiche. Mentre il suo uso dominante è di interrogare file flat, non c'è motivo per cui non possa interrogare altri store. Attualmente Hive può essere utilizzato per eseguire query sui dati archiviati in Hbase (che è un archivio di valori-chiave come quelli presenti nella maggior parte degli RDBMS), e il progetto HadoopDB ha utilizzato Hive per eseguire query su un livello RDBMS federato.


37

Ho trovato questo il più utile (però, ha un anno) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Parla in particolare di Pig vs Hive e quando e dove sono impiegati in Yahoo. L'ho trovato molto penetrante. Alcune note interessanti:

In caso di modifiche / aggiornamenti incrementali ai set di dati:

Invece, l'unione con i nuovi dati incrementali e l'utilizzo dei risultati insieme ai risultati del precedente full join è l'approccio corretto. Questo richiederà solo pochi minuti. Le operazioni di database standard possono essere implementate in questo modo incrementale in latino latino, rendendo Pig un buon strumento per questo caso d'uso.

Sull'uso di altri strumenti tramite streaming:

L'integrazione di maiale con lo streaming rende inoltre facile per i ricercatori prendere uno script Perl o Python di cui hanno già eseguito il debug su un piccolo set di dati ed eseguirlo su un enorme set di dati.

Sull'uso di Hive per il data warehousing:

In entrambi i casi, il modello relazionale e SQL sono la soluzione migliore. In effetti, il data warehousing è stato uno dei principali casi d'uso di SQL per gran parte della sua storia. Ha i costrutti giusti per supportare i tipi di query e strumenti che gli analisti vogliono utilizzare. Ed è già in uso sia dagli strumenti che dagli utenti sul campo.

Il sottoprogetto Hadoop Hive fornisce un'interfaccia SQL e un modello relazionale per Hadoop. Il team di Hive ha iniziato a lavorare per integrarsi con gli strumenti di BI tramite interfacce come ODBC.


1
+1 fantastico per vedere un confronto da Yahoo, che è, da quello che capisco il creatore originale di Pig, o almeno un grande sostenitore. Modifica: da Jakob sopra, vedo che l'autore (Alan Gates) è il Pig Architect di Yahoo - così grande condivisione :)
Dolan Antenucci

3
Il link è morto. Penso che l'URL corretto in questo momento sia: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie,

1
Link aggiornato sopra
j03m


I 2 link condivisi sopra non sono più stati trovati.
Keshav Pradeep Ramanath,

28

Dai un'occhiata a Pig Vs Hive Comparison in un guscio di noce tratto da un articolo "dezyre"

Hive è meglio di PIG in: partizioni, server, interfaccia Web e supporto JDBC / ODBC.

Alcune differenze:

  1. Hive è il migliore per i dati strutturati e PIG è il migliore per i dati semi strutturati

  2. Hive viene utilizzato per il reporting e PIG per la programmazione

  3. Hive viene utilizzato come SQL dichiarativo e PIG come linguaggio procedurale

  4. Hive supporta le partizioni e PIG no

  5. Hive può avviare un server basato sulla parsimonia opzionale e PIG no

  6. Hive definisce in anticipo le tabelle ( schema ) + memorizza le informazioni dello schema in un database e PIG non ha metadati dedicati del database

  7. Hive non supporta Avro ma PIG . EDIT: Hive supporta Avro, specifica il serde come org.apache.hadoop.hive.serde2.avro

  8. Pig supporta anche la funzione COGROUP aggiuntiva per l'esecuzione di join esterni, ma l'hive no. Ma sia Hive che PIG possono unirsi, ordinare e ordinare dinamicamente.


17

Credo che la vera risposta alla tua domanda sia che sono / erano progetti indipendenti e che non vi era alcun obiettivo coordinato a livello centrale. Erano in diversi spazi all'inizio e sono cresciuti per sovrapporsi con il tempo man mano che entrambi i progetti si espandono.

Parafrasato dal libro di Hadoop O'Reilly:

Pig: un linguaggio e un ambiente di flusso di dati per esplorare set di dati molto grandi.

Hive: un data warehouse distribuito


22
Hive non è come un RDBMS. Elabora file flat proprio come Pig. Fondamentalmente entrambi fanno la stessa cosa. Guarda gli ottimizzatori che usano durante la compilazione del lavoro in quanto questa è la più grande differenza reale.
Steve Severance,

12

È possibile ottenere risultati simili con query suino / alveare. La differenza principale sta nell'approccio alla comprensione / scrittura / creazione di query.

Il maiale tende a creare un flusso di dati: piccoli passi in cui in ciascuno di voi esegui un po 'di elaborazione
Hive ti offre un linguaggio simile a SQL per operare sui tuoi dati, quindi la trasformazione da RDBMS è molto più semplice (Maiale può essere più facile per qualcuno che non aveva precedenti esperienze con SQL)

Vale anche la pena notare che per Hive è possibile utilizzare un'interfaccia piacevole per lavorare con questi dati (Beeswax for HUE, o interfaccia web Hive) e che fornisce anche metastore per informazioni sui dati (schema, ecc.) Che è utile come informazioni centrali sui tuoi dati.

Uso sia Hive sia Pig per query diverse (utilizzo quella in cui posso scrivere query più velocemente / più facilmente, lo faccio in questo modo principalmente query ad hoc) - possono usare gli stessi dati di un input. Ma attualmente sto facendo gran parte del mio lavoro attraverso la cera d'api.


12

Pig consente di caricare dati e codice utente in qualsiasi punto della pipeline. Ciò può essere particolarmente importante se i dati sono dati in streaming, ad esempio dati da satelliti o strumenti.

Hive, che è basato su RDBMS, ha bisogno che i dati vengano prima importati (o caricati) e successivamente possano essere elaborati. Pertanto, se si utilizzava Hive per lo streaming dei dati, è necessario continuare a riempire i bucket (o i file) e utilizzare l'hive su ciascun bucket riempito , mentre si utilizzano altri bucket per continuare a memorizzare i dati appena arrivati.

Il maiale usa anche la valutazione pigra. Permette una maggiore facilità di programmazione e si possono usare per analizzare i dati in modi diversi con più libertà rispetto a un linguaggio simile a SQL come Hive. Quindi, se davvero volevi analizzare matrici o modelli in alcuni dati non strutturati che avevi, e volevi fare calcoli interessanti su di essi, con Pig puoi fare una certa distanza, mentre con Hive hai bisogno di qualcos'altro per giocare con i risultati.

Pig è più veloce nell'importazione dei dati ma più lento nell'esecuzione effettiva rispetto a un linguaggio compatibile con RDBMS come Hive.

Pig è ben adattato alla parallelizzazione e quindi probabilmente ha un vantaggio per i sistemi in cui i set di dati sono enormi, vale a dire nei sistemi in cui si è più preoccupati della velocità effettiva dei risultati che della latenza (il tempo per ottenere qualsiasi dato particolare del risultato).


10

Hive Vs Pig-

Hive è un'interfaccia SQL che consente agli utenti esperti di sql o altri strumenti come Tableu / Microstrategy / qualsiasi altro strumento o linguaggio che abbia un'interfaccia sql.

PIG è più simile a una pipeline ETL ... con comandi passo-passo come la dichiarazione di variabili, loop, iterazione, istruzioni condizionali ecc.

Preferisco scrivere script Pig su Hive QL quando voglio scrivere complesse logiche passo-passo. Quando mi sento a mio agio a scrivere un singolo sql per estrarre i dati che voglio uso Hive. per l'alveare dovrai definire la tabella prima dell'interrogazione (come fai in RDBMS)

Lo scopo di entrambi è diverso ma sotto il cofano, entrambi fanno lo stesso, convertono in programmi di riduzione della mappa. Inoltre, la comunità open source Apache aggiunge sempre più funzionalità a entrambi i progetti



7
  1. Pig-latin è lo stile del flusso di dati, è più adatto per l'ingegnere del software. Mentre sql è più adatto a persone analitiche che si abituano a sql. Per attività complesse, per l'alveare è necessario creare manualmente una tabella temporanea per memorizzare i dati intermedi, ma non è necessario per il maiale.

  2. Pig-latin è adatto a strutture di dati complicate (come un piccolo grafico). C'è una struttura di dati nel maiale chiamata DataBag che è una raccolta di Tuple. A volte è necessario calcolare le metriche che coinvolgono più tuple (esiste un collegamento nascosto tra tuple, in questo caso lo chiamerei grafico). In questo caso, è molto semplice scrivere un UDF per calcolare le metriche che coinvolgono più tuple. Certo, potrebbe essere fatto in alveare, ma non è così conveniente come in un maiale.

  3. A mio avviso, scrivere UDF in maiale è molto più facile che in Hive.

  4. Il maiale non ha supporto per i metadati (o è facoltativo, in futuro potrebbe integrare il catalogo). Hive ha metadati delle tabelle memorizzati nel database.

  5. È possibile eseguire il debug di script di maiale in ambiente locale, ma sarebbe difficile per l'alveare farlo. Il motivo è il punto 3. È necessario impostare i metadati dell'hive nel proprio ambiente locale, richiedendo molto tempo.




4

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

Hive non è un database completo. I vincoli e i limiti di progettazione di Hadoop e HDFS impongono limiti a ciò che Hive può fare.

Hive è più adatto per applicazioni di data warehouse, dove

1) vengono analizzati dati relativamente statici,

2) Non sono richiesti tempi di risposta rapidi e

3) Quando i dati non cambiano rapidamente.

Hive non fornisce le funzionalità cruciali richieste per OLTP, elaborazione delle transazioni online. È più vicino ad essere uno strumento OLAP, Elaborazione analitica online. Pertanto, Hive è più adatto per le applicazioni di data warehouse, in cui un set di dati di grandi dimensioni viene gestito e estratto per approfondimenti, report, ecc.


4

In parole più semplici, Pig è una piattaforma di alto livello per la creazione di programmi MapReduce utilizzati con Hadoop, utilizzando script di maiale elaboreremo la grande quantità di dati nel formato desiderato.

Una volta ottenuti i dati elaborati, questi dati elaborati vengono conservati in HDFS per l'elaborazione successiva per ottenere i risultati desiderati.

Oltre ai dati elaborati memorizzati applicheremo i comandi HIVE SQL per ottenere i risultati desiderati, internamente questo comando sql hive esegue i programmi MAP Reduce.


questa non è davvero un'aggiunta significativa alla base di conoscenza. prova ad aggiungere ulteriori informazioni
agconti

4

Per dare una panoramica di altissimo livello di entrambi, in breve:

1) Il maiale è un'algebra relazionale su hadoop

2) Hive è un SQL over hadoop (un livello sopra Pig)


Il confronto con l'algebra è interessante
Ravindra babu,

3

Cosa può fare HIVE, cosa impossibile in PIG?

Il partizionamento può essere fatto usando HIVE ma non in PIG, è un modo per bypassare l'output.

Cosa può fare il MAIALE che non è possibile in HIVE?

Riferimenti posizionali - Anche quando non si hanno nomi di campi, possiamo fare riferimento usando la posizione come $ 0 - per il primo campo, $ 1 per il secondo e così via.

E un'altra differenza fondamentale è che PIG non ha bisogno di uno schema per scrivere i valori ma HIVE ha bisogno di uno schema.

È possibile connettersi da qualsiasi applicazione esterna a HIVE utilizzando JDBC e altri, ma non con PIG.

Nota: entrambi vengono eseguiti su HDFS (file system distribuito da hadoop) e le istruzioni vengono convertite in programmi Map Reduce.


3

Quando stiamo usando Hadoopnel senso significa che stiamo provando a un'enorme elaborazione dei dati L'obiettivo finale dell'elaborazione dei dati sarebbe quello di generare contenuti / report da esso.

Quindi è composto internamente da 2 attività principali:

1) Caricamento elaborazione dati

2) Generare contenuto e usarlo per la segnalazione / ecc.

Caricamento / elaborazione dati -> Maiale sarebbe utile in questo.

Questo aiuta come ETL (possiamo eseguire operazioni etl usando script di maiale).

Una volta elaborato il risultato, possiamo utilizzare hive per generare i report in base al risultato elaborato.

Hive: è costruito su hdf per l'elaborazione del magazzino.

Siamo in grado di generare facilmente rapporti ad hoc utilizzando l'alveare dal contenuto elaborato generato da maiale.


1

Il maiale mangia qualsiasi cosa! Ciò significa che può consumare dati non strutturati.

Hive richiede uno schema.


1

Maiale è utile per i tipi di carichi di lavoro ETL in generale. Ad esempio un insieme di trasformazioni che devi fare ogni giorno ai tuoi dati.

Hive brilla quando devi eseguire query ad hoc o vuoi semplicemente esplorare i dati. A volte può fungere da interfaccia per il tuo livello di visualizzazione (tableau / Qlikview).

Entrambi sono essenziali e hanno scopi diversi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.