2012-06-27 20 views
6

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 
+0

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

+0

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

+0

@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

Antwort

1

Ich hatte ähnliche Probleme in der Vergangenheit. Viel Zeit mit HBase/Hadoop werden Sie Fehlermeldungen sehen, die nicht auf das wahre Problem hinweisen, das Sie haben, damit Sie kreativ sein müssen.

Dies ist, was ich gefunden habe, und es kann oder auch nicht für Sie gilt:

Sind Sie eine Menge von Verbindungen zu einer Tabelle öffnen und schließen Sie sie, wenn Sie fertig? Dies kann in einem MR-Job passieren, wenn Sie Scans/Gets im Mapper oder Reducer durchführen (was ich glaube nicht, dass Sie es tun möchten, wenn es vermieden werden kann).

Auch manchmal bekomme ich ähnliche Probleme, wenn mein Mapper oder Reducer in die gleiche Zeile viel schreibt. Versuchen Sie, Ihre Schreibvorgänge zu verteilen oder Schreibvorgänge zu minimieren, um dieses Problem zu verringern.

Es würde auch helfen, wenn Sie ins Detail über die Art Ihres MR-Jobs gingen. Was tut es? Hast du Beispielcode?

+0

Es ist ein Job, der OpenNLPs Satzteiler verwendet, um einen sehr großen Korpus von Sätzen aus einem bescheidenen Korpus von Dokumenten zu erzeugen. Jeder Satz erhält eine eigene Zeile in der Ausgabetabelle, und da die Quelldokumente ebenfalls in einer HBase-Tabelle enthalten sind, richte ich nur einen Scan ein und richte den Job mit TableMapReduceUtil ein, um diesen Scan zu verwenden, meine Unterklasse von TableMapper (die Puts erzeugt) und IdentityTableReducer. Es gab ein Jira-Problem in Verbindung mit ZK-Verbindungen, die bei der Verwendung von TableOutputFormat durchgesickert sind. Ich denke, das ist es, womit ich mich auseinandersetzen muss. – Cyranix

2

Es stellte sich heraus, dass ich die niedrige Standardgrenze von ZooKeeper (die meiner Meinung nach in aktuelleren Versionen erhöht wurde) erreichte. Ich hatte versucht, eine höhere Grenze in hbase-site.xml Einstellung:

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

Aber es scheint nicht zu funktionieren, es sei denn es wurde angegeben in zoo.cfg (auch?):

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

Die Der Job kann jetzt stundenlang ausgeführt werden und meine ZK-Client-Liste erreicht einen Höchstwert von 12 Einträgen.

0

prüfen folgende Parameter:

zookeeper Session-Timeout (zookeeper.session.timeout) -> versuchen

zookeeper Ticker (Ticker) zu erhöhen und prüfen -> Anstieg und Test

Prüfung für ulimit (linux-Befehlsprüfung für den Benutzer, unter dem Sie hadoop/hbase ausgeführt wird) specificat

im ulimit-Fall müssen Sie Parameter in etwas höherem Wert folgen.

geöffneten Dateien machen diese etwas 32K oder mehr

max Benutzerprozesse dies als unbegrenzt machen

nachdem ich diese Änderungen überprüfen höchstwahrscheinlich der Fehler

Verwandte Themen