Hbase参数调优

  1. Hbase 总体架构

Hbase 总体架构图如下图

HMaster作用

1. 管理HRegionServer,实现其负载均衡。

2. 管理和分配HRegion,比如在HRegion split 时分配新的HRegion;在HRegionServer 退出时迁移其内的

HRegion 到其他HRegionServer 上。

3. 实现DDL 操作(Data Definition Language,namespace 和table 的增删改,column familiy 的增删改等)。

4. 管理namespace 和table 的元数据(实际存储在HDFS 上)。

5. 权限控制(ACL)。

HRegionServer作用

1. 存放和管理本地HRegion。

2. 读写HDFS,管理Table 中的数据。

3. Client 直接通过HRegionServer 读写数据(从HMaster 中获取元数据, 找到RowKey 所在的HRe-

gion/HRegionServer 后)

ZooKeeper

1. 存放整个HBase 集群的元数据以及集群的状态信息。

2. 实现HMaster 主从节点的failover。

操作系统部分

ulimit 调整

登录操作系统后用当前用户执行如下命令

[hadoop@10 root]$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 15209

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 300001

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 15209

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

其中ulimit 参数说明如下

-H 设置硬资源限制,一旦设置不能增加。

-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。

-a 显示当前所有的limit 信息。

-c 最大的core 文件的大小, 以blocks 为单位。

-d 进程最大的数据段的大小,以Kbytes 为单位。

-f 进程可以创建文件的最大值,以blocks 为单位。

-l 最大可加锁内存大小,以Kbytes 为单位。

-m 最大内存大小,以Kbytes 为单位。

-n Linux 操作系统对一个进程可以打开最大文件描述符的数量。

-p 管道缓冲区的大小,以Kbytes 为单位。

-s 线程栈大小,以Kbytes 为单位。

-t 最大的CPU 占用时间,以秒为单位。

-u 用户最大可用的进程数。

-v 进程最大可用的虚拟内存,以Kbytes 为单位。

本教程以hadoop 为例,根据自己的实际情况调整ulimit 限制

liunx 内核网络参数调整

在linux 中所有的TCP/IP 参数都位于/proc/sys/net 目录下(请注意,对/proc/sys/net 目录下内容的修改都是临

时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数:

/etc/sysctl.conf 是一个允许你改变正在运行中的Linux 系统的接口。它包含一些TCP/IP 堆栈和虚拟内存系统

的高级选项,可用来控制Linux 网络配置,由于/proc/sys/net 目录内容的临时性,建议把TCPIP 参数的修改添加

到/etc/sysctl.conf 文件, 然后保存文件,使用命令“/sbin/sysctl –p”使之立即生效,样例参数

net.core.rmem_default = 256960

net.core.rmem_max = 513920

net.core.wmem_default = 256960

net.core.wmem_max = 513920

net.core.netdev_max_backlog = 2000

net.core.somaxconn = 2048

net.core.optmem_max = 81920

net.ipv4.tcp_mem = 131072 262144 524288

net.ipv4.tcp_rmem = 8760 256960 4088000

net.ipv4.tcp_wmem = 8760 256960 4088000

net.ipv4.tcp_keepalive_time = 1800

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_sack = 1

net.ipv4.tcp_fack = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

net.ipv4.ip_local_port_range = 1024 65000

HDFS 参数优化

Hbase 参数优化

RPC 参数优化

hbase.regionserver.handler.count RPC 处理线程数 默认值为30

Memstore 参数优化

bucketcache

打开Hbase 的堆外cache 需要做如下操作, 在hbase-site.xml 中添加如下内容

<property>

<name>hbase.block.data.cachecompressed</name>

<value>true</value>

</property>

<property>

<name>hbase.bucketcache.combinedcache.enabled</name>

<value>true</value>

</property>

<property>

<name>hbase.bucketcache.ioengine</name>

<value>offheap</value>

</property>

<property>

<name>hbase.bucketcache.percentage.in.combinedcache</name>

<value>0.8984</value>

</property>

<property>

<name>hbase.bucketcache.size</name>

<value>8192</value>

</property>

注意事项如下:

• 参数hbase.bucketcache.size 单位为MB

• 同时需要在JVM 参数中加入-XX:MaxDirectMemorySize=10240m

• hbase.bucketcache.size 设置要略小于MaxDirectMemorySize

Hbase 内存管理为堆内存的80% 一半给memstore 使用一半给blockcache 使用,通过如下两个参数进行控制:

<property>

<name>hbase.regionserver.global.memstore.size</name>

<value>0.4</value>

</property>

<property>

<name>hfile.block.cache.size</name>

<value>0.4</value>

</property>

如果您开启了堆外内存作为bucketcache 使用那么可以适当提高hbase.regionserver.global.memstore.size 而降低

hfile.block.cache.size

JVM 优化

JVM 建议使用JDK7+ 版本的JDK,如果堆内存小于4G 建议使用CMSGC,如果大于4G 建议使用G1 垃圾回收

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习123

Linux NFS服务器的安装与配置

59070
来自专栏JavaEE

springboot中全局异常捕获类的写法

486120
来自专栏LanceToBigData

MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离。 注意:这里比较坑...

46590
来自专栏我的博客

logstash之input配置file类型详解

监听文件变化,记录一个.sincedb的数据库文件跟踪监听文件读取位置(记录的是时间戳) 配置案例 input { file { path => ["/d...

35350
来自专栏微信小开发

Python+Tornado开发微信公众号(二)

四. IOLoop定时获取access_token和jsapi_ticket ? ? 3.Redis数据库 如果有对Redis不了解的同学,可参考Redis快速...

262100
来自专栏张戈的专栏

Linux服务器的进程查看命令详解

Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看系统中有哪些进程在被调用呢?我们可以通过以下命令来查看。 一、ps 命令 ps ...

4.1K90
来自专栏LanceToBigData

MongoDB(一)环境搭建与初始配置

前言   最近的项目中需要用到MongoDB,所这段时间需要学习知道怎么去使用这个数据库。   这里我先简单的介绍一下什么是MongoDB,后面还会详细的介绍:...

52050
来自专栏Angular&服务

mac安装nvm

如果没有.bash_profile文件需要自行touch .bash_profile哦

12630
来自专栏程序员叨叨叨

一招搞定Windows无法安装到GPT分区形式磁盘疑难

今天给堂弟的电脑重装系统时,遇到了以往USB安装系统经常出现的问题,“Windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式”。之前在CSDN的博客上有...

8320
来自专栏王磊的博客

Ubuntu 18.04.1 搭建Java环境和HelloWorld

官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

18420

扫码关注云+社区

领取腾讯云代金券