2012-06-27 21 views
6

Estoy ejecutando un trabajo Hadoop MapReduce en mi máquina local (pseudo-distribuido) que lee y escribe en HBase. Recibo un error de forma intermitente que interrumpe el trabajo, incluso cuando la computadora se queda sola sin que se ejecuten otros procesos importantes. Consulte el registro a continuación. La salida de un volquete ZooKeeper después de que el trabajo ha muerto tiene este aspecto, con el número de clientes en crecimiento después de una carrera fallado:ConnectionLoss for/hbase + Connection reset by 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) 

Mi equipo de desarrollo está utilizando la distribución CDH3U0, por lo HBase 0.90.1 - ¿Es esto un problema resuelto en una versión más reciente? ¿O debería haber algo que pueda hacer con la configuración actual? ¿Debo esperar reiniciar ZK y matar clientes periódicamente? Estoy abierto a cualquier opción razonable que permita que mis trabajos se completen consistentemente.

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

que he visto pérdida de conexión cuando hay es demasiado IO para la máquina dada. Puede estar mordiendo más de lo que puede masticar con hbase/zookeeper/hadoop M/R y otras cosas en su máquina. ¿Tienes ganglios instalados? Puede mostrarte la cantidad de procesamiento que estás usando y si estás golpeando una pared IO o golpeando. – Mike

+0

Una enmienda a la descripción inicial: el número de conexiones de clientes no aumentó permanentemente después de una falla en el trabajo. De acuerdo con el error descrito en HBase Jira, puedo ver que esto suceda si el trabajo se completa con éxito. – Cyranix

+0

@Mike No estaba ejecutando ningún otro proceso de consecuencias significativas al mismo tiempo, pero es una buena idea controlar los recursos del sistema. Afortunadamente, mi máquina parece ser lo suficientemente carnosa para la tarea en cuestión. – Cyranix

Respuesta

1

He tenido problemas similares a esto en el pasado. Mucho tiempo con HBase/Hadoop verá mensajes de error que no señalan el verdadero problema que tiene, por lo que debe ser creativo con él.

Esto es lo que he encontrado y que puede o no puede aplicarse en su caso:

¿Está la apertura de una gran cantidad de conexiones a una mesa y se les cierre cuando termine? Esto puede suceder en un trabajo de MR si está ejecutando Scans/Gets en el Mapper o Reducer (que no creo que quiera hacer si se puede evitar).

Además, a veces recibo problemas similares si mi Mapper o Reducer escribe en la misma fila MUCHO. Intente distribuir sus escrituras o minimizar escrituras para reducir este problema.

También ayudaría si entrara en detalles sobre la naturaleza de su trabajo de MR. ¿Qué hace? ¿Tienes código de ejemplo?

+0

Es un trabajo que utiliza el separador de oraciones de OpenNLP para generar un gran corpus de oraciones de un modesto corpus de documentos. Cada oración obtiene su propia fila en la tabla de salida, y como los documentos fuente también están en una tabla HBase, configuré un escaneo y configuré el trabajo con TableMapReduceUtil para usar ese escaneo, mi subclase de TableMapper (que genera Pudritos) e IdentityTableReducer. Sin embargo, hubo un problema de Jira relacionado con las conexiones de ZK al usar TableOutputFormat, así que creo que eso es a lo que me enfrenta. – Cyranix

2

Resulta que estaba llegando al límite predeterminado bajo de ZooKeeper (que creo que ha aumentado en versiones más actuales). Había intentado establecer un límite superior en hbase-site.xml:

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

pero no parecen funcionar a menos que sea especificado en zoo.cfg (también?):

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

El el trabajo ahora puede ejecutarse durante horas y mi lista de clientes ZK alcanza su máximo en 12 entradas.

0

Comprobar si los parámetros siguientes:

sesión cuidador del zoológico de tiempo de espera (zookeeper.session.timeout) -> tratar de aumentar y comprobar

empleado del zoológico ticktime (tickTime) -> aumento y la prueba

cheque para ulimit (control de comandos de Linux para el usuario con el que está ejecutando hadoop/hbase) specificat

en el caso ulimit debe tener el parámetro followin algo a un valor más alto.

archivos abiertos hacen de este un tanto 32K o más

procesos de usuario máx hacer esto como ilimitada

después de hacer estos cambios verifican muy probablemente el error se ha ido

Cuestiones relacionadas