AVL cruise是一款燃油经济性以及排放性能的仿真的软件,主要用于对车辆传动系统和发动机的开发。

介绍文件:url80.ctfile.com/f/25127180-557243262-02e09a
(访问密码:551685)


以下内容无关:

由于种种原因,最近将核心业务生产使用的HBase迁移到了云上的弹性MapReduce(EMR)集群上,并使用了EMR的HBase组件默认参数配置。

结果在流量高峰期出现了宿主机故障,挂掉了两个core节点(部署了region server和datanode),大量region rit,花了15分钟才自动恢复,硬生生吃了一个P0故障。

复盘的时候发现,由于云上EMR对hdfs的socket超时参数默认设置了900000(15min),导致了region重新上线读取故障节点WAL日志的时候足足等待了15分钟才去重试下个节点。这样的自愈时间显然是不满足「在线业务」的需求的,需要将这个超时时间调整到60000(1min),实现快速自愈的目的。

因此,结合HBase自身组件特性与 「在线业务」高可用、低抖动 诉求,全面整理了HBase参数调优的最佳实践。

2.先回顾下HBase基础架构
这里只是简单回顾下整体架构,方便对照各个组件聊一聊需要优化的参数。更详细内容可以参考我过去整理的《全面认识HBase架构(建议收藏)》

2.1 整体架构
从物理结构上,HBase包含了三种类型的server,zookeeper、HMaster、RegionServer,从而形成了一种主从模式的结构。

硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

RegionServer主要用来服务读和写操作。当用户通过client访问数据时,client会和HBase RegionServer 进行直接通信。
HMaster主要进行RegionServer的管理、DDL(创建、删除表)操作等。
Zookeeper是HDFS(Hadoop Distributed File System)的一部分,主要用来维持整个集群的存活,保障了HA,故障自动转移。
底层的存储,还是依赖于HDFS的。Hadoop的DataNode存储了RegionServer所管理的数据,所有HBase的数据都是存在HDFS中的。Hadoop的NameNode维护了所有物理数据块的metadata。
2.2 RegionServer组成
一个RegionServer运行在一个HDFS的DataNode上,并且拥有以下组件:

硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

WAL:全称Write Ahead Log, 属于分布式系统上的文件。主要用来存储还未被持久化到磁盘上的新数据。如果新数据还未持久化,节点发生宕机,那么就可以用WAL来恢复这些数据。
BlockCache:是一个读缓存。它存储了被高频访问的数据。当这个缓存满了后,会清除最近最少访问的数据。
MenStore: 是一个写缓存。它存储了还未被写入磁盘的数据。它会在写入磁盘前,对自身数据进行排序,从而保证数据的顺序写入。每个region的每个colum family会有一份对应的memstore。
HFiles:按照字典序存储各个row的键值。
3.读优化
3.1 优化读/写内存比例
一个RegionServer上有一个BlockCache和N个Memstore,它们的大小之和必须小于HeapSize* 0.8,否则HBase不能启动,因为仍然要留有一些内存保证其它任务的执行。

BlockCache作为读缓存,对于读的性能比较重要,如果读比较多,建议内存使用1:4的机器,比如:8cpu32g或者16pu64g的机器。

读多写少的场景下,可以调高BlockCache的数值,降低Memstore的数值来提高读场景性能。

核心调整参数如下:

  • hfile.block.cache.size = 0.5 ;
  • hbase.regionserver.global.memstore.size = 0.3。
    3.2 减少HFile数量
    因为HBase读取时没有命中缓存,就需要打开HFile。如果HFile文件越多,IO次数就越多,读取的延迟就越高。

因此,HBase通过compaction机制来合并HFile。

但是,对于「在线业务」来说,白天流量高峰做compact会严重影响磁盘IO,造成读写毛刺,因此需要对compact限速。

3.3 开启「短路读」特性
HBase数据是存储在HDFS,从HDFS读取数据需要经过DataNode,开启Short-Circuit Local Read后,客户端可以直接读取本地数据。

假设现有两个用户User1和User2,User1拥有访问HDFS目录上/appdata/hbase1文件的权限,而User2用户没有该权限,但是User2用户又需要访问这个文件,那么可以借助UNIX中「文件描述符传递」的机制,可以让User1用户打开文件得到一个文件描述符,然后把文件描述符传递给User2用户,那么User2用户就可以读取文件里面的内容了,即使User2用户没有权限。

这种关系映射到HDFS中,可以把DataNode看作User1用户,客户端DFSClient看作User2用户,需要读取的文件就是DataNode目录中的/appdata/hbase1文件。实现如下图所示:

硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

核心参数如下:

dfs.client.read.shortcircuit = true
3.4 开启「对冲读」特性(需要评估磁盘IO)
当我们开启「短路读」特性后,优先会通过Short-Circuit Local Read功能尝试本地读。但是在某些特殊情况下,有可能会出现因为磁盘问题或者网络问题引起的短时间本地读取失败。

为了应对这类问题,HBase实现了「对冲读」特性Hedged Read。

该机制基本工作原理为:
客户端发起一个本地读,一旦一段时间之后还没有返回,客户端将会向其他DataNode发送相同数据的请求。哪一个请求先返回,另一个就会被丢弃。

