hbase源碼下載
A. 求《HBase權威指南5中文版》全文免費下載百度網盤資源,謝謝~
《HBase權威指南5中文版》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1akGkc0w946hLEfysNa9iVQ
簡介:探討了如何通過使用與HBase高度集成的Hadoop將HBase的可伸縮性變得簡單;把大型數據集分布到相對廉價的商業伺服器集群中;使用本地java客戶端,或者通過提供了REST、Avro和Thrift應用編程介面的網關伺服器來訪問HBase;了解HBase架構的細節,包括存儲格式、預寫日誌、後台進程等;在HBase中集成MapRece框架;了解如何調節集群、設計模式、拷貝表、導入批量數據和刪除節點等。
B. 【HBase】HBase 自動拆分和預分區
[TOC]
HBase 中,表會被劃分為1...n 個 Region,被託管在 RegionServer 中。
Region 二個重要的屬性:StartKey 與 EndKey 表示這個 Region 維護的 RowKey 范圍,當讀/寫數據時,如果 RowKey 落在某個 start-end key 范圍內,那麼就會定位到目標region並且讀/寫到相關的數據。
默認,HBase 在創建表的時候,會自動為表分配一個 Region,正處於混沌時期,start-end key 無邊界,所有 RowKey 都往這個 Region里分配。
當數據越來越多,Region 的 size 越來越大時,達到默認的閾值時(根據不同的拆分策略有不同的閾值),HBase 中該 Region 將會進行 split,會找到一個 MidKey 將 Region 一分為二,成為 2 個 Region。而 MidKey 則為這二個 Region 的臨界,左為 N 無下界,右為 M 無上界。< MidKey 被分配到 N 區,> MidKey 則會被分配到 M 區。
隨著數據量進一步擴大,分裂的兩個 Region 達到臨界後將重復前面的過程,分裂出更多的 Region。
Region 的分割操作是不可見的,Master 不會參與其中。RegionServer 拆分 Region的步驟是:先將該 Region 下線,然後拆分,將其子 Region 加入到 META 元信息中,再將他們加入到原本的 RegionServer 中,最後匯報 Master。
執行 split 的線程是 CompactSplitThread。
在 2.0.5 版本中,HBase 提供了 7 種自動拆分策略:
他們之間的繼承關系如下:
有三種配置方法:
0.94.0 之前的默認拆分策略,這種策略非常簡單,只要 Region 中的任何一個 StoreFile 的大小達到了 hbase.hregion.max.filesize 所定義的大小 ,就進行拆分。
1)相關參數:
hbase.hregion.max.filesize
2)部分源碼 :
拆分的閾值大小可在創建表的時候設置,如果沒有設置,就取 hbase.hregion.max.filesize 這個配置定義的值,如果這個配置也沒有定義,取默認值 10G。
3)拆分效果:
經過這種策略的拆分後,Region 的大小是均勻的,例如一個 10G 的Region,拆分為兩個 Region 後,這兩個新的 Region 的大小是相差不大的,理想狀態是每個都是5G。
**ConstantSizeRegionSplitPolicy **切分策略對於大表和小表沒有明顯的區分,閾值(hbase.hregion.max.filesize):
4)創建表時配置:
該策略繼承自 ConstantSizeRegionSplitPolicy,是 0.94.0 到 2.0.0 版本的默認策略,其 優化了原來 ConstantSizeRegionSplitPolicy 只是單一按照 Region 文件大小的拆分策略,增加了對當前表的分片數作為判斷因子 。當Region中某個 Store Size 達到 sizeToCheck 閥值時進行拆分,sizeToCheck 計算如下:
如果表的分片數為 0 或者大於 100,則切分大小還是以設置的單一 Region 文件大小為標准。如果分片數在 1~99 之間,則由 min(單一 Region 大小, Region 增加策略的初始化大小 * 當前 Table Region 數的3次方) 決定 。
Region 增加策略的初始化大小計算如下:
1)相關參數:
hbase.hregion.max.filesize
hbase.increasing.policy.initial.size
hbase.hregion.memstore.flush.size
2)部分源碼:
在默認情況,使用 策略拆分 Region 的過程是:
3)拆分效果:
和 ConstantSizeRegionSplitPolicy 一樣,也是均勻拆分。
不同的是, 切分策略彌補了ConstantSizeRegionSplitPolicy 的短板,能夠自適應大表和小表,並且在大集群條件下對於很多大表來說表現很優秀。
但並不完美,這種策略下很多小表會在大集群中產生大量小 Region,分散在整個集群中。而且在發生 Region 遷移時也可能會觸發 Region 分裂。
4)創建表時配置:
2.0 版本默認切分策略。SteppingSplitPolicy 是 的子類,其對 Region 拆分文件大小做了優化,如果只有1個 Region 的情況下,那第1次的拆分就是 256M,後續則按配置的拆分文件大小(10G)做為拆分標准。
1)相關參數:
同 。
2)全部源碼:
它的源碼只有一個方法,優化了 getSizeToCheck 方法,其他都是繼承 自 類。
3)拆分效果:
在 策略中,針對大表的拆分表現很不錯,但是針對小表會產生過多的 Region,SteppingSplitPolicy 則將小表的 Region 控制在一個合理的范圍,對大表的拆分也不影響。
4)創建表時配置:
KeyPrefixRegionSplitPolicy 是 的子類,該策略除了具備其父類自動調整 Region 拆分閾值大小、適應大小表的特點外,增加了對拆分點(splitPoint,拆分點就是 Region 被拆分處的 RowKey)的定義,可以保證有相同前綴的 RowKey不會被拆分到兩個不同的 Region 裡面。
1)相關參數:
在 的配置之上增加了一個參數。
KeyPrefixRegionSplitPolicy.prefix_length
2)部分源碼:
先從父類獲取拆分點,如果設置了 prefixLength > 0,就從父類拆分點中截取需要的前綴作為新的拆分點返回。
3)拆分效果:
KeyPrefixRegionSplitPolicy (SteppingSplitPolicy、、BusyRegionSplitPolicy (HBase-2.x Only))按照 RowKey 的前綴去拆分 Region,但是什麼時候拆分,原 Region 容量的最大值是多少還是需要使用 的方法去計算 。
如果所有數據都只有一兩個前綴,那麼採用默認的策略較好。 如果前綴劃分的比較細,查詢就比較容易發生跨 Region 查詢的情況,此時採用KeyPrefixRegionSplitPolicy 較好。
所以這個策略適用的場景是:
4)創建表時配置:
繼承自 ,也是根據 RowKey 前綴來進行拆分的。不同就是:KeyPrefixRegionSplitPolicy 是根據 RowKey 的固定前幾位字元來進行判斷,而 是根據分隔符來判斷的。
1)相關參數:
在 的配置之上增加了一個參數。
.delimiter
2)部分源碼:
先找到分隔符下標位置,然後從父類的拆分點截取出來。
3)拆分效果:
根據 RowKey 中指定分隔字元做為拆分,顯得更加靈活,如 RowKey 的值為「userid_eventtype_eventid」,userId 不是定長的,則 可以取 RowKey 值中從左往右且第一個分隔字元串之前的字元做為拆分串,在該示例中就是「userid」。
4)創建表時配置:
之前的策略都未考慮 Region 熱點問題,考慮某些 Region 可能被頻繁訪問,負荷很大,BusyRegionSplitPolicy 策略同樣繼承自 ,但主要針對 Region 問題,是在 2.x 中新增加的拆分策略。
1)相關參數:
在 的配置之上增加了如下參數:
hbase.busy.policy.blockedRequests
hbase.busy.policy.minAge
hbase.busy.policy.aggWindow
2)部分源碼:
在判斷是否需要進行拆分的時候,先調用父類的 shouldSplit 方法檢驗,如果需要則直接返回 true,否則需要判斷當前時間是否比開始時間大於 minAge 值,如果是的,則計算請求阻塞率 blockedReqRate,如果阻塞率大於設定的閾值,則進行拆分。
阻塞率的計算如下:
主要的計算邏輯是:請求的被阻塞率(aggBlockedRate) = curTime - prevTime 時間內新增的阻塞請求 / 這段時間的總請求。
3)拆分效果:
如果系統常常會出現熱點 Region,又對性能有很高的追求,那麼這種策略可能會比較適合。
它會通過拆分熱點 Region 來緩解熱點 Region 的壓力,但是根據熱點來拆分Region 也會帶來很多不確定性因素,因為不能確定下一個被拆分的 Region 是哪個。
4)創建表時配置:
DisabledRegionSplitPolicy 就是不使用 Region 拆分策略,將所有的數據都寫到同一個 Region 中。
1)全部源碼:
源碼很簡單,就是直接返回 false。
2)拆分效果:
這個策略極少使用。
即使在建表的時候合理的進行了預拆分,還沒有寫入的數據的時候就已經手動分好了 Region,但是隨著數據的持續寫入,我預先分好的 Region 的大小也會達到閾值,那時候還是要依靠 HBase 的自動拆分策略去拆分 Region。
但這種策略也有它的用途:
假如有一批靜態數據,一次存入以後不會再加入新數據,且這批數據主要是用於查詢,為了性能好一些,可以先進行預分區後,各個 Region 數據量相差不多,然後設置拆分策略為禁止拆分,最後導入數據即可。
3)創建表時配置:
已經有自動分區了,為什麼還需要預分區?
HBase 在創建表的時候,會自動為表分配一個Region,當一個 Region 達到拆分條件時(shouldSplit 為 true),HBase 中該 Region 將會進行 split,分裂為2個 Region,以此類推。表在進行 split 的時候,會耗費很多的資源,有大量的 io 操作,頻繁的分區對 HBase 的性能有很大的影響。
所以,HBase 提供了預分區功能,讓用戶可以在創建表的時候對表按照一定的規則分區。
假設初始 10 個 Region,那麼導入大量數據的時候,就會均衡到 10 個 Region 裡面,顯然比初始 1 個 Region 要好很多, 合理的預分區可以減少 Region 熱點問題,提升寫數據的性能和速度,而且也能減少後續的 split 操作 。
首先要明白數據的 RowKey 是如何分布的,然後根據 RowKey 的特點規劃要分成多少 Region,每個 Region 的 startKey 和 endKey 是多少,接著就可以預分區了。
比如,RowKey 的前幾位字元串都是從 0001~0010 的數字,這樣可以分成10個Region:
第一行為第一個 Region 的 stopKey。為什麼後面會跟著一個"|",是因為在ASCII碼中,"|"的值是124,大於所有的數字和字母等符號。
shell中建分區表
也可以通過指定 SPLITS_FILE 的值指定分區文件,從文件中讀取分區值,文件格式如上述例子所示:
預分區後,可以從 HBase ui 頁面觀察到:
HBase API 建預分區表
為防止熱點問題,同時避免 Region Split 後,部分 Region 不再寫數據或者很少寫數據。也為了得到更好的並行性,希望有好的 load blance,讓每個節點提供的請求處理都是均等的,並且 Region 不要經常 split,因為 split 會使 server 有一段時間的停頓,隨機散列加上預分區是比較好的解決方式。
預分區一開始就預建好了一部分 Region,這些 Region 都維護著自已的 start-end keys,再配合上隨機散列,寫數據能均等地命中這些預建的 Region,就能通過良好的負載,提升並行,大大地提高了性能。
hash + 預分區
在 RowKey 的前面拼接通過 hash 生成的隨機字元串,可以生成范圍比較隨機的 RowKey,可以比較均衡分散到不同的 Region 中,那麼就可以解決寫熱點問題。
假設 RowKey 原本是自增長的 long 型,可以將 RowKey 先進行 hash,加上本身 id ,組成rowkey,這樣就生成比較隨機的 RowKey 。
那麼對於這種方式的 RowKey 設計,如何去進行預分區?
partition + 預分區
partition 顧名思義就是分區式,這種分區有點類似於 maprece 中的 partitioner,將區域用長整數作為分區號,每個 Region 管理著相應的區域數據,在 RowKey 生成時,將 id 取模後,然後拼上 id 整體作為 RowKey 。
1. HBase Region 自動拆分策略
2. hbase預分區
C. 如何搭建Hbase源碼閱讀環境,並能進行編譯運行
hbase源碼導入eclipse分三步:
1.svn下載源碼
2.mvn package -Dmaven.test.skip.exec=true編譯源碼
3.導入eclipse,可以用插件,用mvn eclipse:eclipse生成eclipse文件,導入eclipse。
D. 如何使用Maven構建《hadoop權威指南3》隨書的源碼包
《hadoop:the definitive guide 3th》中的例子默認提供了一種編譯和構建jar包方法——maven,如果沒有maven你會發現編譯測試隨書的源碼會非常的麻煩(至少在命令行下),當然你也可以使用eclipse導入隨書的源碼再自己一個個的添加依賴性jar包(恐怕也不太容易)。不過還好有非常好的開源的軟體項目管理工具來幫助我們做這些無關於程序本身設計與架構的瑣碎的工作,那就是maven!
如果你對maven還不太了解,可以參看這里。
《hadoop:the definitive guide 3th》的源碼包可以從github中下載到,如下圖所示:
下面我們就可以切換到本書的源文件包的根目錄下使用maven來構建本書的jar包了:
% mvn package -DskipTests -Dhadoop.version=1.0.4
執行過這條命令後就是很長時間的等待,maven會到他的中央倉庫和apache的倉庫中下載所需要的jar包和pom.xml文件(這個過程可能要持續大約一個小時,要確保你的電腦已經連上網路,下載完成後在~/.m2/repository文件夾中——也即本地倉庫——可以看到已經下載下來的jar包和pom文件),然後再逐個構建根目錄下pom.xml中配置的moles,等所有的工作做完就可以看到已經打包的各個jar包,從而可以很方便的在命令行使用hadoop命令測試書中的代碼了。
E. 如何使用Maven構建《hadoop權威指南3》隨書的源碼包
執行完上述步驟後,輸入hbase命令出現如下界面,就說明已經安裝成功了(別忘了執行". ~/.bashrc"使配置的環境變數生效):
下面我們就可以切換到本書的源文件包的根目錄下使用maven來構建本書的jar包了:
% mvn package -DskipTests -Dhadoop.version=1.0.4
執行過這條命令後就是很長時間的等待,maven會到他的中央倉庫和apache的倉庫中下載所需要的jar包和pom.xml文件(這個過程可能要持續大約一個小時,要確保你的電腦已經連上網路,下載完成後在~/.m2/repository文件夾中——也即本地倉庫——可以看到已經下載下來的jar包和pom文件),然後再逐個構建根目錄下pom.xml中配置的moles,等所有的工作做完就可以看到已經打包的各個jar包,從而可以很方便的在命令行使用hadoop命令測試書中的代碼了
F. 如何在windows平台上用Eclipse調試運行HBase
1. 下載和安裝cygwin
2. 下載新的Zookeeper包和HBase包,我這里ZooKeeper版本為3.3.1,HBase版本為0.20.4
3. 把利用它們的源碼包在Eclipse下生成2個獨立的Project,注意:zookeeper工程,你要把那個conf目錄加入到工程的src中去
4. 修改zookeeper工程下的conf目錄中的zoo.cfg文件,例子如下:
# The number of milliseconds of each tick
tickTime=5000
# the directory where the snapshot is stored.
dataDir=D:/zookeeper-3.3.1/data
# the port at which the clients will connect
clientPort=2181
就是給zookeeper指定文件存放的地方以及埠
5.啟動zookeeper
在Eclipse中新建一個Run config, main class為:org.apache.zookeeper.server.quorum.QuorumPeerMain
啟動的程序參數為:D:/workspace/zookeeper3.3.1/conf/zoo.cfg(這個上面我們改動的東東啦,當然你可能不是這個路徑)
啟動的虛擬機參數為:
-Dzookeeper.log.dir=D:/workspace/zookeeper3.3.1/log
-Dzookeeper.root.logger=INFO,CONSOLE
如圖所示:
好了,這樣就可以在Eclipse中把ZooKeeper啟動起來了。
6 修改HBase project中的一個類
org.apache.hadoop.hbase.LocalHBaseCluster
找到它的main函數,把main函數改成下
public static void main(String[] args) throws IOException {
HBaseConfiguration conf = new HBaseConfiguration();
conf.set("hbase.zookeeper.quorum", "localhost");
conf.set("hbase.zookeeper.property.clientPort", "2181");
LocalHBaseCluster cluster = new LocalHBaseCluster(conf,1);
cluster.startup();
}
注意紅色那行: LocalHBaseCluster cluster = new LocalHBaseCluster(conf,1); 構造函數中的1是代表Region server的個數,在這里我只想起一個region server.
7 修改HBase的配置文件
在HBase project下的src中你可以看到hbase-default.xml和hbase-site.xml兩個文件,你改哪個都可以。
G. 如何在windows平台上用Eclipse調試運行HBase
1. 下載和安裝cygwin
2. 下載新的Zookeeper包和HBase包,我這里ZooKeeper版本為3.3.1,HBase版本為0.20.4
3. 把利用它們的源碼包在Eclipse下生成2個獨立的Project,注意:zookeeper工程,你要把那個conf目錄加入到工程的src中去
4. 修改zookeeper工程下的conf目錄中的zoo.cfg文件,例子如下:
# The number of milliseconds of each tick
tickTime=5000
# the directory where the snapshot is stored.
dataDir=D:/zookeeper-3.3.1/data
# the port at which the clients will connect
clientPort=2181
就是給zookeeper指定文件存放的地方以及埠
5.啟動zookeeper
在Eclipse中新建一個Run config, main class為:org.apache.zookeeper.server.quorum.QuorumPeerMain
啟動的程序參數為:D:/workspace/zookeeper3.3.1/conf/zoo.cfg(這個上面我們改動的東東啦,當然你可能不是這個路徑)
啟動的虛擬機參數為:
-Dzookeeper.log.dir=D:/workspace/zookeeper3.3.1/log
-Dzookeeper.root.logger=INFO,CONSOLE
H. Hbase源代碼不開放
不開放。Hbase源代碼是進行過加密設置的,沒有進行對外開放,是為了更好的做好保密工作,有非常重要的信息技術類文件,各部門領導員工都非常重視。
I. hbase源碼怎麼導入eclipse
如何使用Eclipse導入並運行源碼(
網上關於Eclipse配置和開發入門程序的文章很多,可是要麼很粗淺,要麼很高深,卻很少看到講解如何把別人的源碼導入到自己的Eclipse環境中編譯運行的描述。做為初學者,能夠學習網上一些優秀源碼是提高的必由之路,可是Eclipse卻不象VC和Delphi那樣容易上手,對於很多初學者來說,它似乎還是太難了點。在找不到很好的關於Eclipse入門教程的情況下,為了能運行網上下載的Java源碼,我頗費了一些時間尋找如何正確的導入源碼並運行的方法,不敢獨美,特貢獻出來與初學者共享。
運行環境:
Java EE 5.0
Eclipse 3.1 中文版
源代碼用例(都是Java Application):
模擬Windows記事本
連連看
上述的兩個源代碼在賽迪網上可以找到。關於JDK的配置、安裝和Eclipse的安裝本文不再贅述,讀者可以很容易地找到相關的資料。本文只講使用Eclipse來導入源代碼的方法。
首先確保你的工作空間已經創建好,在我的機器上工作空間所在的目錄是「e:/workspace」。源代碼存放路徑假設為「我的文檔/cai/Java/一個仿windows的記事本」和「我的文檔/cai/Java/連連看/kyodai」。
下面開始介紹導入源碼的方法。
◎選擇菜單「文件/新建/項目」,選擇「Java項目」,彈出「創建Java項目」對話框。
◎在「創建Java項目」中輸入「項目名」,項目名可以為任意名字,不必和main類的名字一樣。這里假設為「Notepad」。
在「內容」中有兩個單選按鈕,視你的需要來使用。其中「在工作空間中創建新項目」會在你的工作空間中創建一個新目錄,目錄名與項目名一致;「從現有資源創建項目」可以在源碼所在目錄中直接編譯運行,生成的class文件也會存放在源碼目錄中。
下面先講「在工作空間中創建新項目」的方法。
◎在「內容」中單選「在工作空間中創建新項目」,點擊「完成」按鈕。此時在e:/workspace下生成Notepad目錄。
◎下面需要導入源碼到工作空間去。選擇菜單「文件/導入」,選擇「文件系統」。彈出「文件系統」對話框。
◎在「從目錄」中選擇源碼存放目錄「我的文檔/cai/Java/一個仿windows的記事本」,勾選上所有的.java源碼,其他的垃圾不要選上。下面又有兩個選擇:對話框下方有兩個選項,若選擇「創建完整的文件夾結構」,就會按源碼所存放的路徑完整地在工作空間中創建目錄,創建完畢會由於main方法類的路徑不對而在包資源管理器內的圖標上顯示叉叉,無法編譯成功;若選擇「只創建選擇的文件夾」,則會在工作空間創建的目錄下導入所有的文件而不會保留原目錄,此時可以編譯成功。
◎若選擇「創建完整的文件夾結構」,導入完成後,選擇菜單「項目/屬性/Java構建路徑/源代碼」,點擊「添加文件夾」,把子目錄逐級點開,直到源代碼所在這級目錄為止,勾選上該目錄。彈出的提示對話框點擊確定即可。注意上級目錄不要勾選,否則會報錯。這樣這種方法導入的源碼也可以編譯運行了。
◎注意若源代碼中含有子目錄,在main程序中會有import ...的語句,此時要注意import後面的目錄級別,在選擇Java構建路徑時要勾選上import指明的上級目錄名。例如,連連看代碼中有子目錄topbar,在main程序中有import kyodai.topbar語句,那麼就要勾選到「我的文檔/cai/Java/連連看/」這級目錄,而非源碼所在的「我的文檔/cai/Java/連連看/kyodai」目錄。
◎在連連看源碼中,作者已經把所有源碼都打包成了一個Jar,此時只需要添加該Jar包而不需要導入其他源碼就可以運行了(但不能調試,因為Jar包中不含源碼)。方法是創建完新項目後,選擇菜單「項目/屬性/Java構建路徑」,點擊「庫」頁,點擊「添加外部JAR」按鈕,選擇源碼自帶的Jar包即可運行。
下面介紹「從現有資源創建項目」的方法。
◎在「創建Java項目」對話框中,點擊「下一步」按鈕,彈出「Java設置」對話框。
◎在「Java設置」對話框中選擇「庫」頁,選擇「添加JAR」,若找不到隨源碼提供的Jar包,就選擇「添加外部JAR」。一般如果Jar存放的目錄正確,在「添加JAR」中是可以找到該條目的。雙擊出現的Jar包即可添加進去。若不需要額外的庫支持,則點擊「完成」。
這樣,用上面兩種方法創建的項目就可以編譯運行了。下面就介紹運行的方法。
◎選擇菜單「Run/運行」,彈出「創建、管理和運行配置」對話框。
◎根據源碼的種類在左邊的列表中進行選擇。我們用的兩個例子都是Java應用程序,所以雙擊「Java應用程序」,在對話框右邊可以輸入運行的配置。
◎如果新建了項目還沒有運行過,那麼右邊的「項目」欄預設值即為剛創建的項目。在「名稱」欄中輸入運行配置的名稱,建議與項目名稱一致(也可以不一致),不能與其他的運行配置重名。
◎點擊「Main類」欄右方的「搜索」按鈕,一般只有一個main類,在彈出的對話框中雙擊下面那個欄目的main類即可。如果需要以其他的main方法做為程序入口,可以勾選上「Main類」欄下方的兩個復選框,選擇其他的入口。
◎如果需要增加特殊的環境變數,例如有的源碼可能需要添加classpath環境變數,則可以在「環境」頁中添加。
◎運行配置中的內容也會同樣反映在調試配置中,運行和調試使用相同的配置。
創建了一堆新項目後,包資源管理器中會有一堆亂七八糟項目,有些是你需要的,有些是早已廢棄不用的,你可以刪除那些不用的項目,方法是右鍵點擊該項目,選擇「刪除」。這里要提醒讀者一下的是,刪除對話框有兩個選項,問你是否刪除該項目目錄下的內容,預設是「不刪除內容」,如果選擇刪除,那麼那個目錄就整個被刪除掉了,如果你這個目錄下的東西還有用,那你只好哭了。
刪除掉沒用的項目後,運行/調試對話框中多餘的配置也可以刪除,方法是右鍵點擊不用的配置名,選擇刪除。
好了,這是我初學Eclipse的一些心得,希望能對廣大想要使用Eclipse又擔心它煩瑣的初學者有些幫助。
J. hbase 源碼 什麼語言開發的
是用java開發的,hbase包含兩個核心服務,一個是HMaster,一個是HRegionServer,在hbase部署的伺服器上調用jps命令能查看到這兩個進程。