标签: hbase-client

hbase-client 2.0.x错误

我正在尝试使用hbase-client java API连接到远程hbase服务器.到目前为止,我已经能够使用hbase-client版本1.3.1.但要解决与gRPC的依赖冲突,我正在尝试使用hbase-client versoin 2.0.x.

当我在hbase java客户端版本2.0.x中尝试`admin.tableExists(tableName)时,我收到此错误.

但是大多数其他数据持久化API都像往常一样工作.这可能是由于依赖性问题或与服务器的版本不匹配.

我们非常感谢您提出任何解决问题的建议.

Hbase服务器版本:1.2.4

org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 in table 'hbase:meta', {TABLE_ATTRIBUTES => {IS_META => 'true', coprocessor$1 => '|org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint|536870911|'}, {NAME => 'info', BLOOMFILTER => 'NONE', VERSIONS => '10', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', CACHE_DATA_IN_L1 => 'true', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '8192', REPLICATION_SCOPE => '0'}
        at org.apache.hadoop.hbase.regionserver.HRegion.checkFamily(HRegion.java:7752)
        at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:6800)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.get(RSRpcServices.java:2032)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:33644)
        at …
Run Code Online (Sandbox Code Playgroud)

java hbase maven hbase-client

9
推荐指数
1
解决办法
1430
查看次数

尽管超时时间较短,但是稳定数量的HBase请求几乎完全需要5000毫秒(成功)才能完成。不知道为什么

我的客户端正在使用org.apache.hbase:hbase-client:2.1.0"并且服务器正在运行 1.2.0-cdh5.11.11.2.0-cdh5.11.0在替代测试集群中)。

我的客户端非常简单,它Connection在启动时实例化了一个类(由于Apache的建议,该类很繁重且线程安全,因此在线程之间共享)。然后,对于每个请求,它创建一个Table类并执行一个.exists(new Get(rowKey))操作。

像这样:

Connection conn = ConnectionFactory.createConnection(hbaseConfig);
Run Code Online (Sandbox Code Playgroud)

final Table table = conn.getTable(tableName);
return table.exists(new Get(context.getKey()));
Run Code Online (Sandbox Code Playgroud)

大多数情况下,最糟糕的情况是,到HBase的请求延迟时间为40ms。通常,它会在10毫秒左右完成。

但是,我们注意到偶尔的请求大约需要5000毫秒(5秒)的时间-但仍能成功完成!

偶尔,我的意思是每分钟大约1个请求(每分钟总共600个请求,所以速率很小)。但这很稳定。

这些几乎恰好在5s(+/- 100-200ms)左右。那是奇怪的部分。这不是一个峰值。

起初,我怀疑这是客户端的错误配置,我需要设置更严格的超时,因此我设置了以下内容:

hbaseConfig.set(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 1);
hbaseConfig.set(HConstants.HBASE_CLIENT_PAUSE, "50");
hbaseConfig.set(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT, "2000");
hbaseConfig.set(HConstants.HBASE_RPC_TIMEOUT_KEY, "1500");
hbaseConfig.set(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY, "2000");
hbaseConfig.set(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, "1500");
hbaseConfig.set(HConstants.ZOOKEEPER_RECOVERABLE_WAITTIME, "2000");
hbaseConfig.set(HConstants.ZK_SESSION_TIMEOUT, "2000");
hbaseConfig.set("zookeeper.recovery.retry", "1");
hbaseConfig.set("zookeeper.recovery.retry.intervalmill","200");
hbaseConfig.set("hbase.ipc.client.socket.timeout.connect", "2000");
hbaseConfig.set("hbase.ipc.client.socket.timeout.read", "2000");
hbaseConfig.set("hbase.ipc.client.socket.timeout.write", "2000");
Run Code Online (Sandbox Code Playgroud)

换句话说,5000ms超过了全局超时时间(如中所述HConstants.HBASE_CLIENT_OPERATION_TIMEOUT)。

但是我有大约5秒钟才能完成的请求-并且成功完成了。

除了这些超时之外,我从使用更改AsyncConnectionConnection(无论如何都不需要使其异步),并且正在考虑仅GET拨打电话而不是exists

但是在这一点上,我很沮丧。我没有看到任何财产以及5s的来源。甚至没有超时,它实际上成功了!

有人遇到过吗?有什么方法可以让hbase-client发出指标吗?服务器端指标显示延迟没有增加(扫描指标)。

java performance hbase latency hbase-client

7
推荐指数
1
解决办法
232
查看次数

HBase BufferedMutator与PutList性能

我最近遇到了BufferedMutator类的HBase,它可以用于批量插入和删除.我以前使用List来放置数据hTable.put(putList)以做同样的事情.对我的代码进行基准测试似乎并没有显示出太大的差异,而是我在做的事情mutator.mutate(putList);.使用BufferedMutator而不是PutList有显着的性能提升吗?

java optimization hbase hbase-client

5
推荐指数
1
解决办法
2233
查看次数

标签 统计

hbase ×3

hbase-client ×3

java ×3

latency ×1

maven ×1

optimization ×1

performance ×1