2012-07-13 23 views
12

私は仕事のmapreduceを書きます。入力はhbaseのテーブルです。Hbase mapreduceエラー

ジョブの実行は、エラーだった場合には

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

私はそれを修正する。

答えて

9

スキャナのタイムアウト例外が発生しました。タイムアウト例外を回避するためにhbase-に利用できるようになるのHBase-site.xmlの中でプロパティを設定することで、タイムアウトを増やす> confに公式のHBaseブック状態として

<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> 
9

ます少数のRPCとクライアントとサーバーで使用されるメモリ の間にスイートスポットを見つける必要があるかもしれません。スキャナキャッシングを高く設定すると、ほとんどの場合、 のスキャンが改善されますが、それを高く設定すると悪影響を受ける可能性があります。 more next()の呼び出しには、より多くのデータが取り込まれ、クライアントプロセスが利用可能な最大ヒープを超えたら、 OutOfMemoryExceptionで終了することがあります。 クライアントに行を転送するか、またはクライアント上の データを処理するのにかかる時間が、設定されたスキャナリースのしきい値を超えると、 は、リース期限切れのエラーをスローされた状態で終了します。

上記の設定で例外を回避するのではなく、マップ側のキャッシュを低く設定して、マッパーが必要な負荷をあらかじめ指定された時間間隔に処理できるようにする方がよいでしょう。

+1

https://books.google.fr/books?id=nUhiQxUXVpMC&pg=PA128&lpg=PA128#v=onepage&q&f=false – Fabien

+0

スニペットは、**のHBaseから決定的なガイドです、第1版2011ページ128。 – botchniaque

2

スキャンオブジェクトのsetCaching(int noOfRows)メソッドを使用すると、スキャナでフェッチされた行数を減らすことができます。

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

大きなキャッシュの値がタイムアウト値よりも消費/処理フェッチされた行でより多くの時間がかかることがあり、あなたのプログラムとしてScannerTimeoutExceptionを引き起こす可能性があります。

しかし、スキャナーがサーバーにフェッチ要求を出しているのでタスクが遅くなる可能性があるので、ご自分のプログラムの必要に応じてcachingtimeoutの値を微調整する必要があります。 HBaseの-site.xmlの中でプロパティを次

0

Setttingが私のために

<property> 
     <name>hbase.client.scanner.timeout.period</name> 
     <value>900000</value> 
    </property> 

を働いたリージョンサーバーへのクライアントからのRPCコール間の時間がスキャンタイムアウトを超えた場合にこれがスローされます。例えば

if (RPC_call_time > Scanner_timeout){ 

throw ScannerTimeoutException 

} 

訪問my blogspot for details

関連する問題