2013-07-30 13 views
21

Ho una conoscenza di base su cosa sono le astrazioni Pig, Hive. Ma non ho un'idea chiara sugli scenari che richiedono una riduzione di Hive, Pig o di mappe native.Pig vs Hive vs Native Map Riduci

Ho esaminato alcuni articoli che in sostanza indicano che Hive è per l'elaborazione strutturata e Pig è per l'elaborazione non strutturata. Quando abbiamo bisogno di ridurre la mappa nativa? Puoi indicare alcuni scenari che non possono essere risolti usando Pig o Hive ma nella mappa nativa riduci?

risposta

18

logica ramificazione complesso che ha un sacco di nidificato se .. altro .. strutture è più facile e veloce da implementare in standard MapReduce, per l'elaborazione di dati strutturati è possibile utilizzare Pangool, semplifica anche cose come ISCRIVITI . Inoltre, MapReduce fornisce il controllo completo per ridurre al minimo il numero di lavori MapReduce richiesti dal flusso di elaborazione dati, il che si traduce in prestazioni. Ma richiede più tempo per codificare e introdurre cambiamenti.

Apache maiale è un bene per i dati strutturati troppo, ma il suo vantaggio è la possibilità di lavorare con i sacchetti di dati (tutte le righe che sono raggruppati su un tasto), è più semplice da implementare cose come:

  1. Ottieni gli elementi N migliori per ciascun gruppo;
  2. Calcolare il totale per ogni gruppo e di mettere quel totale contro ogni riga del gruppo;
  3. Utilizzare i filtri Bloom per le ottimizzazioni JOIN;
  4. supporto multiquery (è quando PIG cerca di ridurre al minimo il numero sulla MapReduce Lavoro facendo più cose in un unico lavoro)

Hive è più adatto per le query ad-hoc, ma il suo vantaggio principale è che ha un motore che memorizza e suddivide i dati. Ma le sue tabelle possono essere lette da Pig o MapReduce standard.

Un'altra cosa, Hive e Pig non sono adatti per lavorare con i dati gerarchici.

+1

Ulteriori , se devi scrivere molte UDAF in Pig/Hive per risolvere il tuo problema, è meglio programmare una singola mappa per ridurre il lavoro che fa tutto questo.Nella mia esperienza, una volta preso lo sforzo di codificare una mappa per ridurre il lavoro, in futuro si apportano per lo più semplici modifiche incrementali, principalmente all'interno della mappa/metodo di riduzione man mano che le regole aziendali si evolvono. Quando hai nuovi membri nel team, vorrai anche che capiscano le sfumature della mappa ridotte prima che inizino a fare cose serie con maiale/alveare e il tuo codice MR funge da riferimento per loro. –

+1

Totalmente d'accordo con il commento. Java MR è un'ottima scelta anche per la prima ondata di lavori ETL, in quanto vi è molta logica di ramificazione e rotazione. Anche il codice java è più facile da testare e talvolta è l'unica scelta se si desidera ottenere il massimo delle prestazioni. Ma molti utenti di Hadoop sono per lo più ex sviluppatori SQL e sono molto riluttanti a scrivere qualsiasi tipo di codice, spesso spendendo troppo impegno nel cercare di risolvere il problema con SQL o script. D'altra parte, gli sviluppatori di applicazioni Java non sono in grado scrivere codice di elaborazione dati efficiente, in quanto non sanno cosa sia l'unire sort. – alexeipab

14

Risposta breve - Abbiamo bisogno di MapReduce quando abbiamo bisogno di un controllo molto approfondito e accurato sul modo in cui vogliamo elaborare i nostri dati. A volte, non è molto comodo esprimere ciò di cui abbiamo bisogno esattamente in termini di query Pig e Hive.

Non dovrebbe essere totalmente impossibile, cosa è possibile utilizzare MapReduce, attraverso Pig o Hive. Con il livello di flessibilità offerto da Pig e Hive puoi in qualche modo riuscire a raggiungere il tuo obiettivo, ma potrebbe non essere così agevole. Potresti scrivere UDF o fare qualcosa e ottenere ciò.

Non esiste una chiara distinzione in quanto tale tra l'uso di questi strumenti. Dipende totalmente dalla tua particolare situazione d'uso. Sulla base dei tuoi dati e del tipo di elaborazione, devi decidere quale strumento si adatta meglio alle tue esigenze.

Edit:

Qualche tempo fa ho avuto un caso d'uso in cui ho dovuto raccogliere dati sismici ed eseguire alcune analisi su di esso. Il formato dei file contenenti questi dati era piuttosto strano. Una parte dei dati era codificata EBCDIC, mentre il resto dei dati era in formato binario. Era fondamentalmente un file binario piatto senza delimitatori come \ n o qualcosa del genere. Ho avuto difficoltà a trovare un modo per elaborare questi file usando Pig o Hive. Di conseguenza ho dovuto sistemarmi con MR. Inizialmente ci è voluto del tempo, ma gradualmente è diventato più fluido dato che MR è davvero veloce una volta che hai pronto il modello base.

Quindi, come ho detto prima, dipende fondamentalmente dal vostro caso d'uso. Ad esempio, iterare su ogni record del set di dati è davvero facile in Pig (solo un foreach), ma cosa succede se hai bisogno di foreach n ?? Quindi, quando hai bisogno di "quel" livello di controllo sul modo in cui devi elaborare i tuoi dati, MR è più adatto.

