當前位置:首頁 » 編程軟體 » hbase編譯

hbase編譯

發布時間: 2023-04-10 14:39:37

A. hbase是什麼工具

將數據導入HBase中有如下幾種方式:使用HBase的API中的Put方法使用HBase 的bulk load 工具使用定製的MapRece Job方式 使用HBase的API中的Put是最直接的方法,用法也很容易學習。但針對大部分情況,它並非都是最高效的方式。當需要將海量數據在規定時間內載入HBase中時,效率問題體現得尤為明顯。待處理的數據量一般都是巨大的,這也許是為何我們選擇了HBase而不是其他資料庫的原因。在項目開始之前,你就該思考如何將所有能夠很好的將數據轉移進HBase,否則之後可能面臨嚴重的性能問題。 HBase有一個名為 bulk load的功能支持將海量數據高效地裝載入HBase中。Bulk load是通過一個MapRece Job來實現的,通過Job直接生成一個HBase的內部HFile格式文件來形成一個特殊的HBase數據表,然後直接將數據文件載入到運行的集群中。使用bulk load功能最簡單的方式就是使用importtsv 工具。importtsv 是從TSV文件直接載入內容至HBase的一個內置工具。它通過運行一個MapRece Job,將數據從TSV文件中直接寫入HBase的表或者寫入一個HBase的自有格式數據文件。盡管importtsv 工具在需要將文本數據導入HBase的時候十分有用,但是有一些情況,比如導入其他格式的數據,你會希望使用編程來生成數據,而MapRece是處理海量數據最有效的方式。這可能也是HBase中載入海量數據唯一最可行的方法了。當然我們可以使用MapRece向HBase導入數據,但海量的數據集會使得MapRece Job也變得很繁重。若處理不當,則可能使得MapRece的job運行時的吞吐量很小。在HBase中數據合並是一項頻繁執行寫操作任務,除非我們能夠生成HBase的內部數據文件,並且直接載入。這樣盡管HBase的寫入速度一直很快,但是若合並過程沒有合適的配置,也有可能造成寫操作時常被阻塞。寫操作很重的任務可能引起的另一個問題就是將數據寫入了相同的族群伺服器(region server),這種情況常出現在將海量數據導入到一個新建的HBase中。一旦數據集中在相同的伺服器,整個集群就變得不平衡,並且寫速度會顯著的降低。我們將會在本文中致力於解決這些問題。我們將從一個簡單的任務開始,使用API中的Put方法將MySQL中的數據導入HBase。接著我們會描述如何使用 importtsv 和 bulk load將TSV數據文件導入HBase。我們也會有一個MapRece樣例展示如何使用其他數據文件格式來導入數據。上述方式都包括將數據直接寫入HBase中,以及在HDFS中直接寫入HFile類型文件。本文中最後一節解釋在向HBase導入數據之前如何構建好集群。本文代碼均是以Java編寫,我們假設您具有基本Java知識,所以我們將略過如何編譯與打包文中的Java示例代碼,但我們會在示例源碼中進行注釋。

B. HBase探索篇 _ 單節點多RegionServer部署與性能測試

[toc]

隨著集群中總的Region數持續增長,每個節點平均管理的Region數已達550左右,某些大表的寫入流量一上來,Region Server就會不堪重負,相繼掛掉。

在HBase中,Region的一個列族對應一個MemStore,通常一個MemStore的默認大小為128MB(我們設置的為256MB),見參數 hbase.hregion.memstore.flush.size 。當可用內存足夠時,每個MemStore可以分配128MB的空間。

當表的寫入流量上升時,假設每個Region的寫入壓力相同,則理論上每個MemStore會平均分配可用的內存空間。

因此,節點中Region過多時,每個MemStore分到的蠢棗內存空間就會變小。此時,寫入很小的數據量,就會被強制flush到磁碟,進而導致頻繁刷寫,會對集群HBase與HDFS造成很大的壓力。

