Differenza tra maiale e hive? Perché entrambi?

Il mio background – 4 settimane nel mondo Hadoop. Doppiato un po ‘in Hive, Pig e Hadoop usando la VM Hadoop di Cloudera. Ho letto il documento di Google su Map-Reduce e GFS ( link PDF ).

Lo capisco-

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

Dai un’occhiata a questo post di Alan Gates, Pig architect di Yahoo !, che mette a confronto quando usa un SQL come Hive piuttosto che Pig. Fa un caso molto convincente sull’utilità di un linguaggio procedurale come Pig (vs SQL dichiarativo) e la sua utilità per i progettisti di dataflow.

Hive è stato progettato per fare appello a una comunità che ha familiarità con SQL. La sua filosofia era che non abbiamo bisogno di un altro linguaggio di scripting. Hive supporta la mappa e riduce gli script di trasformazione nella lingua di scelta dell’utente (che può essere incorporata all’interno delle clausole SQL). È ampiamente utilizzato su Facebook da analisti che si trovano a proprio agio con SQL e con la programmazione di minatori di dati in Python. Gli sforzi di compatibilità SQL in Pig sono stati abbandonati AFAIK – quindi la differenza tra i due progetti è molto chiara.

Supportare la syntax SQL significa anche che è ansible 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 inoltre iniziando ad aggiungere il supporto per gli indici che dovrebbero consentire il supporto per le query drill-down comuni in tali ambienti.

Infine – questo non è pertinente alla domanda direttamente – Hive è un framework per l’esecuzione di query analitiche. Mentre il suo uso dominante è quello di interrogare file flat, non c’è motivo per cui non possa interrogare altri negozi. Attualmente Hive può essere utilizzato per interrogare i dati memorizzati in Hbase (che è un archivio di valori-chiave come quelli trovati nell’intestino della maggior parte degli RDBMS) e il progetto HadoopDB ha utilizzato Hive per interrogare un livello RDBMS federato.

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

Parla specificamente di Pig vs Hive e quando e dove sono impiegati in Yahoo. Ho trovato questo molto perspicace. Alcune note interessanti:

Sulle modifiche / aggiornamenti incrementali ai set di dati:

Invece, unirsi contro i nuovi dati incrementali e utilizzare i risultati insieme ai risultati del precedente join completo è l’approccio corretto. Questo richiederà solo pochi minuti. Le operazioni di database standard possono essere implementate in questo modo incrementale in Pig Latin, rendendo Pig un valido strumento per questo caso d’uso.

Sull’utilizzo di altri strumenti tramite streaming:

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

Sull’utilizzo 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 di utilizzo di SQL per gran parte della sua storia. Ha i giusti costrutti per supportare i tipi di query e strumenti che gli analisti vogliono utilizzare. Ed è già in uso sia dagli strumenti che dagli utenti nel 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.

Dai un’occhiata a Hiv Comparison di Pig Vs in un guscio di noce da un articolo “dezyre”

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

Alcune differenze:

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

  2. Hive è utilizzato per la segnalazione e il PIG per la programmazione

  3. Hive è usato come SQL dichiarativo e PIG come linguaggio procedurale

  4. Hive supporta le partizioni e PIG no

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

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

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

  8. Pig supporta anche funzionalità aggiuntive di COGROUP per l’esecuzione di join esterni ma l’hive no. Ma sia Hive & PIG possono unirsi, ordinare e ordinare dynamicmente.

Credo che la vera risposta alla tua domanda sia che sono / erano progetti indipendenti e che non c’era un objective coordinato centralmente. Si trovavano in spazi diversi nelle prime fasi e sono cresciuti fino a sovrapporsi con il tempo con l’espansione di entrambi i progetti.

Parafrasato dal libro di Hadoop O’Reilly:

Maiale: un linguaggio e un ambiente di dataflow per l’esplorazione di set di dati di grandi dimensioni.

Hive: un data warehouse distribuito

È ansible ottenere risultati simili con le query su maiale / hive. La principale differenza sta nell’approccio alla comprensione / scrittura / creazione di query.

Il maiale tende a creare un stream di dati: piccoli passi dove in ognuno si fa 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 (Pig può essere più facile per qualcuno che non ha avuto precedenti esperienze con SQL)

Vale anche la pena notare che per Hive è ansible interfacciare con i dati (Beeswax per HUE o interfaccia web Hive) e fornisce metastore per informazioni sui dati (schema, ecc.) Utili come informazioni centrali sui tuoi dati.

Io uso sia Hive che Pig, per query diverse (io uso quella in cui posso scrivere query più velocemente / più facilmente, lo faccio in questo modo per lo più per query ad-hoc) – possono usare gli stessi dati di un input. Ma attualmente sto facendo molto del mio lavoro con Beeswax.

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

Hive, che è basato su RDBMS, richiede che i dati vengano importati (o caricati) per primi e successivamente possano essere elaborati. Pertanto, se si utilizzava Hive per lo streaming di dati, è necessario continuare a riempire i bucket (oi file) e utilizzare l’hive su ciascun bucket pieno , mentre si utilizzano altri bucket per conservare i dati appena arrivati.

