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。然而,它并非直接将满足条件的所有数据一次性返回,而是通过客户端与服务器之间进行多次交互完成数据获取。这种设计在确保数据完整性与效率之间做出平衡。游戏源码项目学习
Scan工作流程概览
图示展示了Scan的客户端代码流程。在for循环中,每轮迭代调用ResultScanner对象的next方法获取一行记录。实际操作中,客户端频繁向服务器发送next请求。
Scan设计的多轮next请求模式
这种设计旨在避免在数据量庞大时出现异常情况。然而,从效率角度来看,分时流向指标源码可能并不理想。接下来,我们探讨Scan设计中的优缺点。
优点与缺点并存
Scan通过多次next请求确保数据完整性和处理异常情况,避免一次性请求带来的潜在风险。但频繁的网络交互可能导致性能开销,影响扫描效率,特别是当数据量巨大时。
HBase最佳实践 – Scan用法大观园
HBase 从用法的角度来讲其实乏陈可善,所有更新插入删除基本一两个 API 就可以搞定。要说稍微有点复杂的话,Scan 的用法可能会多一些说头。扫描用法包括 ScanAPI、知道脚本源码TableScanMR 以及 SnapshotScanMR。这三种用法各有特点,适用于不同的应用场景。以下将分别对这三种用法进行解析,并对比它们的原理、效率和最佳实践,以帮助读者更好地理解 Scan 的使用。
Scan API 是最常见的用法,基于官方 API 文档。Scan 的工作原理涉及到客户端代码中的 ResultScanner 对象,实际操作中,客户端不断调用 next 请求获取数据,这个过程可以分为几个步骤。自我游系统源码这种设计模式在大数据量场景下可能会遇到一些挑战,主要体现在效率和异常处理方面。
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ç次æ°ã
2024-12-22 13:03
2024-12-22 12:54
2024-12-22 12:35
2024-12-22 12:17
2024-12-22 11:29
2024-12-22 11:04