IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hbase参数调优 -> 正文阅读

[大数据]Hbase参数调优

1.RowKey设计

2.参数优化

2.1 zk会话超时时间

hbase-site.xml
zookeeper.session.timeout: 默认值90000毫秒(90s)。
当某个RegionServer挂掉后,90s之后Master才能察觉到。可适当减少此值,尽可能块的检测regionServer故障,可调整值20-30s。

也可以调整中间等待多少秒后重试,以及重试次数。
hbase.client.pause(默认值100ms) 等待多少秒
hbase.client.retries.number(默认15次) 重试次数

2.2 设置RPC监听数量

hbase.regionserver.handler.count: 默认值30
用于指定RPC监听的数量,可以根据客户端的请求数进行调整,读写请求较多时,增加此值。
这里指put或者get操作特别多时,可以增加该值。

2.3 手工设置Major Compaction(大合并)

hbase.hregion.majorcompaction: 默认值604800000 秒,(7天)
Major Compaction的周期,若关闭自动大合并,可将其设置为0,但是一定要记得手工合并,因为大合并可以将所有冗余的数据删除掉。

手工大合并的代码如下:

  def majorCompact(): Unit = {
    val writer = new PrintWriter(new FileWriter(new File("/home/hadoop/logs/majorCompact.log"), true))
    val admin = connection.getAdmin
    val tableNames = admin.listTableNames()
    tableNames.foreach {
      tableName =>
        admin.majorCompact(tableName)
        Thread.sleep(10 * 1000)
        writer.println(DateUtil.getNowTimestamp + " major compact " + tableName.getNameAsString)
        writer.flush()
    }
    admin.close()
    // 关闭连接
    connection.close()
  }

2.4 优化HStore文件大小

hbase.hregion.max.filesize: 默认值10737418240 (10GB),官方推荐10G-50G都是可以的。
如果需要运行Hbase的MR任务,可以减小此值,因为一个region对应一个map任务。
如果单个region过大,会导致map任务执行时间过长。该值的意思就是,如果Hfile的大小达到这个数值,则这个region会被切分为两个Hfile。
(Hfile文件和HStore文件是指同一个东西)

2.5 优化客户端缓存

hbase.client.write.buffer: 默认值2097152bytes(2M)
用于指定Hbase客户端缓存,增大该值可以减少RPC调用次数,但是会消耗更多内存。一般我们需要设定一定的缓存大小,以达到减少RPC次数的目的。
这里指网络通信的缓存。

2.6 指定scan.next扫描hbase表所获取的行数

hbase.client.scanner.caching: 默认值是Integer.MAX_VALUE,即2的31次方-1,这个时候就以hbase.client.scanner.max.result.size为准。
配置的是一个int类型的值,表示一次RPC请求从Region Server端获取的数据行数。
为什么叫做caching呢?由于每次next()是获取一行数据,但是一次RPC调用是多行,实际是先缓存在内存中,当某次next()发现缓存中没有数据时才会发起RPC调用。
这个参数和hbase.client.scanner.max.result.size配合使用,可以使网络使用更有效率。

hbase.client.scanner.max.result.size:默认配置是2MB。
一次RPC调用返回的最大字节数。注意当表的一行数据大小大于这个限制,仍然完整返回完整的数据行。对于更快或者高延迟的网络,这个值应该增加。

2.7 BlockCache占用RegionServer堆内存的比例

hfile.block.cache.size: 默认0.4
读请求比较多的时候,可适当调大,通常不需要更改。

2.8 MemStore占用RegionServer堆内存的比例

hbase.regionserver.global.memstore.size: 默认0.4
写请求较多的时候,可适当调大,通常不需要修改。

hfile.block.cache.size和hbase.regionserver.global.memstore.size加起来不能超过0.8,即不能超过regionserver堆内存大小的80%

3.JVM调优

主要指内存设置和垃圾回收设置。
垃圾回收修改为并发垃圾回收,默认PO+PS是并行垃圾回收,会有大量的暂停时间。理由是Hbase大量使用内存用于存储数据,容易遭遇数据洪峰造成OOM,
同时写缓存的数据是不能垃圾回收的,主要回收的就是读缓存,而读缓存垃圾回收不影响性能。
所以最终设置的效果可以归纳为:防患于未然,早洗早轻松。

3.1 设置使用CMS收集器

-XX:+UseConcMarkSweepGC

3.2 保持新生代尽量小,同时尽早开启GC

# 在内存占用到70%的时候开启GC
-XX:CMSInitiatingOccupancyFraction=70

#指定使用70%,不让JVM动态调整
-XX:+UseCMSInitiatingOccupancyOnly

#新生代内存设置为512m
-Xmn512m

#并行执行新生代垃圾回收
-XX:+UseParNewGC

4.经验

(1)Region的大小控制在10-50G
(2)cell大小不超过10m,如果使用mob,不超过50m
(3)1张表有1到3个列簇,不要设计太多。最好就1个,如果设置多个,尽量在读取的时候不要同时读取多个。
(4)1到2个列簇的表格,设置50-100个region
(5)列簇名称要尽量短
(6)rowkey设计时,尽量保证数据插入均匀
(7)如果只有一个列簇用于写入数据,分配内存资源的时候可以做出调整,即写缓存不会占用太多的内存。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:23  更:2022-10-22 21:25:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 9:08:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码