Anche il maiale usa una valutazione pigra. Permette una maggiore facilità di programmazione e si può usare per analizzare i dati in modi diversi con maggiore libertà rispetto a un linguaggio simile a SQL come Hive. Quindi, se davvero volevi analizzare matrici o pattern in alcuni dati non strutturati che avevi, e volevi fare calcoli interessanti su di loro, con Pig puoi andare a 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 di un linguaggio RDBMS amichevole come Hive.

Pig si adatta bene alla parallelizzazione e quindi ha un vantaggio per i sistemi in cui i set di dati sono enormi, cioè nei sistemi in cui si è più interessati al throughput dei risultati rispetto alla latenza (il tempo per ottenere un particolare dato di risultato).

Leggi la differenza tra PIG e HIVE in questo link.

http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features

Tutti gli aspetti sono dati. Se sei nella confusione da scegliere, allora devi vedere quella pagina web.

Hive Vs Pig-

Hive è un’interfaccia SQL che consente agli utenti di sql savvy o altri strumenti come Tableu / Microstrategy / qualsiasi altro strumento o linguaggio con interfaccia sql.

PIG è più simile a una pipeline ETL … con comandi passo passo come la dichiarazione delle variabili, il looping, l’iterazione, le dichiarazioni condizionali ecc.

Preferisco scrivere script su Pig su hive QL quando voglio scrivere una logica complessa passo dopo passo. Quando mi sento a mio agio a scrivere un singolo sql per estrarre i dati, voglio usare Hive. per hive è necessario definire la tabella prima di eseguire le query (come si fa in RDBMS)

Lo scopo di entrambi sono diversi ma sotto la cappa, entrambi fanno lo stesso, convertire in map ridurre i programmi. Anche la comunità open source Apache aggiunge sempre più funzionalità a entrambi i progetti

  1. Pig-latin è lo stile del stream di dati, è più adatto per l’ingegnere del software. Mentre sql è più adatto per la persona di analisi che si abitua a SQL. Per attività complesse, per l’hive è necessario creare manualmente una tabella temporanea per memorizzare i dati intermedi, ma non è necessaria per il maiale.

  2. Pig-latin è adatto per una struttura dati complessa (come un piccolo grafico). C’è una struttura dati in maiale chiamata DataBag che è una raccolta di Tuple. A volte è necessario calcolare le metriche che coinvolgono più tuple (c’è un collegamento nascosto tra le tuple, in questo caso lo chiamerei grafico). In questo caso, è molto facile scrivere una UDF per calcolare le metriche che coinvolgono più tuple. Ovviamente potrebbe essere fatto nell’hive, ma non è così conveniente come nel maiale.

  3. Scrivere la UDF nel maiale è molto più facile che in Hive secondo me.

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

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

Ho trovato sotto il link utile per esplorare come e quando usare HIVE e PIG.

http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/

In parole più semplici, Pig è una piattaforma di alto livello per la creazione di programmi MapReduce utilizzati con Hadoop, utilizzando gli 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.

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

Dal link: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-adable-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 le applicazioni di data warehouse, dove

1) Vengono analizzati dati relativamente statici,

2) I tempi di risposta rapidi non sono richiesti e

3) Quando i dati non cambiano rapidamente.

Hive non fornisce funzionalità cruciali richieste per OLTP, Online Transaction Processing. È più vicino all’essere uno strumento OLAP, l’elaborazione analitica online. Quindi, Hive è la soluzione ideale per le applicazioni di data warehouse, in cui un set di dati di grandi dimensioni viene gestito e estratto per approfondimenti, report, ecc.

Per dare una panoramica ad alto livello di entrambi, in breve:

1) Il maiale è un’algebra relazionale rispetto a hadoop

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

Cosa può fare HIVE che non è ansible in PIG?

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

Cosa può fare il PIG che non è ansible in HIVE?

Riferimento di posizione – 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.

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

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

Quando utilizziamo Hadoop nel senso significa che stiamo tentando di eseguire un’enorme elaborazione dei dati. L’objective finale dell’elaborazione dei dati sarebbe quello di generare contenuti / report al di fuori di esso.

Quindi internamente è costituito da 2 attività prime 1) Caricamento elaborazione dati 2) Generazione di contenuti e utilizzo per la segnalazione / ecc.

Caricamento / Data Procesing -> Pig sarebbe utile in esso. Questo aiuta come ETL (possiamo eseguire operazioni di etl usando gli script di maiale). Una volta che il risultato è stato elaborato, possiamo usare l’hive per generare i report in base al risultato elaborato.

Hive: è costruito su hdf per l’elaborazione del magazzino. NOI possiamo generare facilmente report ad hoc utilizzando l’hive dal contenuto elaborato generato dal maiale.

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

Hive richiede uno schema.

Il maiale è utile per il tipo di carichi di lavoro ETL in generale. Per esempio serie di trasformazioni che devi fare ai tuoi dati ogni giorno.

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

Entrambi sono essenziali e hanno uno scopo diverso.