当然,这个特性显然会放大磁盘IO的压力,需要谨慎评估使用。

核心参数如下:(根据实际环境对参数进行调整)

  • dfs.client.hedged.read.threadpool.size = 10 //指定有多少线程用于服务hedged reads。如果此值设置为0(默认),则hedged reads为disabled状态
  • dfs.client.hedged.read.threshold.millis:默认为500(0.5秒):在spawning 第二个线程前,等待的时间。
    4.写优化
    4.1 增大MemStore的内存
    面对「写多读少」的场景, 可以考虑调高MemStore 的内存占比,降低BlockCache的内存占比,跟读优化3.1的思路正好相反。

具体可以根据读写比例来评估。

4.2 适当增加HFile产生
本条与3.2并不冲突,需要权衡

数据写入过程中,MemStore在满足一定条件时会flush刷写到磁盘,生成一个HFile文件。当一个Store下的HFile文件数量大于某个阈值时,就会引起写入或更新阻塞。

RS日志中会有类似 “has too many store files…” 的信息。当出现这种情况时,需要等待Compaction合并以减少HFile数量,这里主要是Minor Compaction即小合并。

所以我们尽量调大这个阈值,减少compaction。

AVL CRUISE基础介绍资料相关推荐

  1. AVL Cruise基础培训教程

    AVL Cruise基础培训教程 内容详实,初学者入门必备教程 链接:https://pan.baidu.com/s/1nCOKqgP6PIAmVmO9JyQvbA 提取码:1234

  2. AVL Cruise从入门到秃头-如何快速搞定一个双电机四驱仿真模型(2)

    学海无涯,回头是岸 目录 写在前面 模型改造 结语 写在前面 本文由"王浮生不怕生"原创,拒绝任何形式的抄袭及转载! 原文链接:https://mp.weixin.qq.com/s ...

  3. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  4. [渝粤教育] 郑州航空工业管理学院 电工电子技术基础 参考 资料

    教育 -电工电子技术基础-章节资料考试资料-郑州航空工业管理学院[] 小节测试 1.[判断题]任何一个完整的电路都必须有电源.负载和中间环节三个基本部分组成. A.正确 B.错误 参考资料[ ] 2. ...

  5. [渝粤教育] 西北工业大学 博弈论基础 参考 资料

    教育 -博弈论基础-章节资料考试资料-西北工业大学[] 单元测试(一) 1.[单选题]人与人之间的博弈是什么关系? A.既可以是竞争关系,也可以是合作关系 B.只能是竞争关系 C.只能是合作关系 D. ...

  6. intra-mart产品开发相关介绍资料

    intra-mart产品开发相关介绍资料 产品介绍 iap安装手册 script开发手册 tgfw开发手册 im_workflow开发手册 im_workflow_tgfw开发手册 im_workfl ...

  7. MySQL 教程基础介绍

    MySQL 教程基础介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. ...

  8. AVL Cruise与Simulink联合仿真(通过MATLAB DLL方式)

      最近毕业设计需要用到AVL Cruise与Simulink进行联合仿真,分析汽车模型的经济性.下面介绍一下我所知的AVL Cruise与Simulink联合仿真的几种方式,它们各自的优缺点,以及D ...

  9. Linux 基础介绍-基础命令

    文章目录 01 学习目标 02 Linux/Unix 操作系统简介 2.1 Linux 操作系统的目标 2.2 Linux 操作系统的作用 2.3 Unix 家族历史 2.4 Linux 家族历史 2 ...

最新文章

  1. vue里获取不到data_vue methods中取不到data值
  2. 80端口被占用pid 4,svhost等占用的解决方法
  3. Linux设备驱动程序 第三版 读书笔记(一)
  4. 用户故事地图对应到Epic及其缺点
  5. JavaScript 对象所有API解析【2020版】
  6. NET问答: 发布 asp.net core 时如何修改 ASPNETCORE_ENVIRONMENT 环境变量?
  7. 使用Python写入docx文件并控制字体颜色
  8. Android 开发之ViewPage官方文档学习笔记
  9. STM32F103 读写内部FLASH—学习笔记(野火)
  10. 测试工程师需要具备的能力
  11. ESD(静电释放)上半部分
  12. asp.net mvc 中的部分视图
  13. 浅谈SBOM(软件物料清单)
  14. 【C++】register 关键字
  15. ThinkPHP模版引擎之变量输出详解
  16. Liunx网络技术管理及进程管理
  17. QT实现电子时钟(计时器)毫秒级
  18. 使用qrcode.js生成网址二维码
  19. 产生式正向推理和逆向推理程序
  20. 分布式系统监控平台-Overwatch架构设计(已开源)

热门文章

  1. 使用“git commit -m“命令时候报error
  2. ifconfig命令详解,ifconfig命令输出说明
  3. 搭建自己的云桌面服务
  4. JAVA 日志脱敏实现
  5. IFrame语法小全 --使用iframe内的函数
  6. myeclipse数据库逆向hibernate教程 -
  7. linux/centos7 端口映射
  8. RxJS——创建数据流
  9. 专利与论文-2:什么是专利?专利的几种类型?
  10. Java校验身份证合法性 (通过火车票上显示的号码计算身份证号)