0

セル値の増分を設定したいので、HBase テーブルで「incr」コマンドを実行しました。しかし、次のエラーが発生します:

エラー: org.apache.hadoop.hbase.DoNotRetryIOException: org.apache.hadoop.hbase.DoNotRetryIOException: 64 ビット幅ではないフィールドをインクリメントしようとしました

以下は私が実行したコマンドです:

hbase(main):022:0> create 'test1', {NAME => 'foo', VERSIONS => 1}
0 row(s) in 1.0440 seconds

hbase(main):023:0> put 'test1', 'spam', 'foo:bar', 1
0 row(s) in 0.0120 seconds

hbase(main):024:0> scan 'test1'
ROW                                         COLUMN+CELL
 spam                                       column=foo:bar, timestamp=1372922338444, value=1
1 row(s) in 0.0140 seconds

hbase(main):025:0> incr 'test1', 'spam', 'foo:bar', 1

ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: org.apache.hadoop.hbase.DoNotRetryIOException: Attempted to increment field that isn't 64 bits wide

Here is some help for this command:
Increments a cell 'value' at specified table/row/column coordinates.
To increment a cell value in table 't1' at row 'r1' under column
'c1' by 1 (can be omitted) or 10 do:

  hbase> incr 't1', 'r1', 'c1'
  hbase> incr 't1', 'r1', 'c1', 1
  hbase> incr 't1', 'r1', 'c1', 10


hbase(main):026:0>

どうすればこの問題を解決できますか?

4

3 に答える 3

2

カウンタの初期化に誤りがあります。カウンターを初期化する必要はありません。あなたの場合、4バイトの整数1で初期化された場合、列が最初に8バイト長の1値でインクリメントされたときに初期化されます。正しい使い方は次のとおりです。

hbase(main):012:0> create 'test', {NAME => 'foo', VERSIONS => 1}
0 row(s) in 0.1470 seconds

=> Hbase::Table - test
hbase(main):013:0> incr 'test', 'spam', 'foo:bar', 1
COUNTER VALUE = 1
0 row(s) in 0.0080 seconds

hbase(main):014:0> incr 'test', 'spam', 'foo:bar', 1
COUNTER VALUE = 2
0 row(s) in 0.0060 seconds

hbase(main):015:0> incr 'test', 'spam', 'foo:bar', 1
COUNTER VALUE = 3
0 row(s) in 0.0040 seconds
于 2016-04-19T15:22:29.317 に答える
1

指定された増分位置の値が整数である場合、同じ問題に直面しました。値を long に変更しました

put.add(Bytes.toBytes("columnar"),Bytes.toBytes("column11111"), Bytes.toBytes(1l));

インクリメント操作を実行すると、機能しました。

incr 'blah-blah','row111','columnar:column11111',11
于 2013-09-02T06:36:23.637 に答える