HBase 权威指南笔记
生活随笔
收集整理的這篇文章主要介紹了
HBase 权威指南笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HBase 權威指南筆記
hadoop
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
hbase
- hbase-site.xml
- 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(低),可以有序號
- observer 可以實現 HBase DML DDL DCL DQL 監控
- 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
總結
以上是生活随笔為你收集整理的HBase 权威指南笔记的全部內容,希望文章能夠幫你解決所遇到的問題。