同時,Region過多導致的頻繁刷寫帶頌拆,又會在磁碟上產生非常多的HFile小文件,當小文件過多的時候,HBase為了優化查詢性能就會做Compaction操作,合並HFile,減少文件數量。當小文件一直很多的時候,就會出現 「壓縮風暴」。Compaction非常消耗系統的IO資源,還會降低數據的寫入速度,嚴重時會影響正常業務的進行。

關於每個Region Server節點中,Region數量大致合理的范圍,HBase官網上也給出了定義:

可見,通常情況下,每個節點擁有20-200個Region是比較正常的。

其實,每個Region Server的最大Region數量由總的MemStore內存大小決定。每個Region的每個列族會對應一個MemStore,假設HBase表都有一個列族,那麼每個Region只包含一個櫻彎MemStore。一個MemStore大小通常在128~256MB,見參數: hbase.hregion.memstore.flush.size 。默認情況下,RegionServer會將自身堆內存的40%(我們線上60%)(見參數: hbase.regionserver.global.memstore.size )提供給節點上的所有MemStore使用,如果所有MemStore的總大小達到該配置大小,新的更新將會被阻塞並且會強制刷寫磁碟。因此,每個節點最理想的Region數量應該由以下公式計算(假設HBase表都有統一的列族配置):

((RS memory) * (total memstore fraction)) / ((memstore size)*(column families))

其中:

以我們線上集群的配置舉例,我們每個RegionServer的堆內存是32GB,那麼節點上最理想的Region數量應該是: 32768*0.6/256 ≈ 76 (32768*0.6/128 ≈ 153)

上述最理想的情況是假設每個Region上的填充率都一樣,包括數據寫入的頻次、寫入數據的大小,但實際上每個Region的負載各不相同,有的Region可能特別活躍、負載特別高,有的Region則比較空閑。所以,通常我們認為2 3倍的理想Region數量也是比較合理的,針對上面舉例來說,大概200 300個Region左右算是合理的。

針對上文所述的Region數過多的隱患,以下內容主要從兩方面考慮來優化。

提高內存的目的是為了增加每個Region擁有的MemStore的空間,避免其寫入壓力上升時,MemStore頻繁刷寫,形成小的HFile過多,引起壓縮風暴,佔用大量IO。

但其實RS的堆內存並不是越大越好,我們開始使用HBase的時候,對CMS和G1相關的參數,進行了大量壓測,測試指標數據表明,內存分配的越大,吞吐量和p99讀寫平均延時會有一定程度的變差(也有可能是我們的JVM相關參數,當時調配的不合理)。

在我們為集群集成jdk15,設置為ZGC之後,多次壓測並分析JVM日誌之後,得出結論,在犧牲一定吞吐量的基礎上,集群的GC表現能力確實提升的較為明顯,尤其是GC的平均停頓時間,99.9%能維持在10ms以下。

而且ZGC號稱管理上T的大內存,停頓時間控制在10ms之內(JDK16把GC停頓時間控制在1ms內,期待JDK17 LTS),STW時間不會因為堆的變大而變長。

因此理論上,增加RS堆內存之後,GC一樣不會成為瓶頸。

之所以考慮在單節點上部署多個Region Server的進程,是因為我們單個物理機的資源配置很高,內存充足(三百多G,RS堆內存只分了32G)、而HBase又是弱計算類型的服務,平時CPU的利用率低的可憐,網路方面亦未見瓶頸,唯一掉鏈子的也就屬磁碟了,未上SSD,IO延遲較為嚴重。

當然,也曾考慮過虛擬機的方案,但之前YCSB壓測的數據都不太理想;K8s的調研又是起步都不算,沒有技術積累。因此,簡單、直接、易操作的方案就是多RS部署了。

以下內容先敘述CDH中多RS進程部署的一些關鍵流程,後續將在多RS、單RS、單RS大堆環境中,對集群進行基準性能測試,並對比試驗數據,分析上述兩種優化方案的優劣。

我們使用的HBase版本是 2.1.0-cdh6.3.2 ,非商業版,未上Kerberos,CDH中HBase相關的jar包已替換為用JDK15編譯的jar。

