顯示具有 hbase 標籤的文章。 顯示所有文章
顯示具有 hbase 標籤的文章。 顯示所有文章

2017/8/15

Hadoop 練習筆記 - HBase(2)


  • 完成前篇Hadoop環境後
  • Master主機  , Slave主機新增使用者  hbase , 並完成SSH無密碼連線 , 可參考前篇 
  • Master主機
    • 切換使用者來完成以下操作
      • su hbase
    • 下載最新hbase-1.2.6-bin.tar.gz 解壓縮放在 /home/hbase/下
    • 設定環境 hbase-env.sh
      • nano /home/hbase/hbase-1.2.6/conf/hbase-env.sh
      • export JAVA_HOME=/usr/java/jdk1.8.0_141/
      • remark 兩行 , 因jdk 8 已不適用 , 會有error 參考網址
      • #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize$........
      • #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX$
    • 修改設定檔hbase-site.xml
      • nano /home/hbase/hbase-1.2.6/conf/hbase-site.xml
      • <configuration>

            <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
            </property>
               
            <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:9000/hbase</value>
            </property>

            <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master</value>
            </property>

        </configuration>
    • 修改設定檔regionservers
      • nano /home/hbase/hbase-1.2.6/conf/regionservers
      • slave1
        slave2
    • 做到此可將 Hbase資料夾複製到所有slave上 
      • scp -r hbase-1.2.6 slave1:~/
      • scp -r hbase-1.2.6 slave2:~/
    • 設置環境變數
      • export HBASE_HOME=/home/hbase/hbase-1.2.6
        export HADOOP_CLASSPATH=$HBASE_HOME/lib/*
        export PATH=$HBASE_HOME/bin:$PATH
      • source ~/.bash_profile
    • 啟動 hadoop 
      • start-all.sh
      • 建立hbase用目錄 參考網址
        • hadoop fs -mkdir /hbase 
        • hadoop fs -chown -R hbase /hbase 
    • 啟動 Hbase
      • /home/hbase/hbase-1.2.6/bin/start-hbase.sh
    • 開啟firefox進入web UI檢驗結果 參考網址
      • In HBase newer than 0.98.x, the HTTP ports used by the HBase Web UI changed from 60010 for the Master and 60030 for each RegionServer to 16010 for the Master and 16030 for the RegionServer.

2016/4/26

Hbase儲存結構筆記


  • Hbase架構在HDFS環境上 , 類似google的 bigtable與GFS
  • Hbase table和region(預設64KB)的關係 , 類似HDFS file與block(預設64MB)的關係
  • Hbase是按照Column Family儲存



  • table & region 
    • 隨著資料的增加 , hbase會依照 rowkey 範圍切成不同 region  , 每個region 用 [startkey,endkey﹞] 表示 , 最後Hmaster 分配到各 regonserver管理 。





  •  -ROOT- && .META. Table
    • zookeeper意思就是這個動物園裡的管理者, 譬如pig、hadoop、hive...等 , 負責各節點之間的協調角色 , zookeeper記錄了 -Root的位置   , HRegionServer也會註冊至zookeeper上, 使得HMaster可以得知HRegionServer是否還活著 , 並且ZooKeeper Fail Controller (ZKFC)  可以處理單點失敗問題
    • Root只有一個region組成 ,記錄了.meta表的region訊息
    • .meta可以有多個region組成,記錄了表的region訊息


  • HMaster

    • 可以啟動多個HMaster  , 透過Zookeeper Election機制管理 , 保證有一個HMaster運行
  • 名稱解釋
    • 每個HRegionServer管理數個HRegion 
    • 每個HRegion對應了一個Region
    • 每個HRegion由多個HStore組成
    • 每個HStore包含多個Storefile , 一HStore對應一個Column Family 
      • 因資料放在同一個Column Family裡 , 因此在查詢速度上 , HBase比HDFS快
    • 每個storefile(hfile)包含多個block(最小單位) ,一個storefile對應一個Column Qualifier
    • HStore是HBase中儲存核心 , 由MemStore與StoreFiles組成



  • MemStore是memory buffer , 將使用者操作放置buffer裡,當flush時存成一個storefile(HFile) , 當storefile達到一定數量會啟動compact機制,合併成storefiles同時更新版本與刪除,不斷合併超過一數值後 , 將其split , split後的region們會被HMaster分配到HRegionServer上
  • compact分為兩種情況
    • Minor Compaction (部分文件合併)
    • Major Compaction (完整文件合併)
      • 刪除過期&已刪除的data
      • 合併結束只會有一個storefile 
  • 在處理過程中如果其中一台RegionServer掛掉了, HMaster会通过Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,將失效的region重新分配


Hbase常用操作shell


  • 啟動hbase
  • 進入hbase模式   
    • hbase shell
  • 如果需要詳細查詢shell指令用法
    • help 'put'  
    • help 'get'
    • 以此類推.....
  • 顯示所有表格
    • list
  • 掃描表格
    • scan '表名稱'
  • 查詢狀態
    • status
  • 查詢版本
    • version

  • 建表  
    • create  '表名稱','列族名1','列族名2'........
    • create 表名稱', {NAME => '族名1', VERSIONS => 1}, {NAME => '列族名2', VERSIONS => 1}, {NAME => '列族名3', VERSIONS => 1}
  • 變更表格
    • 新增列族
      alter '表名稱','列族名'
    • 刪除列族
      alter '表名稱','delete'=>'列族名'
  • 離線
    • disable '表名稱'
    • is_disabled '表名稱'
  • 連線
    • enable '表名稱'
    • is_enabled  '表名稱'
  • 刪除表
    • 需先表離線
    • drop '表名稱'


  • 新增資料
    • put '表名稱','行名稱','列族名稱:',''
    • put '表名稱','行名稱','列族名稱:列名稱',''
    • 當表名稱到列名稱都相同做put動作時 , 該筆資料會被覆蓋, 以及timestamp更新
    • 預設保留3個timestamp版本
  • 取得資料
    • get '表名稱','行名稱'
    • get '表名稱','行名稱','列族名稱'
  • 查看記錄筆數
    • count '表名稱'
  • 刪除紀錄
    • delete '表名稱','行名稱','列族名:',timestamp
    • deleteall '表名稱','rowkey'

  • 把memmory寫到hfile
    • flush '表名稱'

test2