hbase replication原理分析

本文只是從總體流程來分析replication過程,很多細節沒有提及,下一篇文章準備多分析分析細節。
replicationSource啟動過程
org.apache.hadoop.hbase.regionserver.HRegionServer#startServiceThreads ->
org.apache.hadoop.hbase.replication.regionserver.Replication#startReplicationService ->
?//初始化replicationManager
org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager#init ->
//在init階段for循環把所有的replicationPeers添加到source里,即每個replicationPeer對應一個source,也就是可以添加多個slave cluster,replicationPeers從zookeeper /hbase/replication/peers目錄取
org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager#addSource ->
//在addSource階段生成ReplicationSource并啟動ReplicationSource,ReplicationSource本身是一個線程
org.apache.hadoop.hbase.replication.regionserver.ReplicationSource#startup
//ReplicationSource線程啟動,進入while循環工作
replicationSource大致工作流程
  1. while(isAlive())進行主體循環
  2. 從WAL文件獲取List<WAL.Entry>
  3. 通過調用shipEdits方法發送數據
  4. 調用replicationEndpoint replicate方法發送數據
  5. 最終調用admin.replicateWALEntry通過rpc發送數據
?
regionserver如何從slave cluster中選取regionserver當做復制節點
  1. replication過程需要連接peer(slave cluster),首先要獲取這個peer所有活著的regionservers
  2. 拿到所有regionservers信息之后,開始選擇哪些regionservers作為replication的對象
  3. 選哪些regionservers當做sink由peer活著的regionserver個數*ratio(默認值0.1)決定,regionservers先shuffle打亂順序后再截取
  4. 如果選擇的sink(regionserver)個數為0,一直等待peer上線,也就是slave cluster沒有啟動的情況
  5. 下面源碼可以解釋如何選擇regionserver當做sink
  private void connectToPeers() {getRegionServers();int sleepMultiplier = 1;// Connect to peer cluster first, unless we have to stopwhile (this.isRunning() && replicationSinkMgr.getSinks().size() == 0) {replicationSinkMgr.chooseSinks();if (this.isRunning() && replicationSinkMgr.getSinks().size() == 0) {if (sleepForRetries("Waiting for peers", sleepMultiplier)) {sleepMultiplier++;     //倍數最多為默認配置的300倍,也就是每次sleep最長間隔是300秒
        }}}}void chooseSinks() {List<ServerName> slaveAddresses = endpoint.getRegionServers();Collections.shuffle(slaveAddresses, random);int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);sinks = slaveAddresses.subList(0, numSinks);lastUpdateToPeers = System.currentTimeMillis();badReportCounts.clear();}/*** Do the sleeping logic* @param msg Why we sleep* @param sleepMultiplier by how many times the default sleeping time is augmented* @return True if <code>sleepMultiplier</code> is &lt; <code>maxRetriesMultiplier</code>*/protected boolean sleepForRetries(String msg, int sleepMultiplier) {try {if (LOG.isTraceEnabled()) {LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);}Thread.sleep(this.sleepForRetries * sleepMultiplier);} catch (InterruptedException e) {LOG.debug("Interrupted while sleeping between retries");}return sleepMultiplier < maxRetriesMultiplier;}this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);
this.ratio = conf.getFloat("replication.source.ratio", DEFAULT_REPLICATION_SOURCE_RATIO);

?

??? 總結
  1. 每個slave cluster對應一個replicationSource線程,各個slave復制互不干擾
  2. 每個replicationSource是單線程進行傳輸數據,改成多線程并發傳可能更好
  3. 數據是通過rpc發送過去,調用slave cluster regionserver RSRpcServices的replicateWALEntry方法

?

轉載于:https://www.cnblogs.com/yueweimian/p/6520390.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253221.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

8168

http://blog.csdn.net/crushonme/article/details/10287693 http://blog.csdn.net/yangxueble/article/details/10138763

Mysql查詢結果只有一條的情況下把值賦值給變量,再用if else 流程判斷

1 BEGIN 2 set n(SELECT count(day) from log where dayCURDATE()); 3 IF n0 THEN 4 call m_LogInsert(); 5 ELSE 6 call m_LoginCheck(); 7 end if; 8 end 轉載于:https://www.cnblogs.com/mengms/p/7629486.html

近距離無線通信技術對比

定義&#xff1a;無線通信是利用電磁波信號在自由空間中傳播的特性進行信息交換的一種通信方式。 優點&#xff1a;成本低、無物理線路&#xff0c;不受工業環境限制&#xff0c;環境適應能力強&#xff1b; 故障診斷簡單&#xff0c;可遠程診斷&#xff0c;擴展性強&#xff…

看不清的融資迷局 二線玩家字節跳動在打什么主意?

互聯網似乎對離經叛道者總是多一分關注&#xff0c;吃瓜心態隨著時間的推進越來越濃烈。 其中&#xff0c;今日頭條成了“看熱鬧”時代最佳的“演員”之一&#xff0c;供看客消遣&#xff1a;其母公司字節跳動一個融資傳聞從8月炒到了10月&#xff0c;即便是媒體通過信源確認這…

第3章-動態基礎分析實驗

Lab 3-1 Question: 1.先對文件使用PEID進行查殼,顯示文件被加殼處理過 2.使用Dependency Walker查看文件導入函數&#xff0c;文件只有一個DLL而且只有一個導入函數Exitprocess 3.使用Strings程序查看字符串&#xff0c;發現可疑字符串。 4.動態分析前期準備 4.1 對系統進行初始…

如何優化增強第三方庫?

