2013-05-17 11 views
5

Sto usando Sqoop versione 1.4.2 e database Oracle.Come trovare il numero ottimale di mapper durante l'importazione e l'esportazione di Sqoop?

Quando si esegue il comando Sqoop. Ad esempio come questo:

./sqoop import        \ 
    --fs <name node>       \ 
    --jt <job tracker>      \ 
    --connect <JDBC string>     \ 
    --username <user> --password <password> \ 
    --table <table> --split-by <cool column> \ 
    --target-dir <where>      \ 
    --verbose --m 2 

Possiamo specificare --M - quanti compiti parallelo vogliamo Sqoop a correre (anche essi possono accedere ai database allo stesso tempo). Stesso opzione è disponibile per l'esportazione ./sqoop < ...>

C'è qualche euristica (probabilmente in base alle dimensioni dei dati) che contribuirà a indovinare che cosa è il numero ottimale di compito da usare?

Grazie!

+2

No, dipende dal numero di CPU/core del server del database, dalla quantità di accesso al disco richiesta da ciascuna attività, dalla velocità di tali dischi, dalla quantità di ciascuna attività eseguita nella RAM, dall'importo di RAM, la quantità di spazio extra temporaneo occupato da ciò che non è possibile archiviare nella RAM, il filesystem in uso, la quantità di RAM assegnata al sistema operativo rispetto al database, potenzialmente la dimensione degli switch e dei cavi di rete e il numero di processi aggiuntivi in ​​esecuzione sul database e/o sul server e su come tutti i suddetti fattori li riguardano, ecc. Provalo. – Ben

+2

@ Ben - Lo invierò come risposta –

risposta

0

In "Hadoop: la guida definitiva", spiegano che quando si imposta la mappa massima/l'attività di riduzione su ogni Tasktracker si considera il processore e i relativi core per definire il numero di attività per il cluster, quindi applicarei lo stesso logica a questo e dare un'occhiata al numero di processi che puoi eseguire sul tuo processore (Conteggio HyperTreading, Core) e impostare il tuo --m su questo valore - 1 (lasciare uno aperto per altre attività che possono apparire durante il esportazione), ma questo è solo se si dispone di un set di dati di grandi dimensioni e si desidera eseguire l'esportazione in modo tempestivo.

Se non si dispone di un grande insieme di dati, poi ricordare che l'output sarà il valore del numero --M di file, quindi se si esporta una tabella di 100 righe, si consiglia di impostare --M a 1 per mantenere tutti i dati localizzati in un unico file.

+0

Se si sta andando a downvotare, per favore lasciatemi delle critiche costruttive per migliorare la mia risposta. – Engineiro

+0

Questa è la risposta a domande diverse. Non l'ho più votato. Ma il problema con sqoop è che colpisce ogni database dabase. Quindi, se avessi 30 macchine con permetti a 2 mapper rep ciascuna e io uso -m 60 il database sarà molto scontento :) – Bohdan

+0

Non lo imposteresti su 60. Lo imposteresti su 2 ... poiché questa impostazione si applica a ciascuna macchina nel cluster. Quindi ogni macchina utilizzerebbe due mapper per un totale di 60 mappatori distribuiti, a seconda che l'API sqoop lo consideri come suggerimento o impostazione difficile. – Engineiro

4

Questo è preso da Apache Sqoop Cookbook di O'Reilly Media, e sembra essere la risposta più logica.

Il numero ottimale di mapper dipende da molte variabili: è necessario prendere in considerazione il tipo di database, l'hardware utilizzato per il server di database e l'impatto con altre richieste che il database deve servire. Non esiste un numero ottimale di mapper che funzioni per tutti gli scenari. Invece, sei incoraggiato a sperimentare per trovare il grado ottimale di parallelismo per il tuo ambiente e il caso d'uso. È una buona idea iniziare con un piccolo numero di mapper, che si sta lentamente espandendo, piuttosto che iniziare con un gran numero di mapper, che si sta facendo strada verso il basso.

Problemi correlati