多Region Server的部署比較簡單,最關鍵的是修改 hbase-site.xml 中region server的相關埠,避免埠沖突即可。可操作流程如下。

修改所需配置文件

hbase-site.xml 配置文件一定不要直接從 /etc/hbase/conf 中獲取,這里的配置文件是給客戶端用的。CDH管理的HBase,配置文件都是運行時載入的,所以,找到HBase最新啟動時創建的進程相關的目錄,即可獲取到服務端最新的配置文件,如:/var/run/cloudera-scm-agent/process/5347-hbase-REGIONSERVER。需要准備的目錄結構如下:

不需要HBase完整安裝包中的內容(在自編譯的完整安裝包中運行RS進程時,依賴沖突或其他莫名其妙的報錯會折磨的你抓狂),只需要bin、conf目錄即可,pids文件夾是自定義的,RS進程對應pid文件的輸出目錄,start_rs.sh、stop_rs.sh是自定義的RS進程的啟動和關閉腳本

重點修改下圖標注的配置文件,

還有日誌文件名的一些輸出細節,可以按需在 bin/hbase-daemon.sh 中修改。

運行或關閉RS進程

中間有異常,請查看相關日誌輸出。

集群Region數瘋漲,當寫入存在壓力時,會導致RS節點異常退出。為了解決目前的這種窘境,本次優化主要從單節點多Region Server部署和提高單個Region Server節點的堆內存兩方面著手。

那這兩種優化方案對HBase的讀寫性能指標,又會產生什麼樣的影響呢?我們以YCSB基準測試的結果指標數據做為參考,大致評價下這兩種應急方案的優劣。

用於此次測試的HBase集群的配置

此次測試使用的數據集大小

測試方法

壓測時選擇的讀寫負載盡量模擬線上的讀寫場景,分別為:讀寫3/7、讀寫7/3、讀寫5/5;

壓測時唯一的變數條件是:多RS部署(32G堆,在每個節點上啟動3個RS進程,相當於集群中一共有15個RS節點)、單RS部署(32G小堆)和單RS部署(100G大堆),並盡可能保證其他實驗條件不變,每個YCSB的工作負載各自運行20分鍾左右,並且重復完整地運行5次,兩次運行之間沒有重新啟動,以測量YCSB的吞吐量等指標,收集的測試結果數據是5次運行中最後3次運行的平均值,為了避免第一輪和第二輪的偶然性,忽略了前兩次的測試。

YCSB壓測的命令是:

收集實驗數據後,大致得出不同讀寫負載場景下、各個實驗條件下的指標數據,如下圖。

上述的測試數據比較粗糙,但大致也能得出些結論,提供一定程度上的參考。

多RS進程部署的模式,起到了一定程度上的進程間資源隔離的作用,分擔了原先單台RS管理Region的壓力,最大化利用了物理機的資源,但多出來的一些Region Server,需要單獨的管理腳本和監控系統來維護,增加了維護成本。多個RS依賴同一台物理機,物理節點宕機便會影響多個RS進程,同時,某一個Region Server出現熱點,壓力過大,資源消耗過度,也許會引起同機其他進程的不良,在一定程度上,犧牲了穩定性和可靠性。

增加單個RS進程的堆內存,MemStore在一定程度上會被分配更充裕的內存空間,減小了flush的頻次,勢必會削弱寫入的壓力,但也可能會增加GC的負擔,我們或許需要調整出合適的GC參數,甚至需要調優HBase本身的一些核心參數,才能兼顧穩定和性能。然而,這就又是一件漫長而繁瑣的事情了,在此不過分探討。

面對性能瓶頸的出現,我們不能盲目地擴充機器,在應急方案採取之後,我們需要做一些額外的、大量的優化工作,這或許才是上上之策。

C. 如何搭建Hbase源碼閱讀環境,並能進行編譯運行

