通過 Windows 命令提示符(cmd)在桌面新建文件夾,并在該文件夾中編譯、運行一段 Java 程序段
831
2025-04-01
示例數(shù)據(jù)
給出一份我們?nèi)粘6伎梢越佑|到的數(shù)據(jù)樣例,先簡單給出示例數(shù)據(jù)的字段定義:
本文力求簡潔,僅給出了最簡單的示例。如下是”虛構(gòu)”的樣例數(shù)據(jù):
寫數(shù)據(jù)之前:建立連接
Login
在啟用了安全特性的前提下,Login階段是為了完成用戶認證(確定用戶的合法身份),這是后續(xù)一切安全訪問控制的基礎(chǔ)。
當前Hadoop/HBase僅支持基于Kerberos的用戶認證,ZooKeeper除了Kerberos認證,還能支持簡單的用戶名/密碼認證,但都基于靜態(tài)的配置,無法動態(tài)新增用戶。如果要支持其它第三方認證,需要對現(xiàn)有的安全框架做出比較大的改動。
創(chuàng)建Connection
Connection可以理解為一個HBase集群連接的抽象,建議使用ConnectionFactory提供的工具方法來創(chuàng)建。因為HBase當前提供了兩種連接模式:同步連接,異步連接,這兩種連接模式下所創(chuàng)建的Connection也是不同的。我們給出ConnectionFactory中關(guān)于獲取這兩種連接的典型方法定義:
CompletableFuture
Connection中主要維護著兩類共享的資源:
線程池
Socket連接
這些資源都是在真正使用的時候才會被創(chuàng)建,因此,此時的連接還只是一個”虛擬連接”。
寫數(shù)據(jù)之前:創(chuàng)建數(shù)據(jù)表
DDL操作的抽象接口 – Admin
Admin定義了常規(guī)的DDL接口,列舉幾個典型的接口:
void?createNamespace(final?NamespaceDescriptor?descriptor)?throws?IOException; void?createTable(final?HTableDescriptor?desc,?byte[][]?splitKeys)?throws?IOException; TableName[]?listTableNames()?throws?IOException;
預(yù)設(shè)合理的數(shù)據(jù)分片 – Region
分片數(shù)量會給讀寫吞吐量帶來直接的影響,因此,建表時通常建議由用戶主動指定劃分Region分割點,來設(shè)定Region的數(shù)量。
HBase中數(shù)據(jù)是按照RowKey的字典順序排列的,為了能夠劃分出合理的Region分割點,需要依據(jù)如下幾點信息:
Key的組成結(jié)構(gòu)
Key的數(shù)據(jù)分布預(yù)估
如果不能基于Key的組成結(jié)構(gòu)來預(yù)估數(shù)據(jù)分布的話,可能會導(dǎo)致數(shù)據(jù)在Region間的分布不均勻
讀寫并發(fā)度需求
依據(jù)讀寫并發(fā)度需求,設(shè)置合理的Region數(shù)量
為表定義合理的Schema
既然HBase號稱”schema-less”的數(shù)據(jù)存儲系統(tǒng),那何來的是schema? 的確,在數(shù)據(jù)庫范式的支持上,HBase非常弱,這里的Schema,主要指如下一些信息的設(shè)置:
NameSpace設(shè)置
Column Family的數(shù)量
每一個Column Family中所關(guān)聯(lián)的一些關(guān)鍵配置:
Compression
HBase當前可以支持Snappy,GZ,LZO,LZ4,Bzip2以及ZSTD壓縮算法
DataBlock Encoding
HBase針對自身的特殊數(shù)據(jù)模型所做的一種壓縮編碼
BloomFilter
可用來協(xié)助快速判斷一條記錄是否存在
TTL
指定數(shù)據(jù)的過期時間
StoragePolicy
指定Column Family的存儲策略,可選配置有:
“ALL_SSD”,”O(jiān)NE_SSD”,”HOT”,”WARM”,”COLD”,”LAZY_PERSIST”
HBase中并不需要預(yù)先設(shè)置Column定義信息,這就是HBase schema-less設(shè)計的核心。
Client發(fā)送建表請求到Master
建表的請求是通過RPC的方式由Client發(fā)送到Master:
RPC接口基于Protocol Buffer定義
建表相關(guān)的描述參數(shù),也由Protocol Buffer進行定義及序列化
Client端側(cè)調(diào)用了Master服務(wù)的什么接口,參數(shù)是什么,這些信息都被通過RPC通信傳輸?shù)組aster側(cè),Master再依據(jù)這些接口\參數(shù)描述信息決定要執(zhí)行的操作。2.0版本中,HBase目前已經(jīng)支持基于Netty的異步RPC框架。
關(guān)于HBase RPC框架
早期的HBase RPC框架,完全借鑒了Hadoop中的實現(xiàn),那時,Netty項目尚不盛行。
Master側(cè)接收到Client側(cè)的建表請求以后,一些主要操作包括:
生成每一個Region的描述信息對象HRegionInfo,這些描述信息包括:Region ID, Region名稱,Key范圍,表名稱等信息
生成每一個Region在HDFS中的文件目錄
將HRegionInfo信息寫入到記錄元數(shù)據(jù)的hbase:meta表中。
說明
meta表位于名為"hbase"的namespace中,因此,它的全稱為"hbase:meta"。
但在本系列文章范疇內(nèi),常將其縮寫為"meta"。
整個過程中,新表的狀態(tài)也是記錄在hbase:meta表中的,而不用再存儲在ZooKeeper中。
如果建表執(zhí)行了一半,Master進程掛掉了,如何處理?這里是由HBase自身提供的一個名為Procedure(V2)的框架來保障操作的事務(wù)性的,備Master接管服務(wù)以后,將會繼續(xù)完成整個建表操作。
一個被創(chuàng)建成功的表,還可以被執(zhí)行如下操作:
Disable?將所有的Region下線,該表暫停讀寫服務(wù)
Enable?將一個Disable過的表重新Enable,也就是上線所有的Region來正常提供讀寫服務(wù)
Alter?更改表或列族的描述信息
Master分配Regions到各個RegionServers
新創(chuàng)建的所有的Regions,通過AssignmentManager將這些Region按照輪詢(Round-Robin)的方式分配到每一個RegionServer中,具體的分配計劃是由LoadBalancer來提供的。
AssignmentManager負責所有Regions的分配/遷移操作,Master中有一個定時運行的線程,來檢查集群中的Regions在各個RegionServer之間的負載是否是均衡的,如果不均衡,則通過LoadBalancer生成相應(yīng)的Region遷移計劃,HBase中支持多種負載均衡算法,有最簡單的僅考慮各RegionServer上的Regions數(shù)目的負載均衡算法,有基于遷移代價的負載均衡算法,也有數(shù)據(jù)本地化率優(yōu)先的負載均衡算法,因為這一部分已經(jīng)提供了插件化機制,用戶也可以自定義負載均衡算法。
hbase
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。