From c2ac1d58338e231204224d5e8f8b5cb92312adff Mon Sep 17 00:00:00 2001 From: Reid Chan Date: Mon, 26 Feb 2018 16:55:34 +0800 Subject: [PATCH] HBASE-20064 Disable MOB threads that are running whether you MOB or not --- hbase-common/src/main/resources/hbase-default.xml | 8 ++++++++ .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 7 +++++-- .../src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java | 8 +++++++- .../src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java | 9 +++++++++ src/main/asciidoc/_chapters/hbase_mob.adoc | 3 ++- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/hbase-common/src/main/resources/hbase-default.xml b/hbase-common/src/main/resources/hbase-default.xml index 61f0461f84..e6aeeed35c 100644 --- a/hbase-common/src/main/resources/hbase-default.xml +++ b/hbase-common/src/main/resources/hbase-default.xml @@ -1678,6 +1678,14 @@ possible configurations would overwhelm and obscure the important. 1 Abort only all of the handers have died. + + hbase.mob.enable + false + + Flag to enable mob, false by default to avoid unnecessary threads and chores in master side. + If true, master will create cleaner chores and compaction threads for mob files. + + hbase.mob.file.cache.size 1000 diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 8a54264d14..b9f265c915 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -137,6 +137,7 @@ import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager; import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure; import org.apache.hadoop.hbase.master.snapshot.SnapshotManager; import org.apache.hadoop.hbase.mob.MobConstants; +import org.apache.hadoop.hbase.mob.MobUtils; import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer; import org.apache.hadoop.hbase.monitoring.MonitoredTask; import org.apache.hadoop.hbase.monitoring.TaskMonitor; @@ -961,8 +962,10 @@ public class HMaster extends HRegionServer implements MasterServices { status.setStatus("Checking ZNode ACLs"); zooKeeper.checkAndSetZNodeAcls(); - status.setStatus("Initializing MOB Cleaner"); - initMobCleaner(); + if (MobUtils.isMobEnable(conf)) { + status.setStatus("Initializing MOB Cleaner"); + initMobCleaner(); + } status.setStatus("Calling postStartMaster coprocessors"); if (this.cpHost != null) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java index 4afd75b9c6..fed8938254 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java @@ -97,7 +97,13 @@ public final class MobConstants { public static final String MOB_COMPACTION_THREADS_MAX = "hbase.mob.compaction.threads.max"; public static final int DEFAULT_MOB_COMPACTION_THREADS_MAX = 1; - private MobConstants() { + /** + * Flag to enable mob, false by default to avoid unnecessary threads and chores in master side. + * If true, master will create cleaner chores and compaction threads for mob files. + */ + public static final String HBASE_MOB_ENABLE = "hbase.mob.enable"; + + private MobConstants() { } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java index 9fa4e4cf83..5a33212331 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java @@ -1012,4 +1012,13 @@ public final class MobUtils { id.setDate(dateStr); return skipCompcation; } + + /** + * If mob is enable. + * @param conf configuration file + * @return true is enable, false otherwise + */ + public static boolean isMobEnable(Configuration conf) { + return conf.getBoolean(MobConstants.HBASE_MOB_ENABLE, false); + } } diff --git a/src/main/asciidoc/_chapters/hbase_mob.adoc b/src/main/asciidoc/_chapters/hbase_mob.adoc index 5da0343958..8500e3aaf4 100644 --- a/src/main/asciidoc/_chapters/hbase_mob.adoc +++ b/src/main/asciidoc/_chapters/hbase_mob.adoc @@ -44,7 +44,8 @@ take advantage of MOB, you need to use <>. Optionally, configure the MOB file reader's cache settings for each RegionServer (see <>), then configure specific columns to hold MOB data. Client code does not need to change to take advantage of HBase MOB support. The -feature is transparent to the client. +feature is transparent to the client. But `hbase.mob.enable` should be set true +explicitly enable in configuration, and restart cluster. === Configuring Columns for MOB -- 2.15.0