12

ジョブ mapreduce を書きます。入力は hbase のテーブルです。

ジョブの実行時にエラーが発生しました:

org.apache.hadoop.hbase.client.ScannerTimeoutException: 最後の呼び出しから 88557 ミリ秒が経過しました。タイムアウトは現在、org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1196) で 60000 に設定されています。 .apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:133) org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:142) org.apache.hadoop.mapred.MapTask $NewTrackingRecordReader.nextKeyValue(MapTask.java:532) で org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) で org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) でorg.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370) at org.apache.hadoop.mapred.Child$4.run (Child.java:255) java.security.AccessController で。org.apache.hadoop.mapred の org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1083) の javax.security.auth.Subject.doAs(Subject.java:396) の doPrivileged (ネイティブ メソッド)。 Child.main(Child.java:249) 原因: org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: 名前: 1502530095384129314 at org.apache.hadoop.hbase.regionserver.HRegionServer.next (HRegionServer.java:1837) で sun.reflect.GeneratedMethodAccessor19.invoke(不明なソース) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) ) org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:570) で org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1039) で sun. Reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) の sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) の sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) の java.lang.reflect.Constructor.newInstance(Constructor.java: 513) org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96) で org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:83) で org.apache.hadoop.hbase org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) の .client.ScannerCallable.call(ScannerCallable.java:38) org.apache.hadoop.hbase.client.HTable$ClientScanner の.next(HTable.java:1187) ... 12 件以上newInstance(NativeConstructorAccessorImpl.java:39) で sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) で java.lang.reflect.Constructor.newInstance(Constructor.java:513) で org.apache.hadoop.hbase.RemoteExceptionHandler .decodeRemoteException(RemoteExceptionHandler.java:96) の org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:83) の org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:38) ) org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) ... 12以上newInstance(NativeConstructorAccessorImpl.java:39) で sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) で java.lang.reflect.Constructor.newInstance(Constructor.java:513) で org.apache.hadoop.hbase.RemoteExceptionHandler .decodeRemoteException(RemoteExceptionHandler.java:96) の org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:83) の org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:38) ) org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) ... 12以上lang.reflect.Constructor.newInstance(Constructor.java:513) org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96) org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable. java:83) org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:38) で org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org .apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) ... 12 続きlang.reflect.Constructor.newInstance(Constructor.java:513) org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96) org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable. java:83) org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:38) で org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org .apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) ... 12 続きjava:38) org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) で... 12以上java:38) org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226) で org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1187) で... 12以上

修正を手伝ってもらえますか。

4

4 に答える 4

11

スキャナ タイムアウト例外が発生しました。タイムアウト例外を回避するには、hbase-> conf で使用できる hbase-site.xml のプロパティを設定して、タイムアウトを増やします

  <property>
    <name>hbase.client.scanner.timeout.period</name>
    <value>900000</value> <!-- 900 000, 15 minutes -->
  </property>
  <property>
    <name>hbase.rpc.timeout</name>
    <value>900000</value> <!-- 15 minutes -->
  </property>
于 2012-07-13T12:07:18.480 に答える
9

公式の HBase ブックには次のように記載されています。

少数の RPC と、クライアントとサーバーで使用されるメモリの間の最適な場所を見つける必要がある場合があります。ほとんどの場合、スキャナーのキャッシュを高く設定するとスキャンのパフォーマンスが向上しますが、設定が高すぎると逆効果になる可能性があります。より多くのデータがフェッチされ、クライアントに転送する必要があるため、next() の各呼び出しに時間がかかります。クライアント プロセスが利用できる最大ヒープを超えると、OutOfMemoryException で終了する場合があります。行をクライアントに転送するか、クライアントでデータを処理するのにかかる時間が、構成されたスキャナー リースのしきい値を超えると、最終的には、スキャナー タイムアウト例外がスローされる形でリース期限切れエラーを受け取ります。

したがって、上記の構成で例外を回避するのではなく、マップ側のキャッシュを低く設定して、マッパーが必要な負荷を事前に指定された時間間隔で処理できるようにすることをお勧めします。

于 2012-09-19T13:39:53.953 に答える
2

Scan オブジェクトのメソッドを使用setCaching(int noOfRows)して、スキャナーが一度にフェッチする行数を減らすことができます。

Scan scan=new Scan();
scan.setCaching(400);//here 400 is just an example value

キャッシュ値が大きいScannerTimeoutExceptionと、プログラムがフェッチされた行を消費/処理するのにタイムアウト値よりも時間がかかる可能性があるため、原因となる可能性があります。

ただし、スキャナーがサーバーに対してより多くのフェッチ要求を行うため、タスクが遅くなる可能性があるため、プログラムのニーズに応じてcachingと の値を微調整する必要があります。timeout

于 2016-03-29T14:42:04.750 に答える