1. 程式人生 > 實用技巧 >20.12.30 152. 乘積最大子陣列

20.12.30 152. 乘積最大子陣列

hbase

第一部分 初始 HBase

第1節 HBase簡介

1.1 HBase是什麼

HBase基於Google的BigTable論文而來,是一個分散式海量列式非關係型資料庫系統,可以提供超大規模資料集的實時隨機讀寫

接下來通過一個場景,初步認識HBase列式儲存

如下是Mysql儲存機制,空值欄位會浪費儲存空間

idnameagesalaryjob
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. 支援好多列

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叢集安裝部署

  1. 下載安裝包

  2. 規劃安裝目錄

    /opt/lagou/servers/

  3. 上傳安裝包

    rz

  4. 解壓到安裝目錄

    tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/lagou/servers

  5. 修改配置檔案

    • 把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>