天天看點

HBase 權威指南筆記HBase 權威指南筆記

HBase 權威指南筆記

hadoop

  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
$ ./sbin/start-dfs.sh
$ ./sbin/stop-dfs.sh
           

hbase

  • hbase-site.xml
$ ./bin/start-hbase.sh
$ ./bin/hbase shell
$ ./bin/stop-hbase.sh
           
  • scan
    • scan withStartRow withEndRow 的參數類型與 ID 必須一緻
  • 緩存是面向行的操作,批量是面向列的操作
    • RPC 個數=(行數*每行列數)/min(每行列數,批量大小)/緩存大小+1次打開scan+1次關閉scan
  • filter 作用與 Get、Scan setFilter 185頁
    • 謂詞下推
    • 比較器
      • BinaryComparator
      • BinaryPrefixComparator
      • NullComparator
      • BitComparator 隻能是 EQUAL NOT_EQUAL
      • RegexStringComparator 隻能是 EQUAL NOT_EQUAL
      • SubstringComparator 隻能是 EQUAL NOT_EQUAL
    • 過濾器
      • RowFilter 行鍵 ID 過濾器
      • FamilyFilter 列族名過濾器
      • ValueFilter 值過濾器,但是不能指定某列,隻會傳回比對到列值
      • QualifierFilter 列名過濾器
      • DependentColumnFilter 參與列過濾器,某列值相等後按時間戳查找合并其它列,某個列必須大于小于等于某個值
    • 專用過濾器
      • SingleColumnValueFilter 值過濾,預設會傳回每比對的
      • SingleColumnValueExcludeFilter 單列排除過濾器,預設會傳回每比對的,參考列不會包括到結果中,隻有這個不支援 setBatch,如果加入 FilterList 則 FilterList 不支援 setfBatch
      • PrefixFilter 字首過濾器
      • PageFilter 分頁過濾器
      • KeyOnlyFilter 行鍵過濾器,有參數設定值傳回列名不傳回值
      • FirstKeyOnlyFilter 首次行鍵過濾器,通路一行中第一列
      • IncludsiveStopFilter 包含結束到過濾器
      • TimestampsFilter 時間戳過濾器,具體時間清單或時間範圍
      • ColumnCountGetFilter 列計數過濾器,超過列數就停止掃描,不适合 scan 适合 get
      • ColumnPaginationFilter 列分頁過濾器,對列而不是行
      • ColumnPrefixFilter 列字首過濾器
      • RandomRowFilter 随機行過濾器,指定種子産生随機數過濾
    • 附加過濾器
      • SkipFilter 跳轉過濾器,如果比對列值,則忽略該行資料
      • WhileMatchFilter 全比對過濾器,如果發現比對,就直接傳回結果并停止掃描
    • FilterList 預設 and,可以往 FilterList 添加 FilterList 實作括号功能,添加順序會影響執行效率
    • 自定義過濾器
      • 實作 Filter 或繼承 FilterBase
  • 計數器:讀取并修改,原子操作
    • 初始值 0,類型必須是 long
  • 協處理器
    • observer 可以實作 HBase DML DDL DCL DQL 監控
      • RegionObserver
      • MasterObserver
      • WALObserver
    • endpoint 可以實作在直接在每個 Region 計算,而後傳回每個結果給用戶端由用戶端歸并結果,減少資料傳輸
    • 可以被連結起來,就像過濾器
    • 分為 SYSTEM(高)和 USER(低),可以有序号
  • HTablePool
  • 删除表、修改表結構需要先禁用表
    • enable 啟用
    • disable 禁用
    • avaliable 實體狀态的可用
  • 存儲
    • 同一個列族的資料存在同一個檔案
    • 最新的資料會最先讀取到
    • 先按行鍵升序存儲
    • 再按列鍵升序存儲
    • 最後按時間降序存儲
    • 不存 null 的資料
    • 通過時間戳查詢會很快,但是通過特定列或值查詢則性能一般
    • 查詢性能:行鍵 > 列族 > 列限定符鍵 > 時間戳鍵 > 值
    • HBase 隻能按行分片,高表更有優勢
    • 高表(空列限定符鍵)、寬表
      • 高表的資料鍵左移,查詢性能更好
      • 寬表的資料鍵右移,查詢性能一般
    • 高表一行記錄分多行,寬表一行記錄仍然是一行,是以高表不能保證原子性
    • 解決某個熱點資料導緻叢集資料分布不均的方法之一:(這裡字首和叢集 Region 數比對)Long.hashCode(Time)+"-"+Time(這樣可以防止某天資料過多都落在同一個 Region)
    • HBase 隻保證行級原子性
    • 輔助索引不能保證資料添加的原子性,但是可以先添加輔助索引,再添加資料,如果資料失敗,可以通過定時任務(或 HBASE 支援的 MapReduce)删除輔助索引
    • 降序索引需要反轉存儲,如:Long.MAX_VALUE - Time
    • 布隆過濾器
      • 如果根據行鍵掃描,使用行加列級的布隆過濾器沒有任何幫助
      • 反之如果是根據行加列的讀操作,則使用行級的布隆過濾器可以減少需要檢查的檔案數量
      • 如果一行記錄在所有檔案中都有分布,行加列級布隆過濾器很有用,但是如果每次查詢修改都包含整行記錄,這個過濾器仍然很難起到作用
      • 行級比行加列級布隆過濾器占用空間小
      • 布隆過濾器可容納元素數量有一個最大值
      • 盡量使用行級布隆過濾器
      • 單元格如果較小可以不使用布隆過濾器
    • 版本控制
      • 可以指定版本,也可以由 HBase 伺服器隐式指定,但要注意 HBase 伺服器之間的時間同步問題
      • 如果設定伺服器隻儲存最新的 3 個版本資料,則插入 6 條資料,再删除最新的 2 條,可能第2、3條資料仍存在,因為 HBase 可能延後删除老資料(隻會出現在 Major 合并被執行之前)(要避免的話使用者可以删除後立即強制執行 Major 合并)
      • 使用者可以不使用時間戳,而是自定義一個單調遞增的數字(不能是負數),但這樣必須每次 put 都必須指定這個資料作為版本,否則伺服器會使用時間戳
  • 優化
    • master 通常不會出現垃圾回收問題,因為 master 沒處理過重的負載,并且實際的資料服務并不經過它
    • HBase_OPTS JVM 參數針對:master + region
    • HBase_RegionServer_OPTS JVM 參數針對:region
    • region 如果垃圾回收停頓時間過長,master 會認為其不可用,會抛棄之,此時 region 垃圾回收後發現自己被抛棄會自行關閉
    • 壓縮
      • CPU 壓縮、解壓時間比磁盤讀、寫能耗費更短時間
      • 定義列族時可以指定壓縮算法
    • region 可分割、合并、移動、壓縮
    • 批量操作 setAutoFlush(false) flushCommits()
    • 垃圾回收時間要比 zk 會話逾時時間短
    • 推薦 region 使用壓縮
    • 自帶了性能測試,第一次安裝時建議測試一下
    • HBase 預設日志為 debug 級别
    • 故障處理 hbck