Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
Reviewed
-
Description
Some users end up hitting meta hard. Bulk is probably because our client goes to meta too often, and the real 'fix' for a saturated meta is splitting it, but the encoding that came in with HBASE-16213, ROW_INDEX_V1, could help in the near term. It adds an index on hfile blocks and helped improve random reads against user-space tables (less compares as we used index to go direct to requested Cells rather than look at each Cell in turn until we found what we wanted – see RN on HBASE-16213 for citation).
I also noticed code-reading that we don't enable blooms on hbase:meta tables; that could save some CPU and speed things up a bit too:
// Disable blooms for meta. Needs work. Seems to mess w/ getClosestOrBefore.
.setBloomFilterType(BloomType.NONE)
This issue is about doing a bit of perf compare of encoding on vs current default (and will check diff in size of indexed blocks).
Meta access is mostly random-read I believe (A review of a user's access showed this so at least for their workload). The nice addition, HBASE-19722 Meta query statistics metrics source, would help verify if it saw some usage on a prod cluster.
If all is good, I'd like to make a small patch, one that could be easily backported, with minimal changes in it.
As is, its all a little awkward as the meta table schema is hard-coded and meta is immutable – stuff we'll have to fix if we want to split meta – so in the meantime it requires a code change to enable (and a backport of HBASE-16213 – this patch is in 1.4.0 only currently, perhaps that is enough). Code change to enable is small:
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java index 28c7ec3c2f..8f08f94dc1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java @@ -160,6 +160,7 @@ public class FSTableDescriptors implements TableDescriptors { .setScope(HConstants.REPLICATION_SCOPE_LOCAL) // Disable blooms for meta. Needs work. Seems to mess w/ getClosestOrBefore. .setBloomFilterType(BloomType.NONE) + .setDataBlockEncoding(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.ROW_INDEX_V1) .build()) .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(HConstants.TABLE_FAMILY) .setMaxVersions(conf.getInt(HConstants.HBASE_META_VERSIONS,
Attachments
Issue Links
- is related to
-
HBASE-23705 Add CellComparator to HFileContext
- Resolved
-
HBASE-23279 Switch default block encoding to ROW_INDEX_V1
- Resolved
-
HBASE-23055 Alter hbase:meta
- Resolved
- links to
1.
|
Add CellComparator to HFileContext | Resolved | Michael Stack |