Hbase實踐

Hbase是什麼

HBase是一種構建在HDFS之上的分佈式、面向列的存儲系統。HBase從另外一個角度處理伸縮性問題。它經過線性方式從下到上增長節點來進行擴展。HBase不是關係型數據庫,也不支持SQL,可是它有本身的特長,這是RDBMS不能處理的,HBase巧妙地將大而稀疏的表放在商用的服務器集羣上。HBase 是Google Bigtable 的開源實現,與Google Bigtable 利用GFS做爲其文件存儲系統相似, HBase 利用Hadoop HDFS 做爲其文件存儲系統;Google 運行MapReduce 來處理Bigtable中的海量數據, HBase 一樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable 利用Chubby做爲協同服務,HBase利用Zookeeper做爲對應。html

存儲結構

  • HBase以表的形式存儲數據,表有行和列組成,列劃分爲若干個列族/列簇(column family)java

  • 表結構web

    Row Key column-family1 column-family2
    key1 f1:列簇1第1個字段;f2:列簇1第2個字段 f1:列簇2第1個字段;f2:列簇2第2個字段
    key2 f1:列簇1第1個字段,;2:列簇1第2個字段 f1:列簇2第1個字段;f2:列簇2第2個字段

HBase集羣總體架構

  • 架構圖

  • 核心組件
    • HMastershell

      1. HMaster沒有單節點問題,HBase中能夠啓動多個HMaster,經過Zookeeper的Master Election機制保證總有一個Master在運行,主要負責Table和Region的管理工做。如何啓動多個HMaster?經過hbase-daemons.sh啓動,步驟以下:1)在hbase/conf目錄下編輯backup-masters;2)編輯內容爲本身的主機名;3)保存後,執行以下命令:bin/hbase-daemons.sh start master-backup
      2. 管理用戶對錶的增刪改查操做
      3. 管理HRegionServer的負載均衡,調整Region分佈(在命令行裏面有一個tools,tools這個分組命令其實所有都是Master作的事情
      4. Region Split後,負責新Region的分佈
      5. 在HRegionServer停機後,負責失效HRegionServer上Region遷移工做
    • HRegionServer數據庫

      1. 維護HRegion,處理HRegion的IO請求,向HDFS文件系統中讀寫數據
      2. 負責切分運行過程當中變得過大的HRegion
      3. Client訪問HBase上數據的過程並不須要Master參與(尋址訪問zookeeper和HRegionServer,數據讀寫訪問HRegionServer),HMaster僅僅維護着table和Region的元數據信息,負載很低

Hbase集羣搭建

Hbase集羣依賴hadoop,zookeeper,安裝Hbase集羣前首先要準備好hadoop和zookeeper集羣apache

  • 服務器列表bash

    IP host 服務
    10.19.3.194 hadoop01 HMaster
    10.19.3.195 hadoop02 HRegionServer
    10.19.3.196 hadoop03 HRegionServer

    注意:在相應的服務器上配置好host服務器

  • 準備工做架構

    • 下載安裝包
      Hbase下載
    • 解壓安裝包
      tar -zvxf hbase-2.2.1-bin.tar.gz
  • 安裝步驟app

    • 進入安裝目錄

      [app@hadoop01 hbase]$ pwd
          /usr/local/hbase
          [app@hadoop01 hbase]$ ls
          bin  CHANGES.md  conf  hbase-webapps  LEGAL  lib  LICENSE.txt  logs  NOTICE.txt  README.txt  RELEASENOTES.md
          [app@hadoop01 hbase]$ 
      複製代碼
    • 編輯conf目錄下的hbase-site.xml

      <configuration>
              <property>
                  <name>hbase.rootdir</name>
                  <value>hdfs://10.19.3.194:9000/hbase</value>
              </property>
      
              <property>
                  <name>hbase.zookeeper.quorum</name>
                  <value>10.19.3.194,10.19.3.195,10.19.3.196</value>
              </property>
      
              <property>
                  <name>hbase.zookeeper.property.clientPort</name>
                  <value>2181</value>
              </property>
      
              <property>
                  <name>hbase.cluster.distributed</name>
                  <value>true</value>
              </property>
      
          </configuration>
      複製代碼
    • 在conf目錄下的hbase-env.sh末尾增長配置

      export JAVA_HOME=/opt/jdk1.8.0_131
          export HBASE_MANAGES_ZK=false
      複製代碼
    • 編輯conf目錄下的regionservers

      hadoop02
          hadoop03
      複製代碼
    • 將配置好的hbase分別複製到另外兩臺服務器

      scp -r hbase app@10.19.3.195:/usr/local/hbase
          scp -r hbase app@10.19.3.196:/usr/local/hbase     
      複製代碼
    • 啓動

      ./bin/start-hbase.sh
      複製代碼
    • 查看相關進程是否正常

      1. hadoop01
        [app@hadoop01 hbase]$ jps
            24113 SecondaryNameNode
            23878 NameNode
            9398 Jps
            28685 HMaster
            24335 ResourceManager
            [app@hadoop01 hbase]$ 
        複製代碼
      2. hadoop02
        [app@hadoop02 hbase]$ jps
            20049 Jps
            16779 DataNode
            9308 HRegionServer
            16910 NodeManager
            [app@hadoop02 hbase]$ 
        複製代碼
      3. hadoop03
        [app@hadoop03 hbase]$ jps
            20049 Jps
            16779 DataNode
            9308 HRegionServer
            16910 NodeManager
            [app@hadoop03 hbase]$ 
        複製代碼
    • 能夠經過訪問http://10.19.3.194:16010查看集羣信息

  • 驗證集羣(java代碼)

    • 引入pom依賴

      <dependency>
              <groupId>org.apache.hbase</groupId>
              <artifactId>hbase-client</artifactId>
              <version>2.2.1</version>
          </dependency>
          <dependency>
              <groupId>org.apache.hbase</groupId>
              <artifactId>hbase-server</artifactId>
              <version>2.2.1</version>
          </dependency>
          <dependency>
              <groupId>org.apache.hbase</groupId>
              <artifactId>hbase-common</artifactId>
              <version>2.2.1</version>
          </dependency>
      複製代碼
    • 代碼判斷是否存在表test_table

      Configuration configuration = HBaseConfiguration.create();
          configuration.set("hbase.zookeeper.quorum", "10.19.3.194,10.19.3.195,10.19.3.196");
          configuration.set("hbase.zookeeper.property.clientPort", "2181");
          Connection connection = ConnectionFactory.createConnection(configuration);
          Admin admin = connection.getAdmin();
          TableName tableName = TableName.valueOf("test_table");
          System.out.println(admin.tableExists(tableName));
          admin.close();
          connection.close();
      複製代碼
    • 控制檯輸出

      false
      複製代碼

相關文章
相關標籤/搜索