读取HBases的数据的三种常见用法
感谢提供者https://blog.csdn.net/javastart/article/details/80889190?utm_source=blogxgwz0
HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI、TableScanMR以及SnapshotScanMR。
ScanAPI:
客户端next设计原理:HBase中scan根据发送的命令过去,服务器并不是将满足扫描条件的所有数据一次性返回给客户端;
应用场景:scan API的效率很大程度上取决于扫描的数据量。通常建议OLTP业务中少量数据量扫描的scan可以使用scan API;
TableScanMR:
TableScanMR的工作原理其实就是ScanAPI的并行化,ableScanMR会将scan请求根据目标region的分界进行分解,分解成多个sub-scan,每个sub-scan本质上就是一个ScanAPI
假如scan是全表扫描,那这张表有多少region,就会将这个scan分解成多个sub-scan,每个sub-scan的startkey和stopkey就是region的startkey和stopkey
应用场景:HBase扫描大量数据进行分析
SnapshotScanMR:
SnapshotScanMR扫描于原始表对应的snapshot之上,根据snapshot restore出来的hfile
SnapshotScanMR直接会在客户端打开region扫描HDFS上的文件,不需要发送Scan请求给RegionServe
SnapshotScanMR直接绕过regionserver在客户端借用region中的扫描机制直接扫描hdfs中数据,
优点:1)减小对RegionServer的影响,2)极大的提升了扫描效率。SnapshotScanMR相比TableScanMR在扫描效率上会有2倍~N倍的性能提升;
注意点:
TableScanMR和SnapshotScanMR都会存在的问题,两者实际上都是按照region对scan进行切分,然而对于很多大region(大于30g),单个region的扫描粒度还是太大,很多scan扫描可能并没有涉及多个region,结果只会集中在某一个region上;