開發中&#xff0c;我們不可避免要使用&#xff0c;別人花很多時間打磨好的輪子&#xff0c;輪子好用&#xff0c;但有時卻無法完全滿足我們的要去&#xff0c;這時我們不可避免的要去修改增強一下這個庫&#xff0c;如何增強&#xff1f; 我認為&#xff0c;一般有兩種修改的方…

C語言變長數組data[0]【總結】

C語言變長數組data[0]【總結】 1、前言 今天在看代碼中遇到一個結構中包含char data[0]&#xff0c;第一次見到時感覺很奇怪&#xff0c;數組的長度怎么可以為零呢&#xff1f;于是上網搜索一下這樣的用法的目的&#xff0c;發現在linux內核中&#xff0c;結構體中經常用到data…

Excel 轉為 MySQL 語句

一、方法 一、假設你的表格有A、B、C三列數據&#xff0c;希望導入到你的數據庫中表格table&#xff0c;對應的字段分別是col1、col2、col3 二、在你的表格中增加一列&#xff0c;利用excel的公式自動生成sql語句&#xff0c;具體方法如下&#xff1a; 1、增加一列&#xff08;…

CentOS7下安裝zookeeper3.4.9

獲取zookeeper官方安裝包 1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz 解壓該文件包 1 tar zxf zookeeper-3.4.9.tar.gz 進入conf文件夾并創建新配置文件 1 cd zookeeper-3.4.9/conf 2 vi zoo.cfg 在config文件中加…

union 和 struct 的區別與聯系

union &#xff08; 共用體&#xff09;&#xff1a;構造數據類型,也叫聯合體 用途&#xff1a;使幾個不同類型的變量共占一段內存(相互覆蓋) struct ( 結構體 )&#xff1a;是一種構造類型 用途&#xff1a; 把不同的數據組合成一個整體——自定義數據類型 主要區別&#x…

Android系統中標準Intent的使用

Android系統用于Activity的標準Intent 1.根據聯系人ID顯示聯系人信息 Intent intentnew Intent(); intent.setAction(Intent.ACTION_VIEW);//顯示聯系人信息 intent.setData(Uri.parse("content://contaccts/people/492")); startActivity(intent); 2.根據聯系人ID顯…

開關電源簡介

1. 基本分類 DC-DC BULK電源 DC-DC BOOST電源 DC-DC BULK/BOOST電源 DC-DC BOOST/BYPASS電源 2. 典型拓撲結構 BULK電路拓撲 降壓型電源 串聯關系在開關管S導通時&#xff0c;二極管VD負極電壓高于正極反偏截止&#xff0c;此時電流經過電感L向電容和負載供電&#x…

Office 2016中Excel的部分快捷方式

【Ctrl下箭頭】 拉到最后一行 【Alt 】一秒求和 【CtrlEnter】 一秒輸入相同數據 【Ctrld】 一秒豎向填充不連續區域 【Ctrlr】 一秒向右填充數據 【Ctrle】 批量提取字符 【Ctrl1】 調出 設置單元格格式窗口 【Ctrlz】 撤銷上一步操作 【Ctrly】 恢復上一步 【F4】 重復上一步…

基于Spring開發的DUBBO服務接口測試

基于Spring開發的DUBBO服務接口測試 知識共享主要內容&#xff1a; 1、 Dubbo相關概念和架構&#xff0c;以及dubbo服務程序開發步驟。 2、 基于Spring開發框架的dubbo服務接口測試相關配置。 3、 spring testjunit和spring testTestNG兩種測試框架腳本編寫方法。 一、 …

ioctl之FIONREAD

在學習ioctl 時常常跟 read, write 混淆。其實 ioctl 是用來設置硬件控制寄存器&#xff0c;或者讀取硬件狀態寄存器的數值之類的。 而read,write 是把數據丟入緩沖區&#xff0c;硬件的驅動從緩沖區讀取數據一個個發送或者把接收的數據送入緩沖區。 ioctl(keyFd, FIONREAD, &a…

電感基礎與選型介紹

電感是一種常見的被動元件&#xff0c;常用在LC振蕩電路、中低頻的濾波電路&#xff0c;DCDC能量轉換電路中&#xff0c;其應用頻率一般不超過50MHz。 1.電感的主要作用 通直流&#xff0c;阻交流阻交流變化&#xff0c;保持電流穩定----楞次定律濾波 2.電感的主要分類 3.電…

[題解]Codeforces Round #519 - B. Lost Array

【題目】 B. Lost Array 【描述】 Bajtek有一個數組x[0],x[1],...,x[k-1]但被搞丟了&#xff0c;但他知道另一個n1長的數組a&#xff0c;有a[0]0&#xff0c;對i1,2,...,n。由此可以找到數組x[0],x[1],...,x[k-1]的一些可能情況&#xff0c;即滿足這個關系的數組x[0],x[1],...,…

Python正則替換字符串函數re.sub用法示例(1)

本文實例講述了Python正則替換字符串函數re.sub用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; python re.sub屬于python正則的標準庫,主要是的功能是用正則匹配要替換的字符串然后把它替換成自己想要的字符串的方法re.sub 函數進行以正則表達式為基礎的替換工作…

LeetCode 24 Swap Nodes in Pairs (交換相鄰節點)

題目鏈接&#xff1a; https://leetcode.com/problems/swap-nodes-in-pairs/?tabDescriptionProblem: 交換相鄰的兩個節點如上圖所示&#xff0c;遞歸進行交換。從最尾端開始&#xff0c;當最尾端只有一個節點時&#xff0c;停止交換否則執行 swap(head.next) 參考代碼&#x…