From f238a92b6dfc63dd6a14ea49a7073d6f5ee01a73 Mon Sep 17 00:00:00 2001 From: tianhang Date: Mon, 22 Aug 2022 10:06:14 +0800 Subject: [PATCH] HBASE-27129 Add a config that allows us to configure region-level storage policies (#4547) Co-authored-by: Tang Tianhang Signed-off-by: Duo Zhang --- .../apache/hadoop/hbase/regionserver/HRegion.java | 6 ++++++ .../hbase/regionserver/HRegionFileSystem.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 951758d6b424..004180d39b09 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -256,6 +256,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi public static final String SPLIT_IGNORE_BLOCKING_ENABLED_KEY = "hbase.hregion.split.ignore.blocking.enabled"; + public static final String REGION_STORAGE_POLICY_KEY = "hbase.hregion.block.storage.policy"; + public static final String DEFAULT_REGION_STORAGE_POLICY = "NONE"; + /** * This is for for using HRegion as a local storage, where we may put the recovered edits in a * special place. Once this is set, we will only replay the recovered edits under this directory @@ -980,6 +983,9 @@ private long initializeRegionInternals(final CancelableProgressable reporter, coprocessorHost.preOpen(); } + String policyName = this.conf.get(REGION_STORAGE_POLICY_KEY, DEFAULT_REGION_STORAGE_POLICY); + this.fs.setStoragePolicy(policyName.trim()); + // Write HRI to a file in case we need to recover hbase:meta // Only the primary replica should write .regioninfo if (this.getRegionInfo().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java index 2d2965d7237c..9ac55759d9b9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java @@ -225,6 +225,20 @@ public void setStoragePolicy(String familyName, String policyName) { CommonFSUtils.setStoragePolicy(this.fs, getStoreDir(familyName), policyName); } + /** + * Set storage policy for a whole region.
+ * "LAZY_PERSIST", "ALL_SSD", "ONE_SSD", "HOT", "WARM", + * "COLD"
+ *
+ * See {@link org.apache.hadoop.hdfs.protocol.HdfsConstants} for more details. + * @param policyName The name of the storage policy: 'HOT', 'COLD', etc. See hadoop 2.6+ + * org.apache.hadoop.hdfs.protocol.HdfsConstants for possible list e.g 'COLD', + * 'WARM', 'HOT', 'ONE_SSD', 'ALL_SSD', 'LAZY_PERSIST'. + */ + public void setStoragePolicy(String policyName) { + CommonFSUtils.setStoragePolicy(this.fs, getRegionDir(), policyName); + } + /** * Get the storage policy of the directory of CF. * @param familyName The name of column family.