- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前使用的是 Apache HBase 的库存配置,其中 RegionServer 堆为 4G,BlockCache 大小为 40%,因此约为 1.6G。未配置 L2/BucketCache。
这是向 RegionServer 发出约 2K 次请求后的 BlockCache 指标。如您所见,已经有 block 被逐出,可能导致了一些未命中。
为什么他们在我们甚至没有接近限制时就被驱逐了?
Size 2.1 M 当前正在使用的 block 缓存大小(字节)
Free 1.5 G 当前可用于存储更多缓存条目的总空闲内存(字节)
Count 18 block 缓存中的 block 数
Evicted 14 被驱逐的 block 总数
驱逐 1,645 发生驱逐的总次数
平均 10,984 block 在驱逐时的平均年龄(秒)
StdDev 5,853,922 驱逐时区 block 年龄的标准差
命中 1,861 次缓存命中的请求数
命中缓存 1,854 缓存命中 block 请求,但只有在未命中时才将请求设置为缓存 block
Misses 58 缓存未命中但设置为缓存未命中 block 的 block 请求
未命中缓存 58 block 请求是缓存未命中但只有请求设置为使用 block 缓存
命中率 96.98% 命中数除以总请求数
最佳答案
您看到的是 LRU 处理具有三个优先级的 block 的效果:单访问、多访问和内存中。对于默认的 L1 LruBlockCache
类,它们的缓存份额可以设置为(括号中的默认值):
hbase.lru.blockcache.single.percentage
(25%)hbase.lru.blockcache.multi.percentage
(50%)hbase.lru.blockcache.memory.percentage
(25%)对于 4 GB 堆示例,并为缓存预留 40%,您有 1.6 GB 堆,根据上述百分比,每个优先级进一步分为 400 MB、800 MB 和 400 MB。
当一个 block 从存储中加载时,它通常被标记为单次访问,除非它所属的列族已配置为 IN_MEMORY = true
,将其优先级设置为内存中(显然).对于单访问 block ,如果另一个读访问正在请求同一个 block ,则将其标记为多访问优先级。
LruBlockCache
有一个内部逐出线程,每 10 秒运行一次,检查每个级别的 block 是否超过了允许的百分比。现在,如果您扫描一次更大的表,并假设缓存完全为空,则所有 block 都被标记为单次访问。如果表的大小为 1 GB,则您已将 1 GB 加载到 400 MB 的缓存空间中,然后逐出线程将在适当的时候减少该空间。事实上,根据扫描所用的时间,逐出线程的 10 秒在扫描期间会失效,一旦超过 25% 阈值就会开始逐出 block 。
驱逐将首先从单访问区域驱逐 block ,然后是多访问区域,最后,如果堆上仍有压力,则从内存区域驱逐 block 。这也是为什么您应该确保内存中标记的列族的工作集不超过配置的缓存区域。
你能做什么?如果你有大部分的单访问 block ,你可以调整上面的百分比来给 LRU 的单访问区域更多。
关于performance - HBase:为什么在达到 BlockCache 的最大大小之前会有被逐出的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35754169/
发出时Delete对于 hbase,我知道它不会立即删除数据。但是什么时候删除数据,我的意思是,物理上? 最佳答案 当您向 HBase 写入内容时,它会存储在内存存储 (RAM) 中,然后再写入磁盘。
同一行的列族属于同一个 RegionServer。 那么,这里的问题是一个 RegionServer 会在不同的机器上存储不同的列族吗? 最佳答案 不一定,但在某些时候它会。这是基本 HBase 架构
如果我想插入表格: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1
有时我想退出我在 HBase shell 中运行的命令,例如扫描操作通常需要太多时间。 所以我想停止运行这个命令,但我不想退出 HBase shell。 我常用的停止运行命令的方式,我使用了Ctrl+
有没有办法设置 Hbase 以便我们可以在同一个集群中创建多个数据库? 最佳答案 只是为了刷新主题:http://hbase.apache.org/book.html#namespace 5.3.1.
怎么看version的 hbase我在用? 你能下命令吗? 最佳答案 hbase version命令行界面中的命令给出了 version的 hbase正在使用中。 以下是来自 Cloudera 的两个
高级问题: HBase 是否对所有分布(因此不是实现的工件)通用的每行施加了最大大小,无论是在 方面吗?字节存储 或在 方面细胞数 ? 如果是这样: 限制是什么? 极限存在的原因是什么? 限制在哪里记
假设,假设我在数据仓库设置中有一个星型模式。 有一个非常非常长的事实表(想想几十亿到几万亿行)和几个低基数维度表(想想 100 个维度表)。每个事实表外键 指向一个维度表的主键是位图索引的。每个维度表
版本:Hadoop: 2.0.0-cdh4.3.1 HBase: 0.94.6-cdh4.3.1 我正在运行 cloudera quick start vm,这是我的小型远程 HBase Java 客
我正在尝试以完全分布式模式配置 HBase。 (使用 Ubuntu 12.04,Apache Hadoop 2.2(以伪模式运行,HBase 版本 0.98) 以下是我的 bashrc 设置: exp
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我正在尝试对位于 Hbase 中的两个表进行映射连接。我的目的是在hashmap中保留小表的记录并与大表进行比较,一旦匹配,再次将记录写入hbase中的表中。我使用 Mapper 和 Reducer
我正在尝试编写一个程序来连接到 HBase。但是当我执行以下命令时HBaseConfiguration.create();我收到以下错误:. "hbase-default.xml 文件似乎是旧版本的
基于HBase documentation ,再次遵循 Google BigTable 论文的引用,据说这些行是按行键的字典顺序存储的。 很明显,当我们在 rowkey 中有一个字符串或者如果我们将一
我有一个 hbase 表,其中的行键如 row1、row2、row3 .... 和 rowN,我想要的是获取行键从 row100 到 row200 的行,如何编写查询子句或将 hbase 表设计为让查
我正在尝试创建命名空间,但出现类似下面给出的错误 hbase(main):031:0> create namespace 'Aniruddha'
我发现为以下要求建模 HBase 表有困难。 我有一个表“商店”,它存储了商店的详细信息(必胜客)。 我有一个表格“订单”,其中包含交易摘要(总交易金额等...)。 我有另一个表“Order_Item
谁能告诉我如果在不首先禁用表的情况下使用“alter”命令可能影响表结构的可能影响? 据我所知,禁用表意味着关闭与表的所有连接。如果我在不禁用表的情况下使用 alter,可能会发生什么异常情况? 我正
我无法将表从 HBase 导出到 HDFS。下面是错误跟踪。它是相当大的尺寸。还有其他方法可以导出吗? 我使用以下命令导出。我增加了 rpc 超时,但工作仍然失败。 sudo -u hdfs hbas
我是一名优秀的程序员,十分优秀!