2013-04-25 13 views
5

Sto lavorando alla creazione di un cluster hadoop in cui i nodi sono tutti abbastanza eterogenei, cioè ognuno ha un diverso numero di core. Attualmente ho modificare manualmente il mapred-site.xml su ogni nodo di compilare {cores}:Imposta automaticamente il numero massimo di attività mappa per nodo sul numero di core?

<property> 
    <name>mapred.tasktracker.map.tasks.maximum</name> 
    <value>{cores}</value> 
</property> 

C'è un modo più semplice per questo quando aggiungo nuovi nodi? La maggior parte degli altri valori sono di default e le attività di mappa massime sono l'unica cosa che cambia da nodo a nodo.

risposta

3

Se sei a tuo agio con un po 'di scripting allora quanto segue vi darà il numero di' trasformatori per ogni macchina (che significano cose diverse per diverse architetture, ma è più o meno quello che si vuole):

cat /proc/cpuinfo | grep processor | wc -l 

Quindi è possibile utilizzare sed o equivalente per aggiornare il file mapred-site.xml in base all'output di questo.

Quindi mettere tutto questo insieme:

CORES=`cat /proc/cpuinfo | grep processor | wc -l` 
sed -i "s/{cores}/$CORES/g" mapred-site.xml 

una nota, ma probabilmente non si vuole configurare il numero di mapper e il numero di riduttori di ciascuno per il numero di core, tanto più che probabilmente voglio dividerli tra i due tipi, e avere un core spare per il nodo dati e task tracker, ecc.

+0

Grazie. Sapevo di poter eseguire una sorta di script per farlo, ma speravo in una sorta di variabile hadoop che potrei inserire. O almeno un valore predefinito più ragionevole di 2. – job

+0

Puoi modificare il codice sorgente di TaskTracker per interpretare un formula in mapred-site.xml ('$ CORES/2-1' per esempio) - ma preferibilmente dovresti trovare anche un modo Java per determinare il numero di core. –

Problemi correlati