1.Scan的复杂之处
2.HBase最佳实践 – Scan用法大观园
3.hbase scançstartRowåendRow
4.HBase scan命令详解
5.HBase scan setBatchåsetCachingçåºå«
Scan的复杂之处
HBase原理与实践
扫描API设计核心 - Scan
在HBase中,Scan是一个用于扫描表中数据的重要API。然而,它并非直接将满足条件的所有数据一次性返回,而是通过客户端与服务器之间进行多次交互完成数据获取。这种设计在确保数据完整性与效率之间做出平衡。opencv源码研究
Scan工作流程概览
图示展示了Scan的客户端代码流程。在for循环中,每轮迭代调用ResultScanner对象的next方法获取一行记录。实际操作中,客户端频繁向服务器发送next请求。
Scan设计的多轮next请求模式
这种设计旨在避免在数据量庞大时出现异常情况。然而,从效率角度来看,svs网源码可能并不理想。接下来,我们探讨Scan设计中的优缺点。
优点与缺点并存
Scan通过多次next请求确保数据完整性和处理异常情况,避免一次性请求带来的潜在风险。但频繁的网络交互可能导致性能开销,影响扫描效率,特别是当数据量巨大时。
HBase最佳实践 – Scan用法大观园
HBase 从用法的角度来讲其实乏陈可善,所有更新插入删除基本一两个 API 就可以搞定。要说稍微有点复杂的话,Scan 的用法可能会多一些说头。扫描用法包括 ScanAPI、黄瓜app 源码TableScanMR 以及 SnapshotScanMR。这三种用法各有特点,适用于不同的应用场景。以下将分别对这三种用法进行解析,并对比它们的原理、效率和最佳实践,以帮助读者更好地理解 Scan 的使用。
Scan API 是最常见的用法,基于官方 API 文档。Scan 的工作原理涉及到客户端代码中的 ResultScanner 对象,实际操作中,客户端不断调用 next 请求获取数据,这个过程可以分为几个步骤。be源码bs这种设计模式在大数据量场景下可能会遇到一些挑战,主要体现在效率和异常处理方面。
ScanAPI 的应用场景通常局限于 OLTP(在线事务处理)场景,对于需要从 HBase 扫描大量数据进行 OLAP(在线分析处理)分析的业务,可以考虑使用 TableScanMR 和 SnapshotScanMR。TableScanMR 是 ScanAPI 的并行化版本,通过将扫描请求分解为多个子扫描,提高了扫描效率。SnapshotScanMR 与 TableScanMR 类似,但采用了客户端直接访问 HDFS 的方式,进一步优化了扫描性能。
为了确保扫描操作的高效执行,TableScanMR 和 SnapshotScanMR 都提供了一些最佳实践建议,懋嘉 源码如设置缓存大小、避免不必要的并行操作等。这些实践有助于优化扫描性能,尤其是在处理大数据量时。
在实际应用中,TableScanMR 和 SnapshotScanMR 都存在一些问题,比如对大 region 的扫描粒度仍然较大,以及在某些情况下生成的 Mapper 较少。为了解决这些问题,需要提供更精细的扫描粒度策略。性能对比显示,SnapshotScanMR 在某些场景下表现出更好的性能,但其当前版本可能仍存在一些不完善之处,需要进一步优化。
总之,Scan 的使用需要根据实际业务需求选择合适的扫描方法,并结合最佳实践来优化性能。通过理解不同扫描方法的原理和特点,开发者可以更有效地利用 HBase 进行数据查询和分析。
hbase scançstartRowåendRow
举ä¸ä¸ªåºæ¯ï¼å®å ¨é¢åç溯æºåæï¼æ¥è¯¢ç»´åº¦å æ¬ipï¼æ¶é´æ³ï¼ç«¯å£ï¼åè®®ï¼å¯è½æ ¹æ®å两ç维度çä¸ä¸ªæè å 个è¿è¡åå§æ¥å¿æ¥è¯¢ï¼æ们å¯ä»¥æåå§æ¥å¿åå¨å°hbaseä¸ï¼èåé¢æå°çå 个维度å¯ä»¥åå«ä½ä¸ºkeyçä¸é¨åã
é¦å æ们åºè¯¥èèçæ¯rowkeyç设置ï¼ç¬¬ä¸ï¼æ£åæè å转ï¼ä¿è¯æ°æ®ä¼éæºåå¸å°ä¸åçregionå½ä¸ã第äºï¼é¢ååºï¼å 对æ°æ®åä¸ä¸ªåºæ¬çç»è®¡ï¼æ¯å¦æ们é¢åå个åºï¼æ们å¯ä»¥ç»è®¡ä¸ä¸æ¯ä¸ªåºçstartrowåendrowï¼è¿æ ·ä¿è¯æ¯ä¸ªåºçæ°æ®ç¸å½ï¼å¦å¤è¿æ ·ç好å¤æ¯å½æä»¬æ ¹æ®rowkeyæ¥è¯¢çæ¶åï¼å¯ä»¥ä¿è¯ç´æ¥å®ä½å°æ个ååºãæ们线ä¸çæ°æ®å°±æ¯éç¨ç第äºç§æ¹å¼ã
ç¶åæ们åºè¯¥èèrowkeyçç»æãå两ç§æ åµï¼ç¬¬ä¸ç§æ åµï¼ç»´åº¦ä¸æ¯ç¹å«å¤ï¼æ们å®å ¨å¯ä»¥æå个维度åå«ä½ä¸ºrowkeyçä¸é¨åï¼æ¯å¦ä¸ææå°çéæ±ï¼å°±æ¯éç¨çè¿ç§æ¹å¼ï¼å 为ä¸å ±å个维度ï¼ç¸å¯¹æ¥è¯´æ¯è¾å°ã第äºç§æ åµï¼ç»´åº¦è¿å¤ï¼å¦æé½ä½ä¸ºrowkeyçä¸é¨åçè¯é¿åº¦å¤ªå¤§ï¼æ¤æ¶å»ºè®®èèäºçº§ç´¢å¼ï¼ä¸¾ä¸ªä¾åï¼æ¯å¦å¯¹äºä¸é¢æå°çå个维度ï¼å¦æç°å¨è¿è¡æ©å±ï¼ipï¼ç«¯å£ï¼åè®®éè¦å®ä½å°æºåç®çï¼è¿æ ·çè¯ï¼æ´ä¸ªç»´åº¦æåå°äºä¸ä¸ªï¼æ¤æ¶å°±å»ºè®®éç¨äºçº§ç´¢å¼ã
ç®åæ们已ç»ç¡®å®äºhbaseåå¨ï¼å¹¶ä¸éç¨é¢ååºçæ¹å¼å¹¶ä¸éç¨rowkeyè¿è¡è¿æ»¤æ¥è¯¢ï¼é£ä¹ç°å¨èèrowkeyç设计ãä»ææ¯è§åº¦èèï¼é¢ååºçæ¹å¼æ¶é´æ³ä¸è½ä½ä¸ºç¬¬ä¸é¨åï¼è¿æ ·ä¸å®ä¼åºç°æ°æ®å¾æçç°è±¡ï¼ä»ä¸å¡è§åº¦èèï¼æ们å®ä½æ¥å¿çæ¶åï¼é¦å éè¦å®ä½ipï¼ç¶åæ¯ç«¯å£ï¼æåææ¯åè®®ï¼ä¹å°±æ¯è¯´æ们çç¨æ·å»å®ä½æ¥å¿çæ¶åï¼å¦æå®ä½å°ç«¯å£ï¼é£å¿ é¡»å å®ä½ipï¼å¦æå®ä½åè®®çè¯ï¼å¿ é¡»å å®ä½ipå端å£ã
综ä¸æè¿°ï¼æ们çrowkey设计为ip+timestamp+port+prot
设计æå®ä¹åï¼æ们åèèæ¥è¯¢çé®é¢ãæ们ç¥é对äºhbaseçæ¥è¯¢ï¼æå¿«çæ¹å¼å°±æ¯getï¼è¿æ ·çè¯ï¼å¯ä»¥è¿ éå®ä½å°ä¸æ¡æ°æ®ãègetæ¥è¯¢å ¶å®å°±æ¯scançç¹æ®æ åµï¼åªæ¯startRowåendRowä¸æ ·ãæ以æ¤æ¶æ们å¯ä»¥éç¨scan+startRow+endRowçæ¹å¼è¿è¡æä½ã
e.g
è¿æ ·çè¯å°±å¯ä»¥å§è¯¥èå´çæ°æ®æ¥åºæ¥ï¼å½ç¶æ们å¯ä»¥åå¨å åä¸è¿è¡è¿æ»¤
å½çstartRowåendRowéè¦æ³¨æä¸äºæ åµã
请åèï¼blogs.com/llphhl/p/.html
HBase scan命令详解
hbase中scan命令是日常使用频率较高的操作之一,其中filter功能尤为强大。以下是对scan命令下filter使用方法的简要介绍。
为了演示,我们模拟了部分微博评论数据,并将这些数据通过代码插入到hbase中。具体的代码实现细节这里不做展开,因为相对简单。
在hbase中,表名为zy_comment,列簇info下包含articleType和commentInfo两个列。commentInfo的value是上述Comment类的JSON字符串,插入的数据如下所示。
HBase数据存储顺序遵循三维有序原则,即rowkey(行键)、column key(列族和列限定符)和时间戳(Timestamp)。这三个维度按照ASCII码表排序(例如,A排在a前面)。
scan命令中,Filter功能经常被大量使用。在hbase shell中提供的filter都可以在hbase client包中找到对应的类,它们都是Filter的子类。许多命令都是通过filter来实现的。
使用show_filters命令可以查看shell中定义了哪些filter常量。如果想要使用shell中未定义的常量,在使用时必须手动导入filter的全路径。
使用help 'scan'命令可以查看scan的语法和用法。关于scan命令中filter的使用规则如下:{ }中的语法是ruby的map语法,FILTER必须大写,filter的参数是根据构造方法来的,相当于java中的new Filter('param1','param2')等,这里只是省略了new参数而已。当然,也可以使用ruby中new对象的方式,只是那样就必须使用全限定名称。下面会举一个全限定名称的例子。
在使用Filter的过程中,部分filter会用到比较器(CompareOperator.java)和运算比较符(ByteArrayComparable.java)。比较器主要有以下几种:
查询方式通过rowKey进行查询是最快的,因此rowkey的设计一定要合理,否则会影响查询速度。但有时确实无法完全通过rowkey进行查询,这时就需要借助scan命令。scan命令支持的修饰词除了列(COLUMNS)修饰词外,HBase还支持Limit(限制查询结果行数)、STARTROW(ROWKEY起始行)、STOPROW(结束行)、TIMERANGE(限定时间戳范围)、VERSIONS(版本数)和FILTER(按条件过滤行)等。
需要注意的是,binary中的数据必须是二进制字符串,而不是具体的值。
参考文章:
acadgild.com/blog/diffe...
blog.csdn.net/u...
HBase scan setBatchåsetCachingçåºå«
HBaseçæ¥è¯¢å®ç°åªæä¾ä¸¤ç§æ¹å¼ï¼
1ãææå®RowKeyè·åå¯ä¸ä¸æ¡è®°å½ï¼getæ¹æ³ï¼org.apache.hadoop.hbase.client.Getï¼
2ãææå®çæ¡ä»¶è·åä¸æ¹è®°å½ï¼scanæ¹æ³ï¼org.apache.hadoop.hbase.client.Scanï¼
å®ç°æ¡ä»¶æ¥è¯¢åè½ä½¿ç¨çå°±æ¯scanæ¹å¼ï¼scanå¨ä½¿ç¨æ¶æ以ä¸å ç¹å¼å¾æ³¨æï¼
1ãscanå¯ä»¥éè¿setCachingä¸setBatchæ¹æ³æé«é度ï¼ä»¥ç©ºé´æ¢æ¶é´ï¼ï¼
2ãscanå¯ä»¥éè¿setStartRowä¸setEndRowæ¥éå®èå´ï¼[startï¼endï¼startæ¯éåºé´ï¼endæ¯å¼åºé´ï¼ãèå´è¶å°ï¼æ§è½è¶é«ã
éè¿å·§å¦çRowKey设计使æ们æ¹éè·åè®°å½éåä¸çå ç´ æ¨å¨ä¸èµ·ï¼åºè¯¥å¨åä¸ä¸ªRegionä¸ï¼ï¼å¯ä»¥å¨éåç»ææ¶è·å¾å¾å¥½çæ§è½ã
3ãscanå¯ä»¥éè¿setFilteræ¹æ³æ·»å è¿æ»¤å¨ï¼è¿ä¹æ¯å页ãå¤æ¡ä»¶æ¥è¯¢çåºç¡ã
scanä¸çsetCachingä¸setBatchæ¹æ³çåºå«æ¯ä»ä¹å¢ï¼
setCaching设置çå¼ä¸ºæ¯æ¬¡rpcç请æ±è®°å½æ°ï¼é»è®¤æ¯1ï¼cache大å¯ä»¥ä¼åæ§è½ï¼ä½æ¯å¤ªå¤§äºä¼è±è´¹å¾é¿çæ¶é´è¿è¡ä¸æ¬¡ä¼ è¾ã
setBatch设置æ¯æ¬¡åçcolumn sizeï¼æäºrowç¹å«å¤§ï¼æ以éè¦åå¼ä¼ ç»clientï¼å°±æ¯ä¸æ¬¡ä¼ ä¸ä¸ªrowçå 个columnã
batchåcachingåhbase table column sizeå ±åå³æäºrpcç次æ°ã