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
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. –
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