HBase RegionServer功能职责

2023-11-09

RegionServer功能职责

租约管理

HBase的租约管理功能主要应用在scan查询上,如果客户端执行scan操作以后,在60秒内没有将Scanner进行关闭,也没有显示的将租约移除,这时查询租约将会过期,RegionServer会强行关闭与之对应的Scanner,来防止无效连接数过多的情况发生。查询租约的过期时间可通过hbase.client.scanner.timeout.period参数来声明,默认为60秒。

在功能实现上租约管理逻辑主要是通过Leases类来封装的,其对内声明了如下数据结构用于存储所有的租约信息(租约信息通过Lease对象来封装)

leases : Map<String, Lease>

同时其还对外声明了createLease和cancelLease方法用于向leases集合中添加/删除租约。Leases线程启动后,其会循环遍历leases集合,一旦发现有租约已经过期,便通知其LeaseListener进行回调处理。而Lease对象主要实现了java的Delayed接口,可通过其getDelay方法来返回当前租约还有多久过期。

Nonce管理

客户端提交RPC申请之后,如果服务端的响应超时,其会将该申请重新发送,直至重试次数达到指定参数值之后,在退出申请逻辑。经过这样处理之后,服务端有可能出现如下问题:

拿append操作举例,原本客户端只想添加一条KeyValue数据到数据库中,但由于服务端的响应超时,会导致append申请重复多次发送,造成的结果是目标数据在服务端被多次添加,出现append操作冗余的情况。

为了防止该情况发生,HBase对外声明了nonce管理功能(通过ServerNonceManager类),客户端的每次申请及重复申请使用同一个nonce进行描述,发送到服务端以后,服务端会首先判断该nonce是否存在,如果不存在则可放心执行nonce所对应操作(如append或increment)。否则需要根据当前nonce的状态进行相应的回调处理:

  • 如果nonce处于WAIT状态,表明该nonce所对应的操作正在被执行,当前线程需等待其执行结束,在根据其执行结果做进一步的处理;

  • 如果nonce处于PROCEED状态,表明该nonce所对应的操作已经被执行,只不过执行结果以失败而告终,因此在这里可重新执行;

  • 如果nonce处于DONT_PROCEED状态,表明该nonce所对应的操作已经成功被执行,这里无需在做处理。

因此,当nonce进入DONT_PROCEED状态以后,所有通过它来执行的操作都将被忽略掉,从而防止了操作冗余的情况发生。需要注意的是当nonce计入DONT_PROCEED或PROCEED状态后,其可存活的时间是受参数控制的(hbase.server.hashNonce.gracePeriod),默认为30分钟。30分钟之后,ServerNonceManager会将该nonce进行删除,通过其cleanUpOldNonces方法。

堆内存监控

  1. 当用于MemStore和BlockCache的堆内存百分比达到80%时,系统将会抛出异常。

    因此在设置相关参数时,应满足如下判断条件:

    hfile.block.cache.size + hbase.regionserver.global.memstore.size <= 0.8

  2. 堆内存的使用空间达到95%时,系统将会打印警告信息

    95%的参数值是通过hbase.heap.occupancy.low_water_mark来设置的,相关警告信息如下:

    heapOccupancyPercent is above heap occupancy alarm watermark

  3. 弹性调整MemStore和BlockCache的空间比例,但总大小不能大于堆内存的80%

    当指定如下4个参数时,RegionServer会根据当前堆内存的使用情况对MemStore和BlockCache的大小做动态调整(通过HeapMemoryTuner来实现)。

    memstore弹性空间:[hbase.regionserver.global.memstore.size.min.range, hbase.regionserver.global.memstore.size.max.range]

    blockcache弹性空间:[hfile.block.cache.size.min.range,hfile.block.cache.size.max.range]

  4. 监控因GC所导致的应用暂停时间

    如果暂停时间大于1秒(jvm.pause.info-threshold.ms参数控制),打印如下输出信息:

    Detected pause in JVM or host machine (eg GC): pause of approximately...

    如果暂停时间大于10秒(jvm.pause.warn-threshold.ms参数控制),同样打印上面的输出信息,只不过信息级别为WARN。具体的监控逻辑可参考org.apache.hadoop.hbase.util.JvmPauseMonitor.Monitor类的实现(HADOOP-9618)。

健康检测

RegionServer进程启动以后,会在后台开启HealthCheckChore线程,默认情况下会每隔10秒钟对RegionServer进行一次健康检测,看其是否处于健康状态,检测周期是通过hbase.node.health.script.frequency参数来声明的。

