20.12.30 152. 乘積最大子陣列
第一部分 初始 HBase
第1節 HBase簡介
1.1 HBase是什麼
HBase基於Google的BigTable論文而來,是一個分散式海量列式非關係型資料庫系統,可以提供超大規模資料集的實時隨機讀寫
接下來通過一個場景,初步認識HBase列式儲存
如下是Mysql儲存機制,空值欄位會浪費儲存空間
id | name | age | salary | job |
---|---|---|---|---|
1 | 小明 | 23 | 學生 | |
2 | 小紅 | 10w | 律師 | |
如果是列式儲存可以這樣
rowkey :1 name:小明
rowkey :1 age:23
rowkey :1 job:學生
rowkey :2 name:小紅
rowkey :2 salary:10w
rowkey :2 job:律師
列式儲存的優點
-
減少儲存空間佔用
-
支援好多列
1.2 HBase的特點
-
海量儲存:底層基於hdfs儲存海量資料
-
列式儲存: HBase表的資料是基於列族進行儲存的,一個列族包含若干列
-
極易擴充套件:底層依賴HDFS,當磁碟不足時,增加dataNode節點就可以
-
高併發:支援高併發讀寫請求
-
稀疏:列的靈活性,在列族中,可以指定任意多的列,空不佔空間
-
資料的多版本:HBase表中資料有多個版本,預設通過版本號區分,值為插入時的時間戳
-
資料型別單元:以位元組陣列儲存
第2節 HBase資料模型
2.1 邏輯架構
-
列族,建表時指定,儲存時寫入檔案以列族為整體儲存
-
列 每個列族下包含多個列
-
rowkey 主鍵唯一標識 按字典順序排序
-
region 橫向切分表的一部分,大了可以再切
-
store 儲存一個列族,有幾個列族就有幾個store
2.2 物理儲存
storeFile 以列族為整體儲存,store中有寫其他屬性
timestamp 版本號 寫入的時間戳
type put寫 delete 刪除
關鍵字
概念 | 描述 |
---|---|
名稱空間 | 類似於關係型資料庫的database概念,每個名稱空間下有多個表。HBase兩個⾃帶的名稱空間,分別是hbase和default,hbase中存放的是HBase內建的表,default表是⽤戶預設使⽤的名稱空間。⼀個表可以⾃由選擇是否有名稱空間,如果建立表的時候加上了名稱空間後,這個表名字以:作為區分! |
Table | 類似於關係型資料庫的表概念。不同的是,HBase定義表時只需要宣告列族即可,資料屬性,⽐如超時時間(TTL),壓縮演算法(COMPRESSION)等,都在列族的定義中定義,不需要宣告具體的列。 |
Row(⼀⾏邏輯資料) | HBase表中的每⾏資料都由⼀個RowKey和多個Column(列)組成。⼀個⾏包含了多個列,這些列通過列族來分類,⾏中的資料所屬列族只能從該表所定義的列族中選取,不能定義這個表中不存在的列族,否則報錯NoSuchColumnFamilyException。 |
RowKey(每⾏資料主鍵) | Rowkey由⽤戶指定的⼀串不重複的字串定義,是⼀⾏的唯⼀標識!資料是按照RowKey的字典順序儲存的,並且查詢資料時只能根據RowKey進⾏檢索,所以RowKey的設計⼗分重要。如果使⽤了之前已經定義的RowKey,那麼會將之前的資料更新掉! |
ColumnFamily(列族) | 列族是多個列的集合。⼀個列族可以動態地靈活定義多個列。表的相關屬性⼤部分都定義在列族上,同⼀個表⾥的不同列族可以有完全不同的屬性配置,但是同⼀個列族內的所有列都會有相同的屬性。列族存在的意義是HBase會把相同列族的列儘量放在同⼀臺機器上,所以說,如果想讓某⼏個列被放到⼀起,你就給他們定義相同的列族。 |
ColumnQualifier(列) | Hbase中的列是可以隨意定義的,⼀個⾏中的列不限名字、不限數量,只限定列族。因此列必須依賴於列族存在!列的名稱前必須帶著其所屬的列族!例如info:name,info:age |
TimeStamp(時間戳--》版本) | ⽤於標識資料的不同版本(version)。時間戳預設由系統指定,也可以由⽤戶顯式指定。在讀取單元格的資料時,版本號可以省略,如果不指定,Hbase預設會獲取最後⼀個版本的資料返回! |
Cell | ⼀個列中可以儲存多個版本的資料。⽽每個版本就稱為⼀個單元格(Cell)。 |
Region(表的分割槽) | Region由⼀個表的若⼲⾏組成!在Region中⾏的排序按照⾏鍵(rowkey)字典排序。Region不能跨RegionSever,且當資料量⼤的時候,HBase會拆分Region。 |
第3節 HBase整體架構
zookeeper
-
實現HMaster高可用
-
儲存HBase的元資料資訊,是所有HBase表的定址入口(儲存的地址資訊,元資料表在哪個regionServer上)
-
監控HMaster和HRegionServer
HMaster
-
為HRegionServer分配Region
-
維護整個叢集的負載均衡
-
管理和維護元資料資訊
-
發現失效的Region,將region移動到正常的HRegionServer上
HRegionServer
-
管理Region
-
接受客戶端讀寫請求
-
切換執行中變大的Region
Region
-
每個HRegion由多個store組成
store
-
每個store儲存一個列族(columns family),有幾個列族就有幾個store
-
由一個metaStore和多個storeFile組成,metaStore是store在記憶體中的內容,寫到檔案後就是storeFile,StoreFile底層是以HFile的格式儲存
第4節 HBase叢集安裝部署
-
下載安裝包
-
hbase-1.3.1-bin.tar.gz
-
規劃安裝目錄
/opt/lagou/servers/
-
上傳安裝包
rz
-
解壓到安裝目錄
tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/lagou/servers
-
修改配置檔案
-
把hadoop的hdfs-site.xml core-site.xml拷貝到hbase的conf目錄
ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /opt/lagou/servers/hbase-1.3.1/conf/core-site.xml
ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /opt/lagou/servers/hbase-1.3.1/conf/hdfs-site.xml-
修改hbase conf下的配置檔案
-
hbase-env.sh
#新增java環境變數
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231/
#指定使⽤外部的zk叢集
export HBASE_MANAGES_ZK=false -
hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上儲存的路徑 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://lxl20:9000/hbase</value>
</property>
<!-- 指定hbase是分散式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多個⽤“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name> <value>lxl20:2181,lxl21:2181,lxl22:2181</value>
</property>
</configuration> -
-