• 沒有找到結果。

删除指定的行是在构造 Delete 对象的时候只传入行健

7.3 写性能优化策略

7.3 写性能优化策略

• 写数据流程

HBase 写数据流程:数据先顺序写入 WAL ,再写入对应的缓存 MemStore ,当 MemStore 中数据大小达到一定阈值 (128M) 之后,系统会异步将 MemS tore 中数据 Flush 到 HDFS 形成小文件。

HBase 数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去,这两类问题的切入点也不尽相同

2. Put 是否可以同步批量提交

HBase 分别提供了单条 Put 以及批量 Put 的 API 接口,使用批量 Put 接口可以减少客户端到 RegionServer 之间的 RPC 连接数,提高写入性能。另 外需要注意的是,批量 Put 请求要么全部成功返回,要么抛出异常。

7.3 写性能优化策略

• 写数据流程

HBase 写数据流程:数据先顺序写入 WAL ,再写入对应的缓存 MemStore ,当 MemStore 中数据大小达到一定阈值 (128M) 之后,系统会异步将 MemS tore 中数据 Flush 到 HDFS 形成小文件。

HBase 数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去,这两类问题的切入点也不尽相同

3. Put 是否可以异步批量提交

业务如果可以接受异常情况下少量数据丢失的话,还可以使用异步批量提交的方式提交请求。提交分为两阶段执行:用户提交写请求之后,数据会写入 客户端缓存,并返回用户写入成功;当客户端缓存达到阈值 ( 默认 2M) 之后批量提交给 RegionServer 。需要注意的是,在某些情况下客户端异常的 情况下缓存数据有可能丢失。

7.3 写性能优化策略

• 写数据流程

HBase 写数据流程:数据先顺序写入 WAL ,再写入对应的缓存 MemStore ,当 MemStore 中数据大小达到一定阈值 (128M) 之后,系统会异步将 MemS tore 中数据 Flush 到 HDFS 形成小文件。

HBase 数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去,这两类问题的切入点也不尽相同

4. Region 是否太少

当前集群中表的 Region 个数如果小于 RegionServer 个数,即 Num(Region of Table) < Num(RegionServer) ,可以考虑切分 Region 并尽 可能分布到不同 RegionServer 来提高系统请求并发度,如果 Num(Region of Table) > Num(RegionServer) ,再增加 Region 个数效果并不 明显。

7.3 写性能优化策略

• 写数据流程

HBase 写数据流程:数据先顺序写入 WAL ,再写入对应的缓存 MemStore ,当 MemStore 中数据大小达到一定阈值 (128M) 之后,系统会异步将 MemS tore 中数据 Flush 到 HDFS 形成小文件。

HBase 数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去,这两类问题的切入点也不尽相同

5. 写入请求是否不均衡

另一个需要考虑的问题是写入请求是否均衡,如果不均衡,一方面会导致系统并发度较低,另一方面也有可能造成部分节点负载很高,进而影响其他业 务。分布式系统中要特别避免一个节点负载很高的情况出现,一个节点负载很高可能会拖慢整个集群,这是因为很多业务会使用多批量提交读写请求,

一旦其中一部分请求落到该节点无法得到及时响应,就会导致整个批量请求超时。

7.3 写性能优化策略

KeyValue 大小对写入性能的影响巨大,一旦遇到写入性能比较差的情况,需要考虑是否由于写入 KeyValue 数据太大导致。试想,我们去肯德基排队 买汉堡,有 5 个窗口服务,正常情况下大家买一个很快,这样 5 个窗口可能只需要 3 个服务。假设忽然来了一批人,要定全家桶,好了,所有的窗口都 工作起来,而且因为全家桶不好制作导致服务很慢,这样必然会导致其他排队的用户长时间等待,直至超时。

可回头一想这可是写请求,怎么会有这么大的请求延迟!和业务方沟通之后确认该表主要存储资料库文档信息,都是平均 100K 左右的数据,就是因为 这个业务 KeyValue 太大导致。 KeyValue 太大会导致 WAL 文件写入频繁切换, Flush 以及 Compaction 频繁触发,写入性能急剧下降。

相關文件