博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hbase优化
阅读量:5936 次
发布时间:2019-06-19

本文共 2729 字,大约阅读时间需要 9 分钟。

一:高可用

1):关闭集群 

  stop-hbase.sh

2):在conf目录下创建 backup-masters 文件

  touch backup-masters

3):backup-masters文件中配置高可用 HMaster 节点

  echo k200 > backup-masters

4):将整个 conf 目录 scp 到其他节点

  scp -r /soft/hive/conf/ k200:/soft/hive/

5):打开页面测试

二:Hadoop 的通用性优化

1):NameNode 元数据备份使用 SSD 

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 掉 释放资源

四:ZooKeeper 优化

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 优化 

一:预分区

将数据索要投放的分区提前大致的规划好,以提高HBase 性能

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 处于哪个一个预分区的区间内,设计 rowkey 的主要目的 ,就是让数据均匀的分布于所有的 region中,在一定程度上防止数据倾斜。

 

转载于:https://www.cnblogs.com/Vowzhou/p/10676842.html

你可能感兴趣的文章
数据结构----图(邻接表用法)
查看>>
批量扫描雏形之在Java中调用nmap进行主机探测
查看>>
我的友情链接
查看>>
SVN命令详解
查看>>
Windows的资源监视器
查看>>
Android图形解锁的绘制
查看>>
UML基础系列:类图
查看>>
学习日志---树回归(回归树,模型树)
查看>>
Gene6_FTP_Server_高级配置
查看>>
centos 7编译安装nginx
查看>>
【学神】1-15 linux启动及常见故障的排除
查看>>
Android SDK 在线更新镜像服务器资源
查看>>
重新定义工作站的“边界”
查看>>
第三方推送已死
查看>>
回档|神经网络
查看>>
Apache Spark源码走读之12 -- Hive on Spark运行环境搭建
查看>>
阿里云跨服务器文件拷贝
查看>>
GetWindowRect
查看>>
6.<1>四则运算的研究[栈]
查看>>
java程序员笑不死的经历ส้้้้้้้้้
查看>>