2012-06-27 18 views
6

Sto eseguendo un lavoro Hadoop MapReduce sul mio computer locale (pseudo-distribuito) che legge e scrive in HBase. Ricevo a intermittenza un errore che interrompe il lavoro, anche quando il computer viene lasciato inutilizzato senza altri processi significativi in ​​esecuzione - vedere il registro di seguito. L'uscita da una discarica ZooKeeper dopo che il lavoro è morto aspetto come questo, con il numero di clienti in crescita dopo una corsa fallito:ConnectionLoss per/hbase + Connessione ripristinata dal peer?

HBase is rooted at /hbase 
Master address: SS-WS-M102:60000 
Region server holding ROOT: SS-WS-M102:60020 
Region servers: 
SS-WS-M102:60020 
Quorum Server Statistics: 
ss-ws-m102:2181 
    Zookeeper version: 3.3.3-cdh3u0--1, built on 03/26/2011 00:20 GMT 
    Clients: 
    /192.168.40.120:58484[1]\(queued=0,recved=39199,sent=39203) 
    /192.168.40.120:37129[1]\(queued=0,recved=162,sent=162) 
    /192.168.40.120:58485[1]\(queued=0,recved=39282,sent=39316) 
    /192.168.40.120:58488[1]\(queued=0,recved=39224,sent=39226) 
    /192.168.40.120:58030[0]\(queued=0,recved=1,sent=0) 
    /192.168.40.120:58486[1]\(queued=0,recved=39248,sent=39267) 

mio team di sviluppo sta attualmente utilizzando la distribuzione CDH3U0, così HBase 0.90.1 - è questo un problema risolto in una versione più recente? O dovrebbe esserci qualcosa che posso fare con l'attuale configurazione? Devo solo aspettare di riavviare ZK e uccidere periodicamente i clienti? Sono aperto a qualsiasi opzione ragionevole che consenta al mio lavoro di completare in modo coerente.

2012-06-27 13:01:07,289 INFO org.apache.zookeeper.ClientCnxn: Opening socket connection to server SS-WS-M102/192.168.40.120:2181 
2012-06-27 13:01:07,289 INFO org.apache.zookeeper.ClientCnxn: Socket connection established to SS-WS-M102/192.168.40.120:2181, initiating session 
2012-06-27 13:01:07,290 WARN org.apache.zookeeper.ClientCnxn: Session 0x0 for server SS-WS-M102/192.168.40.120:2181, unexpected error, closing socket connection and attempting reconnect 
java.io.IOException: Connection reset by peer 
    at sun.nio.ch.FileDispatcher.read0(Native Method) 
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21) 
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:202) 
    at sun.nio.ch.IOUtil.read(IOUtil.java:169) 
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243) 
    at org.apache.zookeeper.ClientCnxn$SendThread.doIO(ClientCnxn.java:858) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1130) 
[lines above repeat 6 more times] 
2012-06-27 13:01:17,890 ERROR org.apache.hadoop.hbase.mapreduce.TableInputFormat: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:991) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.setupZookeeperTrackers(HConnectionManager.java:302) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:293) 
    at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:156) 
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:167) 
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:145) 
    at org.apache.hadoop.hbase.mapreduce.TableInputFormat.setConf(TableInputFormat.java:91) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:605) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:322) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1115) 
    at org.apache.hadoop.mapred.Child.main(Child.java:262) 
Caused by: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:147) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:989) 
    ... 15 more 
Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:90) 
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:42) 
    at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:637) 
    at org.apache.hadoop.hbase.zookeeper.ZKUtil.createAndFailSilent(ZKUtil.java:902) 
    at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:133) 
    ... 16 more 
+0

Ho visto la perdita di connessione quando ci è troppo IO per la macchina data. Potresti stare mordendo più di quanto puoi masticare con hbase/zookeeper/hadoop M/R e altre cose sulla tua macchina. Hai dei gangli installati? Potrebbe mostrarti la quantità di elaborazione che stai utilizzando e se stai colpendo un IO wall o thrashing. – Mike

+0

Una modifica alla descrizione iniziale: il numero di connessioni client non è aumentato in modo permanente dopo l'errore del processo. Secondo il bug descritto su HBase Jira, potrei vedere questo succedere se il lavoro si conclude con successo. – Cyranix

+0

@Mike Non stavo realmente eseguendo altri processi di conseguenze significative allo stesso tempo, ma è una buona idea tenere sotto controllo le risorse di sistema. Fortunatamente la mia macchina sembra abbastanza robusta per il compito da svolgere. – Cyranix

risposta

1

Ho avuto problemi simili a questo in passato. Un sacco di tempo con HBase/Hadoop vedrai messaggi di errore che non puntano al vero problema che stai avendo, quindi devi essere creativo con esso.

Questo è quello che ho trovato e si può o potrebbe non essere applicabile a voi:

Si sta aprendo un sacco di connessioni a un tavolo e stanno li chiudendo una volta terminato? Questo può accadere in un lavoro MR se stai eseguendo Scansioni/Ottiene nel Mapper o nel Reducer (che non penso che tu voglia fare se può essere evitato).

Inoltre, a volte ho problemi simili se il mio Mapper o Reducer sta scrivendo sulla stessa riga MOLTO. Prova a distribuire le tue scritture o minimizza le scritture per ridurre il problema.

Sarebbe anche d'aiuto se andassi nei dettagli sulla natura del tuo lavoro MR. Che cosa fa? Hai un codice di esempio?

+0

È un lavoro che utilizza lo splitter di frase di OpenNLP per generare un corpus di frasi molto grande da un corpus di documenti modesto. Ogni frase ottiene la propria riga nella tabella di output e, poiché i documenti di origine sono anche in una tabella HBase, ho appena impostato una scansione e impostato il lavoro con TableMapReduceUtil per utilizzare tale scansione, la mia sottoclasse di TableMapper (che genera Puts) e IdentityTableReducer. Tuttavia, c'è stato un problema con Jira relativo alle connessioni ZK trapelate quando si utilizza TableOutputFormat, quindi penso che sia quello contro cui mi trovo. – Cyranix

2

Si scopre che stavo colpendo il limite basso predefinito di ZooKeeper (che credo sia stato aumentato in più versioni correnti). Avevo provato a fissare un limite superiore in HBase-site.xml:

<property> 
    <name>hbase.zookeeper.property.maxClientCnxns</name> 
    <value>35</value> 
</property> 

ma non ha sembra funzionare meno che non era specificato nel zoo.cfg (anche?):

# can put this number much higher if desired 
maxClientCnxns=35 

Il ora il lavoro può essere eseguito per ore e il mio elenco clienti ZK raggiunge 12 voci.

0

Controllare seguenti parametri:

sessione Zookeeper timeout (zookeeper.session.timeout) -> cercare di aumentare e verificare

Zookeeper ticktime (tickTime) -> aumento e la prova

controllo per ulimit (controllo del comando linux per l'utente con cui hasdoop/hbase è in esecuzione) specificat

nel caso ulimit devi avere un parametro un po 'più alto.

file aperti fanno di questo un po '32K o più

processi utente max rendono questo come illimitata

dopo aver fatto questi cambiamenti verificano molto probabilmente l'errore sarà andato

Problemi correlati