Ich führe einen Hadoop MapReduce-Job auf meinem lokalen Rechner (pseudo-verteilt) aus, der HBase liest und in HBase schreibt. Ich erhalte zeitweise einen Fehler, der den Job stört, auch wenn der Computer in Ruhe gelassen wird und keine anderen wichtigen Prozesse ausgeführt werden (siehe Protokoll unten). Die Ausgabe von einem ZooKeeper Dump nach dem Job hat wie folgt aussieht gestorben, mit der Anzahl der Kunden nach einem gescheiterten Laufe wachsen:ConnectionLoss für/hbase + Verbindung durch Peer zurückgesetzt?
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)
Mein Entwicklungsteam derzeit die CDH3U0 Verteilung verwenden, so HBase 0.90.1 - Ist das ein Problem, das in einer neueren Version gelöst wurde? Oder sollte ich etwas mit dem aktuellen Setup machen können? Sollte ich nur erwarten, ZK neu zu starten und Kunden regelmäßig zu töten? Ich bin offen für jede vernünftige Option, die es meinen Jobs erlaubt, konsequent zu vervollständigen.
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
Ich habe Verlust gesehen Verbindung verschwunden sein, wenn es ist zu viel IO für die gegebene Maschine. Sie können mehr abbeißen, als Sie mit hbase/zookeeper/hadoop M/R und anderen Dingen auf Ihrem Rechner kauen können. Hast du Ganglien installiert? Es kann Ihnen zeigen, wie viel Verarbeitung Sie verwenden und wenn Sie eine IO-Wand oder Thrashing treffen. – Mike
Eine Änderung der ursprünglichen Beschreibung: Die Anzahl der Clientverbindungen hat nach einem Jobausfall nicht ständig zugenommen. Gemäß dem Bug, der auf dem HBase Jira beschrieben wird, kann es passieren, dass der Job erfolgreich abgeschlossen wird. – Cyranix
@Mike Ich habe keine anderen Prozesse von signifikanter Konsequenz zur gleichen Zeit ausgeführt, aber es ist eine kluge Idee, Systemressourcen im Auge zu behalten. Glücklicherweise scheint meine Maschine für die anstehende Aufgabe stark genug zu sein. – Cyranix