1):關閉集羣 node
stop-hbase.sh算法
2):在conf目錄下建立 backup-masters 文件數組
touch backup-masters緩存
3):backup-masters文件中配置高可用 HMaster 節點服務器
echo k200 > backup-masterssession
4):將整個 conf 目錄 scp 到其餘節點app
scp -r /soft/hive/conf/ k200:/soft/hive/
less
5):打開頁面測試函數
1):NameNode 元數據備份使用 SSD oop
2):定時備份NameNode 上的元數據
經過定時任務複製元數據目錄便可
3):爲 NameNode 指定多個元數據目錄
使用 dfs.name.dir 或者 dfs.namenode.name.dir 指定。這樣能夠提供元數據的冗餘和健壯性,以避免發生故障。
4):NameNode的dir自恢復
設置 dfs.namenode.name.dir.restore 爲 true,容許嘗試恢復以前失敗的dfs.namenode.name.dir目錄,在建立 checkpoint時作此嘗試,若是設置了多個磁盤,建議容許。
5):HDFS保證 RPC 調用會有較多的線程數
hdfs-site.xml:
屬性:dfs.namenode.handler.count
解釋:該屬性是 NameNode 服務默認線程數,默認值爲10,根據機器的可用內存能夠調整爲 50~100
屬性:dfs.datanode.handler.count
解釋:該屬性是 DataNode 的處理線程數,默認值爲10,若是 HDFS客戶端程序讀寫請求比較多,能夠調高到 15~20,設置的值越大,內存消耗越多。通常業務中5~10便可。
6):HDFS副本數的調整
hdfs.site.xml
屬性:dfs.replication
解釋:若是數據量巨大,且不是很是之重要,能夠調整爲 2~3,若是數據很是重要,能夠調整爲3~5.
7):HDFS文件快大小的調整
hdfs-site.xml
屬性:dfs.blocksize
解釋:塊大小定義,該屬性應該根據存儲的大量的單個文件大小來設置,若是大量的單個文件都小於 100M,建議設置成 64M 塊大小,對於大於 100M 或者達到 GB 的這種狀況,建議
設置成 256M,通常設置範圍波動在 64M~256M 之間。
8):MapReduce Job 任務服務線程數調整
mapred-site.xml
屬性:mapreduce.jobtracker.handler.count
解釋:該屬性是Job任務線程數,默認值爲10,根據機器的可用內存能夠調整爲50~100
9):Http 服務工做線程數
mapred-site.xml
屬性:mapreduce.tasktracker.http.threads
解釋:定義HTTP 服務器工做線程數,默認值爲40,對於大集羣能夠調整到80~100
三:Linux優化
1):開啓文件系統的預讀緩存能夠提升讀取速度
blockdev --setra 32768 /dev/sda
注意:ra 是readahead的縮寫
2):關閉進程睡眠池
sysctl -w vm.swappiness=0
即不容許後臺進程進入睡眠狀態,若是進程空閒,則直接 kill 掉 釋放資源
1):優化Zookeeper 會話超時時間
hdfs-site.xml
參數:zookeeper.session.timeout
解釋:In hbase-site.xml,setzookeeper.session.timeout to 30 seconds or less to less to bound failure detection(20~30 seconds is a good start).該值會直接關係到 master 發現服務器宕機的最大週期,默認值爲 30
秒,若是該值太小,會在 HBase 在寫入大量數據發生而GC 時,致使RegionServer 短暫的不可用,從而沒有向 ZK 發送心跳包,最終致使認爲從節點 shutdown。
通常 20 臺左右的集羣須要配置 5 臺zookeeper。
hbase> create 'staff','info','partition1',SPLITS => ['1000','2000','3000','4000'] {NAME =>'info' ,COMPRESSION => 'SNAPPY' } ,SPLITS => ['1000', '2000' , '3000' , '4000' ] |
2) 生成 16 進制序列預分區
create 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} |
3) 按照文件中設置的規則預分區
4) 使用 JavaAPI 建立預分區
//自定義算法,產生一系列 Hash 散列值存儲在二維數組中 byte[][] splitKeys = 某個散列值函數 //建立 HBaseAdmin 實例 HBaseAdmin hAdmin = new HBaseAdmin(HBaseConfiguration.create()); //建立 HTableDescriptor 實例 HTableDescriptor tableDesc = new HTableDescriptor(tableName); //經過 HTableDescriptor 實例和散列值二維數組建立帶有預分區的HBase 表 hAdmin.createTable(tableDesc, splitKeys); |
一條數據的惟一標識就是 rowkey,那麼這條數據存儲於哪一個分區,取決於 rowkey 處於哪一個一個預分區的區間內,設計 rowkey 的主要目的 ,就是讓數據均勻的分佈於全部的 region中,在必定程度上防止數據傾斜。