7

HBase から読み書きするローカル マシン (疑似分散) で Hadoop MapReduce ジョブを実行しています。他の重要なプロセスが実行されていない状態でコンピューターが放置されている場合でも、ジョブを中断するエラーが断続的に発生します。以下のログを参照してください。ジョブが終了した後の ZooKeeper Dump からの出力は次のようになります。実行に失敗した後にクライアントの数が増えています。

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)

私の開発チームは現在、CDH3U0 ディストリビューションを使用しているため、HBase 0.90.1 を使用しています。これは、最近のリリースで解決された問題ですか? または、現在の設定で何かできることはありますか? ZK を再起動して定期的にクライアントを強制終了するだけでよいのでしょうか? 私は、自分の仕事が一貫して完了することを可能にする合理的な選択肢を受け入れます。

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
4

3 に答える 3

2

ZooKeeper のデフォルトの下限に達していたことがわかりました (これは、最新のリリースでは増加していると思います)。hbase-site.xml でより高い制限を設定しようとしました:

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

しかし、zoo.cfg で (また?) 指定されていない限り、動作しないように見えました:

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

ジョブは数時間実行できるようになり、私の ZK クライアント リストは 12 エントリでピークに達しました。

于 2012-06-29T15:50:58.927 に答える
1

次のパラメータを確認します。

Zookeeper セッションのタイムアウト (zookeeper.session.timeout) --> 増やして確認してみてください

Zookeeper ticktime(tickTime) -> 増やしてテスト

ulimit の確認 (hadoop/hbase を実行しているユーザーの Linux コマンド確認) 仕様

ulimit の場合、followin パラメータをいくらか高い値にする必要があります。

ファイルを開くと、これは32K以上になります

最大ユーザープロセスはこれを無制限にします

これらの変更を行った後、おそらくエラーがなくなることを確認してください

于 2013-10-03T11:49:44.640 に答える
1

私は過去にこれに似た問題を抱えていました。HBase/Hadoop では多くの場合、発生している実際の問題を示していないエラー メッセージが表示されるため、工夫を凝らす必要があります。

これは私が見つけたものであり、あなたに当てはまる場合と当てはまらない場合があります。

テーブルへの接続を多数開いていて、終了したらそれらを閉じていますか? これは、Mapper または Reducer で Scans/Gets を実行している場合に MR ジョブで発生する可能性があります (回避できる場合は実行したくないと思います)。

また、マッパーまたはリデューサーが同じ行に大量に書き込みを行っている場合、同様の問題が発生することがあります。この問題を軽減するには、書き込みを分散するか、書き込みを最小限に抑えるようにしてください。

また、MR の仕事の性質について詳しく説明していただけると助かります。それは何をするためのものか?サンプルコードはありますか?

于 2012-06-28T21:35:27.130 に答える