2013-11-04 9 views
9

Sto provando a eseguire il cluster Hadoop a 3 nodi sul cloud di Windows Azure. Ho completato la configurazione e l'avvio del test. Tutto sembra a posto, tuttavia, dato che usavo OpedJDK che non è consigliato come VM per Hadoop in base a ciò che ho letto, decido di sostituirlo con Oracle Server JVM. Rimossa la vecchia installazione di java con Yum, insieme a tutte le cartelle java in/usr/lib, installata la versione più recente di Oracle JVM, le variabili PATH e JAVA_HOME aggiornate; tuttavia, ora in fase di avvio ricevo i seguenti massegi:Script syntactics sed in script di avvio di hadoop dopo aver reinstallato JVM

sed: -e expression #1, char 6: unknown option to `s' 
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known 
HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known 
Server: ssh: Could not resolve hostname Server: Name or service not known 
VM: ssh: Could not resolve hostname VM: Name or service not known 

e.t.c. (in totale circa 20-30 stringhe con parole che non dovrebbero avere nulla in comune con i nomi degli host)

Per me sembra che stia cercando di passare parte del codice come Nome host a causa di un uso errato di sed nello script di avvio:

 if [ "$HADOOP_SLAVE_NAMES" != '' ] ; then 
    SLAVE_NAMES=$HADOOP_SLAVE_NAMES 
else 
    SLAVE_FILE=${HADOOP_SLAVES:-${HADOOP_CONF_DIR}/slaves} 
    SLAVE_NAMES=$(cat "$SLAVE_FILE" | sed 's/#.*$//;/^$/d') 
fi 

# start the daemons 
for slave in $SLAVE_NAMES ; do 
ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \ 
    2>&1 | sed "s/^/$slave: /" & 
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then 
    sleep $HADOOP_SLAVE_SLEEP 
fi 
done 

Che sembra invariato, quindi la domanda è: in che modo il cambiamento di JVM potrebbe influenzare sed? E come posso risolvere il problema?

+0

'l'opzione sconosciuta a 's'' indica che ci sono troppe barre. Uno dei valori '$ slave 'contiene una barra? –

+0

'$ (cat" $ SLAVE_FILE "| sed 's /#.*$//;/^$/ d')' sigh ... – pfnuesel

+0

Sarebbe ok. Ma l'errore potrebbe accadere qui: 'sed 's/^/$ slave: /" ' –

risposta

15

Quindi ho trovato una risposta a questa domanda: la mia ipotesi era sbagliata, e tutto con sed va bene. Tuttavia, il problema riguardava il modo in cui Oracle JVM funziona con le librerie esterne rispetto a OpenJDK. Ha gettato un'eccezione dove lo script non se lo aspettava, e rovina tutto l'input sed. È possibile risolvere il problema con l'aggiunta seguenti variabili di sistema: HADOOP_COMMON_LIB_NATIVE_DIR che dovrebbe puntare a cartella /lib/native dell'installazione Hadoop e aggiungere -Djava.library.path =/opt/Hadoop/lib a qualunque opzioni hai già una variabile HADOOP_OPTS (nota che/opt/hadoop è la mia cartella di installazione, potresti aver bisogno di cambiarla perché funzioni correttamente). Personalmente aggiungo comandi di esportazione allo script hadoop-env.sh, ma aggiungendolo al file .bash o start-all.sh dovrebbe funzionare allo stesso modo.

+1

Grazie mille per seguire la tua stessa domanda e fornire una risposta così dettagliata! – Olshansk

+0

Sto anche avendo un altro problema durante la configurazione di hadoop 2.x, e lo apprezzerei se potessi dare un'occhiata a questo. http://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-error-on-centos – Olshansk

+0

Per me, l'errore sed si è verificato quando ho usato 'java -1.7.0-openjdk-amd64'. È stato corretto quando l'ho sostituito con 'Oracle jdk1.8.0'. –

Problemi correlati