hbase源碼導入eclipse分三步:
1.svn下載源碼
2.mvn package -Dmaven.test.skip.exec=true編譯源碼
3.導入eclipse,可以用插件,用mvn eclipse:eclipse生成eclipse文件,導入eclipse。

D. Win7上編譯驅動,明明設置好了WLHBASE和W7BASE,卻還是不能編譯

這個是由於兼容性不好造成渣首的。 解決辦法:如燃數
1、更換電腦的操作系統為XP,在XP環境下編寫。
2、直接使用win7系統編寫針對於win7系統的程序,這個是發展趨勢。
3、更段廳換軟體利用其他第三方軟體進行編程製作。

E. hbase wal 是同步的嗎

hbase wal 是同步的。

HBase的數據文件都存儲在HDFS上,格式主要有兩種:HFile:HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進虛扒制文件,實際上StoreFile就是對HFile做了輕量級的包裝,即StoreFile底層就是HFile。

其中數據文件枯晌位置可為本地文件目錄,也可以分布式文件系統hdfs的路徑。當其為前者時,直接指定即可,也可以加前綴file:///而當差敗昌其偉後者時,必須明確指明hdfs的路徑,例如hdfs://mymaster:9000/path。

訪問介面:

1. Native Java API,最常規和高效的訪問方式,適合Hadoop MapRece Job並行批處理HBase表數據。

2. HBase Shell,HBase的命令行工具,最簡單的介面,適合HBase管理使用。

3. Thrift Gateway,利用Thrift序列化技術,支持C++,PHP,Python等多種語言,適合其他異構系統在線訪問HBase表數據。

4. REST Gateway,支持REST 風格的Http API訪問HBase, 解除了語言限制。

5. Pig,可以使用Pig Latin流式編程語言來操作HBase中的數據,和Hive類似,本質最終也是編譯成MapRece Job來處理HBase表數據,適合做數據統計。

F. 操作HBase報錯: Could not initialize class org.apache.hadoop.hbase.protobuf.ProtobufUtil

在 hbase-site.xm l中冊鍵卜, 如下配置是錯誤的, 要與 hdfs-site.xml 中 dfs.internal.nameservices 配置對應, 注釋中的是正確的.

dataFrame中有些字亮族段為州穗null.

更改shc的源碼, 重新編譯打包.

G. hbase的特點

hbase的特點:高可靠性、高性能、面向列、可伸縮的。

HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關系資料庫,它是一個適合於非結構化數據存儲的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

(7)hbase編譯擴展閱讀

訪問介面:

1. Native Java API,最常規和高效的訪問方式,適合Hadoop MapRece Job並行批處理HBase表數據

2. HBase Shell,HBase的命令行工具,最簡單的介面,適合HBase管理使用

3. Thrift Gateway,利用Thrift序列化技術,支持C++,PHP,Python等多種語言,適合其他異構系統在線訪問HBase表數據

4. REST Gateway,支持REST 風格的Http API訪問HBase, 解除了語言限制

5. Pig,可以使用Pig Latin流式編程語言來操作HBase中的數據,和Hive類似,本質最終也是編譯成MapRece Job來處理HBase表數據,適合做數據統計。

熱點內容
謎宮腳本 發布:2025-07-15 12:40:07 瀏覽:864
安卓手機語音操作在哪裡開啟 發布:2025-07-15 12:18:49 瀏覽:283
安卓導航儀上網卡插哪裡 發布:2025-07-15 12:01:58 瀏覽:453
把文件編譯成數據 發布:2025-07-15 11:53:16 瀏覽:542
mt4如何修改密碼 發布:2025-07-15 11:53:16 瀏覽:215
2021思域新款買哪個配置 發布:2025-07-15 11:33:24 瀏覽:772
路由搭建http伺服器 發布:2025-07-15 11:26:45 瀏覽:724
消遣解壓 發布:2025-07-15 11:26:43 瀏覽:393
ICL編譯 發布:2025-07-15 11:26:32 瀏覽:665
快看吧交易密碼多少 發布:2025-07-15 11:26:26 瀏覽:483