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中,在必定程度上防止数据倾斜。