本文是关于如何使用YCSB进行HBase性能测试。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。
在群集上运行任何性能基准测试工具时,关键的决策始终是性能测试应该使用什么样的数据集大小,这里我们演示了为什么在群集上运行HBase性能测试时选择“合适”的数据集大小非常重要。
HBase群集配置和数据集大小可能会改变同一群集上工作负载的性能和测试结果。您应该根据您想要了解的有关集群性能的信息来选择这个数据集的大小。为了展示可用内存缓存与从底层存储中匹配读取的工作组、2 YCSB工作负载和具有CDP私有云基础7.2.2操作的数据库集群之间的差异,进行了选择适当数据集大小的测试。我们使用40GB和1TB大小的数据集。不同YCSB工作负载的吞吐量对比如下。在图中,列越高,吞吐量越好。
注:吞吐量=每秒操作数
当应用程序试图从HBase集群读取数据时,处理请求的区域服务器首先检查所需结果是否已经存在于其块缓存中其进程的本地数据块中。如果有数据块,客户请求可以直接从缓存中得到服务,这被视为缓存命中。但是,如果该数据块当前不在区域服务器进程本地,它将被视为缓存未命中,并且必须从HDFS存储中的HFile读取该数据块。然后,根据缓存利用率,该数据块将保存在缓存中以备将来请求。
如摘要图所示,与从hdfs存储中的HFiles访问数据的工作负载运行相比,大多数数据集适合缓存的工作负载具有更低的延迟和更高的吞吐量。
为了选择工作负载数据集大小以很好地满足我们的测试目标,检查RegionServer堆、L1和L2缓存以及操作系统缓冲区缓存的大小,然后设置适当的数据集大小非常重要。YCSB工作负载运行后,可以检查一个好的参数,作为验证事情是否按预期运行的一种方式,即从缓存中提供了多少数据(缓存命中),从hdfs存储中访问了多少数据。区域服务器缓存命中与总读取请求的比率是缓存命中率。
您可以从L1缓存命中率“L1缓存命中率”配置中找到此信息。如果集群中同时设置了L1缓存和L2缓存,则L1缓存服务于索引块,L2缓存服务于数据块,可以记录L1“L1缓存比率”和L2“L2缓存比率”配置,以供参考。
这篇博文的其余部分将详细解释测试设置,选择数据集大小,然后使用这些数据集大小运行YCSB。
为此测试使用群集配置
使用的集群:6节点集群(1个主节点和5个区域服务器)
说明:戴尔PowerEdge R430,20c/40t氙气e5-2630 v4 @ 2.2Ghz,128GB内存,4-2TB磁盘
未配置安全性:(无Kerberos)
CDP版本:CDP私有云基础7.2.2有一个6节点的HBase集群,有一个主服务器和五个区域服务器。
JDK使用jdk1.8_232
HBase区域服务器配置了32GB堆。
HBase主站已配置4GB堆。
带有LruBlockCache的L1缓存用于12.3 GB的缓存大小。
群集中的L1缓存总量为61 GB(12.3 * 5=61GB)
群集上未配置L2堆外缓存。
大小调整案例1:数据完全适合集群上的可用缓存
在我们的HBase群集中,我们在分配给L1数据块缓存的5个区域服务器中总共配置了61GB(12.3GB * 5)。对于完全适合缓存的数据集,我们选择了为40GB.的数据集
大小调整案例2:数据集大于集群上的可用缓存
对于第二种情况,我们希望数据比可用缓存大得多。为了选择合适的数据集大小,我们查看了群集中已配置的HBase数据块缓存和操作系统缓冲区缓存。在给定的HBase群集中,跨区域服务器聚合时,配置的L1数据块缓存为61G。服务器每台服务器总共有128克内存,操作系统可以
以使用非专用于服务器进程的任何内存来有效地缓存基础HDFS块并提高整体吞吐量。在我们的测试配置中,每个区域服务器节点上都有大约96G OS缓存可用于此目的(忽略DataNode或OS进程使用的内存来简化操作)。在5个区域服务器上进行汇总,我们有大约500G的缓冲区(96G * 5个区域服务器)潜力。因此,我们选择了1TB的数据集大小,
将目标数据大小转换为YCSB参数在YCSB中,默认情况下一行为1KB,因此,根据加载到YCSB“用户表”中的行数,您可以轻松估算YCSB“用户表”表数据大小。因此,如果您上载100万行,则已将1,000,000 * 1KB = 1GB的数据上载到YCSB“用户表”中。
我们两个测试使用的数据集大小为:
-
40 GB数据和4000万行
-
1 TB数据和10亿行
测试方法
在6节点集群上安装了CDP私有云基础7.2.2,并生成了4000万行的工作负载数据(总数据集大小=> 40 GB),并运行了YCSB工作负载。加载后,在开始工作负载测试之前,我们等待所有压缩操作完成。在HBase上运行的YCSB工作负载是
-
工作负载A:50%读取和50%更新
-
工作负载C:100%读取
-
工作负载F:50%读取和50%更新/读取-修改-写入比率:50/50
-
仅自定义更新工作负载:100%更新
每个YCSB工作负载(A,C,F和UpdateOnly)各自运行15分钟,并且重复完整的运行5次,两次运行之间没有重新启动,以测量YCSB吞吐量*。显示的结果是5次运行中最后3次运行的平均值。为了避免第一轮和第二轮的损失,忽略了前两次测试。
一旦完成40GB的运行,我们就丢弃了可使用的用户,并重新生成了10亿行,以创建1TB的数据集大小,并在同一集群上以相同的方法重新运行了测试。
试验结果
YCSB结果为40GB
在40GB的情况下,数据可以完全容纳在集群上的61GB L1缓存中。在测试期间,在集群中观察到的L1缓存命中率接近99%。
提示: 对于较小的数据集,数据可以放入缓存中,我们还可以使用“加载时缓存”选项,并使用表选项PREFETCH_BLOCKS_ON_OPEN预热缓存以获取100%的缓存命中率
每个YCSB工作负载每5次运行15分钟,并取最后3次运行的平均值,以避免第一次运行损失。
下表显示了在区域服务器上40G L1缓存命中率达到99%时看到的结果:
运作方式 |
数字行动 |
通量 |
平均延迟 |
95延迟 |
99等待时间 |
(每秒操作数) |
(多发性硬化症) |
(多发性硬化症) |
(多发性硬化症) |
||
工作负载C |
148558364 |
165063 |
0.24 |
0.30 |
0.48 |
仅更新 |
56727908 |
63030 |
0.63 |
0.78 |
1.57 |
工作负载A |
35745710 |
79439 |
0.40 |
0.54 |
0.66 |
工作负载F |
24823285 |
55157 |
0.58 |
0.70 |
0.96 |
具有1TB数据集的YCSB结果
在1TB的情况下,数据无法放入集群上的61GB L1高速缓存或500GB OS缓冲区高速缓存中。在测试期间观察到的集群中L1缓存命中率为82-84%。
我们每5次将每个工作负载运行15分钟,并取最近3次运行的平均值,以避免第一次运行损失。
下表显示了在区域服务器上1TB L1缓存命中率达到82-84%时看到的结果:
运作方式 |
数字行动 |
通量 |
平均延迟 |
95延迟 |
99等待时间 |
(每秒操作数) |
(多发性硬化症) |
(多发性硬化症) |
(多发性硬化症) |
||
工作负载C |
2727037 |
3030 |
13.19 |
55.50 |
110.85 |
仅更新 |
56345498 |
62605 |
0.64 |
0.78 |
1.58 |
工作负载A |
3085135 |
6855 |
10.88 |
48.34 |
97.70 |
工作负载F |
3333982 |
3704 |
10.45 |
47.78 |
98.62 |
*吞吐率(ops / sec)=每秒操作数
分析
比较上面两个不同数据集大小的测试结果,我们可以看到当从具有预热缓存的40G数据集中更快地访问数据而不是从hdfs快速访问数据时,相同的工作负载吞吐量如何从每秒3K操作变化到每秒165K操作。存储。
下面的图表显示了吞吐量,并比较了使用2个不同大小的数据集运行时不同工作负载的吞吐量如何变化。在图表中,条形越高,吞吐量越好。
注意:吞吐量=每秒操作
如图所示,在40G情况下,读取数据如Workload A,Workload C和Workload F的YCSB工作负载具有更好的吞吐量,在40G情况下,数据容易放入缓存,而在1TB数据大小的情况下,必须使用HFile数据。从HDFS访问
从缓存命中率来看,40G数据集的缓存命中率接近99%,而1TB数据集的缓存命中率约为85%,因此在1TB情况下,有15%的数据是从hdfs存储中访问的。
在这两种情况下,我们运行的YCSB自定义仅更新工作负载都具有相同的吞吐量,因为它仅进行更新而没有读取。
在HBase性能期间,我们密切关注第95和第99个百分位延迟。平均延迟只是总吞吐量除以总时间,但是第95个百分位数和第99个百分位数显示了影响总工作负载吞吐量的实际异常值。在1TB的情况下,第95和第99个百分位的高延迟异常值会导致吞吐量下降,而在40GB的情况下,第99个百分位的低延迟缓存命中会导致总吞吐量增加。
下图显示了平均延迟,第95个百分位延迟和第99个百分位延迟的延迟比较,以及在使用不同大小的数据集运行时,不同工作负载的延迟差异。
在上面的图表中,很难看到代表40GB数据集延迟的条形图,因为它们与从HDFS访问数据的1TB数据集所观察到的延迟相比非常低。
我们使用等待时间值的对数绘制了等待时间图,以显示下表中的差异
如上所示,在40GB的情况下,缓存命中率接近99%,并且大多数工作负载数据在缓存中可用,因此延迟要低得多。与1TB数据集相比,由于必须从HDFS存储访问HFile数据,因此缓存命中率约为85%。
在40G情况下,从预热的缓存返回99%数据的Workload C的平均延迟和99延迟约为2 – 4 ms。在1TB情况下,相同Workload C的第99个百分位数延迟对于Workload C(只读工作负载)约为100ms。
这表明从堆上块高速缓存命中的高速缓存在大约2 ms内返回读取,并且高速缓存未命中以及从HDFS获取记录可能需要大约100 ms的时间。
建议
在运行YCSB基准测试时,数据集的大小会对性能结果产生重大影响,因此适当调整测试的大小非常重要。同时,查看缓存命中率以及最小延迟与第99个延迟之间的延迟差异,将有助于您找到与从集群中的基础存储访问数据相比的缓存命中的延迟。
注意
要检查区域服务器上工作负载的缓存命中率,可以使用以下命令
curl http://<region-server-host>:22102/jmx | grep -e l1CacheHitRatio -e l2CacheHitRatio
您还可以按照以下步骤从HBase Web UI中查看缓存命中率:
-
在HBase Web UI中,单击区域服务器
-
在“块高速缓存”部分下,选择L1(如果配置了L2,则选择L2)以查看高速缓存命中率。
屏幕快照显示了来自L1块缓存的缓存命中率,如下所示:
这是指向上面显示的HBase屏幕快照和块缓存的更多信息的链接https://docs.cloudera.com/runtime/7.2.2/configuring-hbase/topics/hbase-blockcache.html
感谢各位的阅读!关于“如何使用YCSB进行HBase性能测试”这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/137956.html