0


hbase 设置超时参数

一、为什么要设置超时参数

hbase设计的目标是成为一个高可用集群,能够在失败的时候快速响应,当出现网络抖动等偶发情况时,能快速重试,让用户可以快速拿到结果。而不是一直卡着,使得上层应用阻塞等待。

这个功能可以通过设置下面的3个超时参数、超时重试次数来实现。在超时的时候,立即主动断开,并重试。可以在当前集群上重试,也可以切换集群重试。

二、3个超时参数及其机制

hbase.rpc.timeout

hbase client和server之间通过 rpc 通信,此参数设置了rpc超时时间。超时后将主动断开 rpc 请求。

hbase.client.opeation.timeout

hbase client从发出数据操作请求到server端处理完成并返回,总时间不能超过此参数。一个数据请求可能会调用多次rpc请求。比如 client 端发起了一个 put 请求,server 端正好在Full gc ,导致 rpc 响应超时。那么 client 会进行重试,重试多次后,累计的时间超过了 client.opeation.timeout 后,将抛出 sockettimeout 异常。

hbase.client.scanner.timeout.period

hbase 为 scanner 专门设置的超时参数。

一次 scan 操作如果一次性返回大量数据,对于 client 和 server 还有网络都有很大的压力。client 端一次性接受大量数据放在内存中,容易oom; server 端从磁盘读出数据需要大量的io,而我们知道io 相比于cpu、内存,往往更容易成为瓶颈;网络端从 server 这台机器传输大量数据到 client 这台机器,将会占用很大带宽,对网络也有压力。

因此 一个scan 操作会分为多次 rpc 来实现。 我们在 scan 的时候,会设置 maxsize 和 cache,maxsize 表示本次 scan 要扫描返回的总条数,cache 表示一次 rpc 返回的数据条数。

HTable table=(HTable) getHTablePool().getTable("tb_stu");

Scan scan=new Scan();

scan.setMaxResultSize(10000);

scan.setCacheing(500);

ResultScanner rs = table.getScanner(scan);

Result r = rs.next();

每执行一次 rs.next(),都是在发起一次 rpc 请求。

server 端会比较 hbase.client.scanner.timeout.period 和 hbase.rpc.timeout 两个参数,按照其中较小的来判断是否超时。比如scanner.timeout.period 设置为6000ms,rpc.timeout为3000ms,则在超过3000ms时,就会报socketTimeout异常,主动断开连接。

ref:

hbase客户端超时机制:http://hbasefly.com/2016/06/11/hbase-client-2/

设置rpc超时后无效的解决方法:https://stackoverflow.com/questions/30923351/hbase-client-rpc-timeout

标签: hbase

本文转载自: https://blog.csdn.net/qq_22498427/article/details/130425802
版权归原作者 titake 所有, 如有侵权,请联系我们删除。

“hbase 设置超时参数”的评论:

还没有评论