From 0d02fcc23a45893b08f90dcebff00956f556e2b2 Mon Sep 17 00:00:00 2001 From: Jingyun Tian Date: Thu, 21 Feb 2019 19:42:23 +0800 Subject: [PATCH] HBASE-21730 Update HBase-book with the procedure based WAL splitting --- src/main/asciidoc/_chapters/architecture.adoc | 35 ++++++++++++++++++ src/site/resources/images/WAL_splitting.png | Bin 0 -> 38049 bytes 2 files changed, 35 insertions(+) create mode 100644 src/site/resources/images/WAL_splitting.png diff --git a/src/main/asciidoc/_chapters/architecture.adoc b/src/main/asciidoc/_chapters/architecture.adoc index 3ed4fb3ac7..dcbfc54e56 100644 --- a/src/main/asciidoc/_chapters/architecture.adoc +++ b/src/main/asciidoc/_chapters/architecture.adoc @@ -1371,6 +1371,41 @@ Due to an asynchronous implementation, in very rare cases, the split log manager For that reason, it periodically checks for remaining uncompleted task in its task map or ZooKeeper. If none are found, it throws an exception so that the log splitting can be retried right away instead of hanging there waiting for something that won't happen. +==== WAL splitting based on procedureV2 +After HBASE-20610, we introduce a new way to do WAL splitting coordination by procedureV2 framework. This can simplify the process of WAL splitting and no need to connect zookeeper any more. + +[[background]] +.Background +Currently, splitting WAL processes are coordinated by zookeeper. Each region server are trying to grab tasks from zookeeper. And the burden becomes heavier when the number of region server increase. + +[[implementation.on.master.side]] +.Implementation on Master side +During ServerCrashProcedure, it will create one SplitWALProcedure for each WAL file which should be split. Then each SplitWALProcedure will spawn a SplitWalRemoteProcedure to send the request to region server. +SplitWALProcedure is a StateMachineProcedure and here is the state transfer diagram. + +.WAL_splitting_coordination +image::WAL_splitting.png[] + +[[implementation.on.region.server.side]] +.Implementation on Region Server side +Region Server will receive a SplitWALCallable and execute it, which is much more straightforward than before. It will return null if success and return exception if there is any error. + +[[preformance]] +.Performance +According to tests on a cluster which has 5 regionserver and 1 master. +procedureV2 coordinated WAL splitting has a better performance than ZK coordinated WAL splitting no master when restarting the whole cluster or one region server crashing. + +[[enable.this.feature]] +.Enable this feature +To enable this feature, first we should ensure our package of HBase already contains these code. If not, please upgrade the package of HBase cluster without any configuration change first. +Then change configuration 'hbase.split.wal.zk.coordinated' to false. Rolling upgrade the master with new configuration. Now WAL splitting are handled by our new implementation. +But region server are still trying to grab tasks from zookeeper, we can rolling upgrade the region servers with the new configuration to stop that. + +* steps as follows: +** Upgrade whole cluster to get the new Implementation. +** Upgrade Master with new configuration 'hbase.split.wal.zk.coordinated'=false. +** Upgrade region server to stop grab tasks from zookeeper. + [[wal.compression]] ==== WAL Compression ==== diff --git a/src/site/resources/images/WAL_splitting.png b/src/site/resources/images/WAL_splitting.png new file mode 100644 index 0000000000000000000000000000000000000000..004f4738387baf4f4babf2d34adaeb07bdb62f06 GIT binary patch literal 38049 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≦@0zM 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