hbase优化
hdfs的优化:
设置hdfs中data的存储路径为多路径 ----> 对IO进行了分摊,这样IO优化下, 一台主机上有多个挂载点,
修改hdfs-site.xml中的dfs.data.dir,
设置java垃圾回收时的heap
修改hbase-env.sh中的HBASE_HEAPSIZE=8000 单位是 MB 这里设置虚拟内存是8G ,这个设置需要根据集群和机器特性来反复调试
修改RegionServer与Zookeeper间的连接超时时间
zookeeper.session.timeout=180000 单位是s 如果启动超时 hmaster会挂掉
hbase客户端优化:
1 put积累到一定量才发送请求到服务端
AutoFlush
将HTable的setAutoFlush设为false,可以支持客户端批量更新。即当Put填满客户端flush缓存时,才发送到服务端。
默认是true。
hTable.setAutoFlush(false);
2 Scan Caching
scanner一次缓存多少数据来scan(从服务端一次抓多少数据回来scan)。
默认值是 1,一次只取一条。
scan.setCaching(1000); 测试下
Scan Attribute Selection
scan时建议指定需要的Column Family,减少通信量,否则scan操作默认会返回整个row的所有数据(所有Coulmn Family)
减少了整个IO通讯量。
机架感知: 机架之间通过知道有哪些文件存在, 就是进去小区后有地图,然后找这个房间能快一点。
预分区:
热点:很多数据都去一个地方
wal日志: hlog, 所有操作日志成功失败写删都有,因为这个日志是做灾难恢复用的,这个日志保存这个机器最近的操作,当进行一次大合并后会减少很多。
当这个日志很大的时候 需要使用这个命令来进行分割:
hbase org.apache.hadoop.hbase.regionserver.wal.HLog --split /hbase/WALs/hadoop3,60020,1457256379217-splitting