|
| 1 | +--- |
| 2 | +title: 傲来大数据方向HBase组优化日报-Day8 |
| 3 | +date: 2025-05-15 17:18:38 +08:00 |
| 4 | +filename: 2025-05-15-EulixOS-HBase-Day8 |
| 5 | +categories: |
| 6 | + - Study |
| 7 | + - HBase |
| 8 | +tags: |
| 9 | + - BigData |
| 10 | + - DataBase |
| 11 | + - EulixOS |
| 12 | +dir: Study/HBase |
| 13 | +share: true |
| 14 | +--- |
| 15 | +进行HBase是否采用JNI动态链接库版本的布隆过滤器进行探究。 |
| 16 | + |
| 17 | +### 验证1--LOG验证 |
| 18 | + |
| 19 | +采用两组测试数据,一组数据在开启了布隆过滤器的表中进行,一组在没有开启布隆过滤器的表中进行。 |
| 20 | + |
| 21 | +查看了$HBASE_HOME/logs/hbase-root-master-Legion-Eulix.out中的数据,发现,在未开启布隆过滤器的表测试的时候,log信息并没有出现。当开启布隆过滤器的表开始测试的时候,我们手动在JNI层的CPP文件中设置的DEBUG信息一下子出现了。并且短短时间就出现了很多次。 |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | +>在实验中发现,如果表中已经存在很多数据,即使只是启动测试脚本,布隆过滤器也会被访问几次,推断是在脚本开始进行布隆测试表删除的时候会调用? |
| 26 | +
|
| 27 | + |
| 28 | + |
| 29 | +设计验证实验--手动在JNI实现的cpp文件中添加延迟操作,这样的话JNI版本的HBase在开启布隆过滤器进行操作之后,速度应该会大幅度下降。 |
| 30 | + |
| 31 | +但是在实验过程中注意到,如果手动设置的延迟太大,可能会造成其他组件timeout的现象,所以这个延迟需要把控好,根据本人测试,设置到800ms观测到的现象比较明显(代价是跑测试很耗时)。 |
| 32 | + |
| 33 | +另外在测试的过程中根据LOG得出一个**猜想**,即使在开启了布隆过滤器的表中进行读操作,若读取的行数过于小,布隆过滤器可能不会开启,得出此猜想的依据是: |
| 34 | + |
| 35 | +在参数为`参数: 表名=BloomFilterTest, 行数=300000, 线程数=4, 行大小=100, 快速模式=true, 跳过扫描=false, 仅不存在行测试=true`的时候,虽然未设置布隆过滤器的表在读写或者删表的时候,会偶尔的调用几次布隆过滤器,但是在执行布隆过滤器表的读操作时候,频繁的访问了非常多次布隆过滤器。 |
| 36 | + |
| 37 | +在参数为`参数: 表名=BloomFilterTest, 行数=5000, 线程数=4, 行大小=100, 快速模式=true, 跳过扫描=false, 仅不存在行测试=true`的时候,在执行布隆过滤器表的读操作时候,好像并未出现频繁访问的情况,不过也可能是测试数据过小,所以我们稍微改大测试参数再次尝试。 |
| 38 | + |
| 39 | +在参数为`参数: 表名=BloomFilterTest, 行数=100000, 线程数=4, 行大小=100, 快速模式=true, 跳过扫描=false, 仅不存在行测试=true`的时候,在执行布隆过滤器表的读操作时候,也未出现频繁访问的情况 |
| 40 | + |
| 41 | +所以可得出结论,表数据太小的时候,布隆过滤器并不会出现显著作用。 |
| 42 | + |
| 43 | +### SLEEP语句验证 |
| 44 | + |
| 45 | +在JNI层的CPP文件中调用sleep语句,让布隆过滤器表性能更慢,检查HBase在执行相关测试时是否受到影响判断是否采用了JNI版本。 |
| 46 | + |
| 47 | + |
| 48 | + |
| 49 | +实际测试中,未开启布隆过滤器的表在行数=300000, 线程数=4, 行大小=100的测试条件下,只需要2分钟即可完成随机读不存在表的测试,而开启了布隆过滤器的表则运行了1个多小时都未完成(200ms延迟情况下),并且查看日志,发现日志行数已经超过400万行。并且开启布隆过滤器的表的读操作并未受到影响。可以得到确实采用了JNI版本的HBase。 |
| 50 | + |
| 51 | +在修改测试数据并将延迟手动将为10ms以后,测试总算能在可控时间内跑完了,可以看出布隆表读性能非常低,可知HBase在采用我们编辑过的布隆过滤器。 |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | + |
0 commit comments