在检测过程中主要是执行hbase.node.health.script.location参数对应的脚本(示例脚本可参考hbase-examples/src/main/sh/healthcheck/healthcheck.sh),如果脚本在执行过程中出现以下异常情况:

(1)脚本执行的返回值不为0;

(2)脚本执行超时(超时时间通过hbase.node.health.script.timeout参数设置,默认为60秒);

(3)脚本执行过程中,打印了以ERROR开头的文字信息;

则RegionServer的健康检测将以失败而告终。而如果HealthCheckChore线程在循环过程中出现了3次(hbase.node.health.failure.threshold参数控制)健康检测失败的情况,并且前后两次失败的时间间隔小于30秒,其会认为RegionServer没有处于健康状态,会强行将其关闭,并打印如下信息:

The node reported unhealthy {threshold} number of times consecutively.

30秒的时间间隔是通过如下方式计算得出的:

hbase.node.health.script.frequency * hbase.node.health.failure.threshold

 

http://blog.csdn.net/javaman_chen/article/details/47334729

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase RegionServer功能职责 的相关文章

  • 解释 Merkle 树在最终一致性中的使用

    默克尔树 http en wikipedia org wiki Hash tree在几个分布式 复制的键 值存储中用作反熵机制 Dynamo http www allthingsdistributed com files amazon dy
  • 如何删除 MongoDB 中的所有数据库?

    I have a list of databases in my MongoDB How to delete all databases except local admin and config 您可以使用getDBNames 方法中的m
  • 使用增量计数器在 Couchbase 集群中生成唯一密钥

    我听到的关于 Couchbase 和其他 NoSQL 数据库的最常见问题是如何为记录生成唯一键 或者更具体地说 如何复制常见关系数据库的自动增量功能 Couchbase 中经常提到的解决方案是增量函数 您可以在数字键上调用增量 它将按顺序生
  • 使用 Cassandra API 获取所有键——类似于“SELECT id FROM table;”

    Cassandra 命令行实用程序sstablekeys可用于从物理 SSTABLE 文件中提取所有定义的行键 sstablekeys cassandra data Keyspace1 Standard1 N Data db Cassand
  • 带 Java 客户端的键值数据库

    我基本上想在磁盘上存储一个哈希表 以便以后可以查询它 我的程序是用Java 编写的 哈希表从字符串映射到列表 那里有很多键值存储 但经过大量研究 阅读后 尚不清楚哪一个最适合我的目的 以下是一些对我来说很重要的事情 简单的键值存储 允许您使
  • 寻找一个轻量级的java兼容内存键值存储[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Berkeley DB 可能是最好的选择 但由于许可问题我无法使用它 还有其他选择吗 你可以试试榛卡斯
  • 如何快速获取MongoDB pymongo的所有文档

    目前我通过在 pymongo 中迭代游标来获取文档 例如 for d in db docs find mylist append d 作为参考 对同一组数据 700 万条记录 执行 fetchall 大约需要 20 秒 而上述方法需要几分钟
  • 错误:org.apache.hadoop.hbase.MasterNotRunningException:null+hbase+hadoop

    我最近用两台机器 在ubuntu上 配置了hadoop集群 到目前为止效果很好 但是当我尝试在上面的 hadoop 集群上配置 hbase 时 它 显示错误 这就是我所做的 我有两台机器 192 168 1 110 Hadoop主站 192
  • 如何确定 HBase 表的大小?有什么命令可以这样做吗?

    我的 Hbase shell 上有多个表 我想将它们复制到我的文件系统上 有些表超过 100GB 但是 我的本地文件系统中只剩下 55GB 可用空间 因此 我想知道 hbase 表的大小 以便我可以仅导出小尺寸的表 任何建议表示赞赏 谢谢
  • HBase 作为 Web 应用程序后端

    任何人都可以建议将 HBase 作为基于 Web 的应用程序的主要数据源是否是一个好主意 我主要关心的是 HBase 对查询的响应时间 是否有可能实现亚秒级响应 编辑 有关应用程序本身的更多详细信息 数据量 约500GB文本数据 预计很快将
  • 是否有一个 nosql 存储也允许存储实体之间的关系?

    我正在寻找 nosql 键值存储 它还提供存储 维护存储实体之间的关系 我知道 Google App Engine 的数据存储允许实体之间拥有和不拥有的关系 任何流行的 nosql 商店都提供类似的东西吗 尽管它们中的大多数都是无模式的 但
  • 一起使用 MongoDB 和 Neo4j

    我正在开始一个新项目 我正在考虑使用 MongoDB 作为文档存储工具 使用 Neo4j 作为映射文档之间关系的机制 然后我想通过 REST API 公开查询结果 人们会说这样做的优点和缺点是什么 是否有更好的方法可以使用不同的 NoSQL
  • 如何在Cassandra中搜索不相等的二级索引?

    我需要能够仅使用 对二级索引执行搜索 据我所知 Cassandra 至少需要一个等式索引子句 因为它会迭代该等式索引的所有结果 是否有任何技巧可以仅使用 执行操作 至少在概念上 这是一个坏主意吗 另外 有人知道 Cassandra 是否有计
  • 带有版本控制的 json 数据存储

    问题定义 有一个Java服务器存储JSON可以映射到 Java 类的数据 Java 类可能会发生变化 目标是能够更新 Java 类并且仍然能够解码JSON旧版本的数据到新版本的 Java 对象 应该有一个良好的版本控制系统 例如 能够向 J
  • 检查 DynamoDB 中是否存在表的最佳方法是什么?

    检查 DynamoDb 中是否存在表的最佳方法是什么 如果代码是 PHP 语言 我将不胜感激 要么活跃 要么不活跃 稍后作为错误代码 400 的各种情况的示例添加 检查表是否存在很容易 它可以有以下之一 表状态 gt 创建 活动 删除或更新
  • 是否有 NoSQL 解决方案的比较(在某些情况下哪个更好?)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我在 Linux PHP 架构中构建基于密钥的归档应用程序时 我正在尝试了解有关 NoSQL 的更多信息 谁能解释一下主要解决方案
  • 在 NoSQL 存储中存储图像

    我们的应用程序将通过 HTTP 提供大量缩略图大小的小图像 大小约为 6 12KB 我被要求调查使用 NoSQL 数据存储是否是一个可行的数据存储解决方案 理想情况下 我们希望我们的数据存储是容错且分布式的 在 NoSQL 存储中存储 bl
  • 在 Amazon EMR 上使用 java 中的 hbase 时遇到问题

    因此 我尝试使用作为 MapReduce 步骤启动的自定义 jar 来查询 Amazon ec2 上的 hbase 集群 我的 jar 在地图函数内 我这样调用 Hbase public void map Text key BytesWri
  • 删除对象时删除嵌套字段中的索引

    我仍在使用 Firebase 这次我有一个与删除对象相关的问题 我有如下结构 users UsErId1 name Jack email email protected cdn cgi l email protection UsErId2
  • 使用 Cassandra 进行单元版本控制

    我的应用程序使用 AbstractFactory 作为 DAO 层 因此一旦实现了 HBase DAO 系列 创建 Cassandra DAO 系列并从多个角度查看差异对我来说将是非常好的 不管怎样 试图做到这一点 我看到 Cassandr

随机推荐

  • vsCode插件安装之汉化和浏览器打开

    一 汉化的方法 点击最左面第五个图标 在搜索框里面输入Chinese 点击如图第一个内容 点击Install 安装 安装后 重启软件即可 二 浏览器打开html 文件方法 在安装插件窗口搜索Browser 点击如图内容 点击install安
  • SpringBoot(十)SpringBoot自定义starter

    一个月的时间 转眼已经到了我的SpringBoot系列的第十篇文章 还记得我的第二篇文章SpringBoot 二 starter介绍 springboot的starter heart荼毒的博客 CSDN博客 曾经介绍过starter sta
  • mmdetection训练自己的VOC数据集 label=self.cat2label 报错解决方案

    废话不多说 直接上报错的图 看了GitHub上的大佬的回答 报错的原因是self cat2label值不对 所以根据大佬的建议 我print了self cat2label值 发现果然不对 类还是VOC数据集的类 而不是我自己的类 我的类是
  • ARM下高效C编程

    通过一定的风格来编写 C 程序 可以帮助 C 编译器生成执行速度更快的 ARM 代码 下面就是一些与性能相关的关键点 1 对局部变量 函数参数和返回值要使用 signed 和 unsigned int 类型 这样可以避免类型转换 而且可高效
  • 猫狗数据集

    import numpy as npimport pickleimport cv2import pandas as pdimport tensorflow as tfimport matplotlib pyplot as plt mnist
  • 干货!如何用Python处理图像,一文带你了解!

    大家好 我是菜鸟哥 用Python玩图像处理还是很有意思的 我们以前写过很多这样的文章 学Python真香 我用100行代码做了个网站 帮人PS旅行图片 赚个鸡腿吃 十行代码 我用Python做一个迷你版的美图秀秀 十行Python代码替换
  • 【Kali】kali主要工具使用说明(文末附超全思维导图)

    本文为 从实践中学习Kali Linux渗透测试 总结笔记 仅供学习使用 禁止用于非法用途 转载请附上原文链接 1 信息收集 1 1 发现主机 traceroute 获取目标主机的路由条目 确定网络拓扑 每一跳表示一个网关 星号可能为防火墙
  • JAVA-面向对象

    面向对象编程与面向过程编程只是一种在思维方式上的划分 面向过程是以分步骤的方式解决问题 而面向对象是以分步骤的方式解决问题 面向对象的三大特性是 封装 继承 多态 封装 就是将客观事物封装成抽象的类 抽象类可以将自己的数据和方法只让自己信任
  • Kotlin中枚举

    一 写一个Kotlin的枚举 package net println kotlin chapter4 author wangdong description enum class LogLevel VERBOSE DEBUG INFO WA
  • 手语识别 机器学习_手语识别研究综述.PDF

    手语识别研究综述 PDF 第 7 卷第 3 期 信息技术快报 Vol 7 No 3 Information Technology Letter May 2009 手语识别研究综述 张良国 陈熙霖 摘 要 本文综述了手语识别领域近年来的研究热
  • 多个.C和.H文件的相互调用以及变量的跨文件使用

    假如 有一个头文件 1 h 和源文件1 c 还有一个头文件 2 h和源文件2 c 函数的调用 假如 有一个函数 在1 h 中声明 void xuexi void 在1 c中实现 先包含 include 1 h void xuexi void
  • Follow your heart(180)---tmd的 那些各种D文档

    我4月去杭州 找好友谈一起做的事情 她推荐了一个人加入 然后要我写什么PRD 我才知道 那叫产品需求文档 可是 我有啊 只是我直接就加了很多设计进去 不是完全把自己作为客户的 好友发了一个他们公司的PRD文档 那是一个非互联网产品的产品 是
  • 解决LoggerFactory is not a Logback LoggerEither remove Logback or the competing implementation (class

    一个项目引入了amqp以后报错 疑似包冲突 最后利用dependency analyzer终于解决了 问题 原依赖
  • 不知道如何入门Kotlin?《Android版kotlin协程入门进阶实战》带你从入门,带你飞

    作为一名 Android 开发者 掌握 Kotlin 语言对于职业发展具有重要意义 随着 Google 正式将 Kotlin 确立为 Android 开发的官方编程语言 Kotlin 的地位在 Android 开发领域迅速攀升 因此 仅仅依
  • linux系统输入指令,Linux系统基础 - 基本操作命令

    原标题 Linux系统基础 基本操作命令 首先介绍一个名词 控制台 console 它就是我们通常见到的使用字符操作界面的人机接口 例如dos 我们说控制台命令 就是指通过字符界面输入的可以操作系统的命令 例如dos命令就是控制台命令 我们
  • QRemoteObject在多进程间通讯的实现方法

    QRemoteObject是qt进程间通讯特有的方式 实现了在进程间通过信号槽的方式来编程的方式 省去了很多的麻烦 比如采用共享内存的方式 得考虑数据同步问题 用qt的方式去解决 才能体现qt的优势 通过分析 QRemoteObject底层
  • [WinForm]关于InvokeRequired与Invoke

    Windows 窗体中的控件被绑定到特定的线程 不具备线程安全性 因此 如果从另一个线程调用控件的方法 那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程 该属性可用于确定是否必须调用 Invoke 方法 当不知道什么线程拥
  • node npm cnpm vue 搭建环境过程

    一 使用之前 我们先来掌握3个东西是用来干什么的 npm Nodejs下的包管理器 webpack 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备 比如资源的合并和打包 vue cli 用户生成Vue工
  • ctfshow web入门——web8

    提示和上一题一样 但是访问 git没有flag出来 所以使用另一个版本控制工具svn 访问获得flag
  • HBase RegionServer功能职责

    RegionServer功能职责 租约管理 HBase的租约管理功能主要应用在scan查询上 如果客户端执行scan操作以后 在60秒内没有将Scanner进行关闭 也没有显示的将租约移除 这时查询租约将会过期 RegionServer会强