Un'altra situazione potrebbe essere quando i dati sono gerarchici anziché basati su righe o se i dati sono altamente non strutturati.

Il problema dei metapatterns che coinvolge concatenamento di lavoro e fusione di lavoro è più facile da risolvere utilizzando MR direttamente anziché utilizzare Pig/Hive.

E a volte è molto molto conveniente eseguire un'operazione particolare utilizzando alcuni strumenti xyz rispetto a farlo utilizzando Pig/hive. IMHO, MR si rivela essere meglio anche in tali situazioni. Ad esempio, se hai bisogno di fare delle analisi statistiche sui tuoi BigData, R usato con lo streaming Hadoop è probabilmente l'opzione migliore da seguire.

HTH

+0

Grazie ... puoi fare un esempio? Sarebbe davvero d'aiuto :) – Maverick

+0

Ok .. Ti darò il mio esempio ... Spero che sia d'aiuto. – Tariq

+0

Per indirizzo "ma cosa succede se è necessario foreach n ??" in PIG è possibile utilizzare LIMIT o un LIMIT n nested su un BAG/gruppo, consultare http://stackoverflow.com/questions/14604311/selecting-random-tuple-from-bag/14628763#14628763 dove n == 1 – alexeipab

9

MapReduce:

Strengths: 
     works both on structured and unstructured data. 
     good for writing complex business logic. 

Weakness: 
    long development type 
    hard to achieve join functionality 

Hive:

Strengths: 
    less development time. 
    suitable for adhoc analysis. 
    easy for joins 

Weakness : 
    not easy for complex business logic. 
    deals only structured data. 

Pig

Strengths : 
     Structured and unstructured data. 
     joins are easily written. 

Weakness: 
    new language to learn. 
    converted into mapreduce. 
5

Hive

012.

Pro:

Sql come ragazzi data-base l'amore che. Buon supporto per i dati strutturati. Attualmente lo schema del database di supporto e le viste come la struttura supportano più utenti simultanei, scenari multisessione. Supporto della community più ampio. Hive, Hiver server, Hiver Server2, Impala, Centry già

Contro: Le prestazioni si riducono man mano che i dati diventano più grandi, non tanto da fare, problemi di memoria su flusso. non posso farci molto I dati gerarchici sono una sfida. dati Un-strutturati richiede UDF come componente combinazione di tecniche multiple potrebbe essere un incubo porzioni dinamiche con UTDF in caso di dati di grandi dimensioni, ecc

Pig: Pro: la lingua del flusso di dati in base Grande script.

Contro:

dati Un-strutturati richiede UDF come componente Non è un grande sostegno della comunità

MapReudce: Pro: Dont d'accordo con "difficile da raggiungere unire la funzionalità", se si capisce che tipo di join che vuoi implementare puoi implementare con poche righe di codice. La maggior parte delle volte MR offre prestazioni migliori. Il supporto MR per i dati gerarchici è ottimo specialmente per implementare strutture simili ad albero. Controllo migliore al partizionamento/indicizzazione dei dati. concatenamento di lavoro.

Contro: bisogno di sapere api molto bene per ottenere una migliore ecc prestazioni Codice/debug/mantenere

1

Tutte le cose che possiamo fare con suini e HIVE può essere ottenuto utilizzando MR (a volte sarà tuttavia richiede tempo). PIG e HIVE utilizzano MR/SPARK/TEZ sotto. Quindi tutte le cose che MR può fare o potrebbe non essere possibile in Hive e PIG.

2

Scenarios dove Hadoop Map Reduce è preferito a alveare o PIG

  1. Quando è necessario il driver preciso controllo del programma

  2. Ogni volta che il lavoro richiede l'attuazione di un partizionamento personalizzato

  3. Se esiste già una libreria predefinita di Java Mappers o Reducers for aj ob

  4. Se avete bisogno di una buona quantità di testabilità quando si combinano un sacco di grandi insiemi di dati
  5. Se l'applicazione richiede requisiti di codice legacy che comandano struttura fisica
  6. Se il lavoro richiede l'ottimizzazione in una determinata fase della lavorazione, rendendo il miglior uso di trucchi come in-mapper combinando
  7. Se il lavoro ha qualche utilizzo ingannevole di cache distribuita (replicato join), prodotti trasversali, raggruppamenti o si unisce

Comparison between Map reduce/ Pig/ Hive

A favore di Pig/Hive:

  1. Hadoop MapReduce richiede più sforzo di sviluppo di maiale e Hive.
  2. Gli approcci di codifica di Pig e Hive sono più lenti di un programma Hadoop MapReduce completamente sintonizzato.
  3. Quando si utilizzano Pig e Hive per l'esecuzione di lavori, gli sviluppatori Hadoop non devono preoccuparsi di eventuali discrepanze di versione.
  4. C'è una possibilità molto limitata per lo sviluppatore di scrivere bug di livello java durante la codifica in Pig o Hive.

Dai un'occhiata a questo post per il confronto Pig Vs Hive.

1

Here è il grande confronto. Specifica tutti gli scenari dei casi d'uso.