Hbase 1.0.1/Hadoop2.5.2を実行しています。テーブルでスキャンを実行しようとしていますが、RPCタイムアウトが発生します。
Hbase RPCタイムアウトを2分に変更しました。これにより、UIから確認できます...
<property>
<name>hbase.rpc.timeout</name>
<value>120000</value>
<source>hbase-site.xml</source>
</property>
...しかし私のクライアントは60年代後もまだタイムアウトしています...
Caused by: Java.io.IOException: Call to xxxxxxx/172.16.5.13:16020 failed on local exception: org.Apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2968, waitTime=60001, operationTimeout=60000 expired.
at org.Apache.hadoop.hbase.ipc.RpcClientImpl.wrapException(RpcClientImpl.Java:1235)
at org.Apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.Java:1203)
at org.Apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.Java:216)
at org.Apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.Java:300)
at org.Apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.Java:31751)
at org.Apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.Java:199)
at org.Apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.Java:62)
at org.Apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.Java:126)
... 6 more
Caused by: org.Apache.hadoop.hbase.ipc.CallTimeoutException: Call id=2968, waitTime=60001, operationTimeout=60000 expired.
at org.Apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.Java:70)
at org.Apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.Java:1177)
... 12 more
キャッシュブロックサイズを変更してみましたが、違いはないようです。
私が見逃している他のタイムアウトはありますか?スキャンは数万を返すだけですが、テーブルには多くの行(数百万)がありますが、問題は特定の領域のセットにのみあるようです。
最初の回答に基づいています。 HBaseクラスターとの接続を開く前に、プロパティhbase.client.scanner.timeout.periodおよびhbase.rpc.timeoutを構成しました。
import org.Apache.hadoop.conf.Configuration;
import org.Apache.hadoop.hbase.HBaseConfiguration;
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.rpc.timeout", "1800000");
conf.set("hbase.client.scanner.timeout.period", "1800000");
サーバーがスキャンRPC要求を受信すると、制限時間は2つの値のうち小さい方の半分になるように計算されます:hbase.client.scanner.timeout.periodおよびhbase.rpc.timeout(どちらもデフォルトで60000ミリ秒または1分)。これが、2分を設定した後、スキャンが60秒でタイムアウトになる理由です。
制限時間に達すると、サーバーはその時点までに蓄積した結果を返します。この結果セットは空である可能性があります。スキャンに1分以上かかることが使用パターンに含まれている場合は、これらの値を増やすことができます。
タイムアウト期間が短すぎないことを確認するために、hbase.cells.scanned.per.heartbeat.checkを最小セル数に設定できます。タイムアウトチェックが発生する前にスキャンする必要があります。デフォルト値は10000です。値が小さいほど、タイムアウトチェックが頻繁に発生します。
以下のリンクは、Hbaseスキャンのタイムアウトを構成するのに役立つ場合があります:
hbase-site.xml
ではなくクライアント側で接続を作成するときにこれを試してください。
conf.set("hbase.rpc.timeout", "1800000")
これは動作するはずです。
hbase org.Apache.hadoop.hbase.mapreduce.Export -Dhbase.client.scanner.timeout.period=600000 tbname /path/to/hdfs