hadoop loadBalance源码分析

项目hbase数据库出现很诡异的assignment ,region移动的src和dest都是同一台regionserver,不过时间戳不同,启动的只有一个regionserver, 不知道怎么出现了两个时间戳

分析下源码解决一下 

loadbalance只有一个实现 org.apache.hadoop.hbase.master.DefaultLoadBalancer
在HMaster中会启动一个线程 org.apache.hadoop.hbase.Chore,按照设定的hbase.balancer.period(默认300000ms,五分钟),遍历所有表,根据每个表在regionserver中的region数量做balance,有一个平衡系数hbase.regions.slop(默认0.2),根据region总数算出平均region值,avg×0.8 取整作为最小值,avg×1.2取整作为最大值,regionserver上超过最大值要移走,小于最小值要移动region过来。否则打印目前的平衡状态。
assignmentManager 根据上述步骤生成的RegionPlan, 从src移动region到desc  src和desc都是ServerName对象
HMaster启动时会等待region servers注册到serverManager
// Wait for region servers to report in.
this.serverManager.waitForRegionServers(status);
// Check zk for regionservers that are up but didn't register
for (ServerName sn: this.regionServerTracker.getOnlineServers()) {
    if (!this.serverManager.isServerOnline(sn)) {
    // Not registered; add it.LOG.info("Registering server found up in zk but who has not yet " +"reported in: " + sn);this.serverManager.recordNewServer(sn, HServerLoad.EMPTY_HSERVERLOAD);}
}

serverManager线程sleep一定时间,等待HRegionServer注册

HRegionServer.java:

      // Try and register with the Master; tell it we are here.  Break if// server is stopped or the clusterup flag is down or hdfs went wacky.while (keepLooping()) {MapWritable w = reportForDuty();if (w == null) {LOG.warn("reportForDuty failed; sleeping and then retrying.");this.sleeper.sleep();} else {handleReportForDutyResponse(w);break;}}

HRegionServer 注册之后进入mainloop

 // The main run loop.while (!this.stopped && isHealthy()) {
  long now = System.currentTimeMillis();

   if ((now - lastMsg) >= msgInterval) {
      doMetrics();
      tryRegionServerReport();
      lastMsg = System.currentTimeMillis();
    }

  }

每隔hbase.regionserver.msginterval时间(默认3秒),进行一次注册尝试,如果服务器ip和端口不在已注册列表中,则添加ServerName进map

ServerManager.java

 void regionServerReport(ServerName sn, HServerLoad hsl)throws YouAreDeadException, PleaseHoldException {checkIsDead(sn, "REPORT");if (!this.onlineServers.containsKey(sn)) {// Already have this host+port combo and its just different start code?
      checkAlreadySameHostPort(sn);// Just let the server in. Presume master joining a running cluster.// recordNewServer is what happens at the end of reportServerStartup.// The only thing we are skipping is passing back to the regionserver// the ServerName to use. Here we presume a master has already done// that so we'll press on with whatever it gave us for ServerName.
      recordNewServer(sn, hsl);} else {this.onlineServers.put(sn, hsl);}}

recordNewServer 会打印 ServerName对象的ip 端口和时间戳信息

同一个region server注册的ServerName对象 会拥有同样的时间戳 

this.startcode = System.currentTimeMillis();...result = this.hbaseMaster.regionServerStartup(port, this.startcode, now);...this.serverNameFromMasterPOV = new ServerName(hostnameFromMasterPOV,
this.isa.getPort(), this.startcode);...this.hbaseMaster.regionServerReport(this.serverNameFromMasterPOV.getVersionedBytes(), hsl);

 

region server启动时startCode是固定死的,按照这个流程是不会出现相同IP和端口,但时间戳不同的region server跑在线上的 

如果一台机器上启动了两个region server 会把时间戳小的移出,下次添加进时间戳大的进去

我们遇到的问题是时间戳不同的regionserver被注册在了master上,并且相互之间做region move

 

转载于:https://www.cnblogs.com/shenguanpu/archive/2012/07/30/2615214.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 遍历div内check,vue+element中checkbox 实现遍历分组全选

1、html部分style"margin-left: 30px":indeterminate"item.isIndeterminate"v-model"item.isCheck"change"checkTitle(item.isCheck, index)">全选>v-model"item.checkedData"change"checkItem(item.checkedData…

homepod换wifi网络_如何实现短租网络自由,不必换房断网

对于在异地工作的人来说,租房一直是头疼的问题,要避开黑中介,房租不能太贵,还要离公司近,最好单间或者舍友不能太奇葩,要满足以上条件实在是太难了。其实最核心的问题是房租,押一付三&#xff0…

如何升级浏览器_手把手教你申请IOS14 Beta升级方法

就在最近苹果公司正式开放了IOS14 Public Beta 2还不了解IOS14的小伙伴参考一只废材:WWDC2020 之 IOS14 篇(内含升级方法和个人体验参考)​zhuanlan.zhihu.com本期废材就来教大家如何申请升级操作方法简单易懂又官方本方法每次发布版本更新都…

树的直径,树的最长路dp思想

dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下: 树的直径:树中距离最远的两点间的距离。 下面说几道题: hdu 2196:对于树上(双向边&am…

xLite连接asterisk提示sip408错误

xLite连接asterisk提示sip408错误 1.sip408应答代码全文 408 Request Timeout 在一段时间内,服务器不能产生一个终结应答,例如,如果它无法及时决定用户的位置。客户端可以在稍后不更改请求的内容然后重新尝试请求。 2.原因:造成…

linux sd卡 读写速度测试_铠侠(原东芝存储)SD卡,大容量存储时代,高速读写选择...

作为一个经常出去旅行的旅游博主,在旅行过程中,还是有很多拍摄的需求。无论是存储美图,还是视频,一个大容量、安全可靠的储存卡还是很有必要的。这既可以缓解因为容量不够,频繁导数据的尴尬。又不会因为数据丢失&#…

软件测试需求分析录音,谈一谈软件测试需求分析

在软件测试过程中我们首先要做的就是分析测试需求,一般都是由客户方给出,测试需求应该全部覆盖已定义的业务流程,以及功能和非功能方面的需求。分析软件测试需求是一个不可或缺的步骤,因为它有利于保证测试的质量和进度&#xff0…

hdu 4324 Triangle LOVE

http://acm.hdu.edu.cn/showproblem.php?pid4324 比赛的时候 脑子又短路了 “between A and B, if A don’t love B, then B must love A” 这句话读题的时候倒是看到了 思考方法的时候却忘了 伤不起呀 我们把喜欢自己的人数定为入度的话 假设到了第n1个人 那么前n个人 两两…

potplayer 多个进程_操作系统 | 进程同步与进程互斥

主题 进程同步与进程互斥 01进程同步 问题在多道批处理系统中,多个进程是并发执行的,而并发执行的进程具有异步性,也就是说,各个进程以各自独立的、不可预知的速度向前推进。这样会带来什么问题呢?如果有 AB…

Asterisk拨号方案常用函数说明

Asterisk拨号方案常用函数说明 (1)Answer() 应用于接听正在响铃通道,它不需要任何参数. (2)Playback() 应用在通道上播放事先录制好的语音文件.指定一个文件名(不带扩展名),可以使用绝对路径与相对路径. (3)Hangup() 应用在于挂断一个正在活动的通道. (4)Background() 它…

计算机指令int,汇编入门学习笔记 (十二)—— int指令、端口

疯狂的暑假学习之 汇编入门学习笔记 (十二)—— int指令、端口参考: 《汇编语言》 王爽 第13、14章一、int指令1. int指令引发的中断int n指令,相当于引发一个n号中断。执行过程相当于:(1)取中断类型吗n。(2)标志寄存器入栈;设置…

Java中间件:淘宝网系统高性能利器

【TechTarget中国原创】淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝。如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性、可靠性也显…

@autowired注解 抽象类_别再用ifelse了,用注解去代替他吧

来自公众号:咖啡拿铁策略模式经常在网上看到一些名为“别再if-else走天下了”,“教你干掉if-else”等之类的文章,大部分都会讲到用策略模式去代替if-else。策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现…

卸载mysql8.0卸载程序_程序卸载失败,来使用微软官方的Windows卸载工具试试

在我们实际的Windows操作系统使用中,总会遇到一些程序无法成功卸载的情况。当然,我们可以使用第三方软件来进行尝试卸载。要么,第三方软件会进行收费。要么,免费的会带给你捆绑软件的安装或者烦人的广告。还可能会造成系统文件的误…

Asterisk文件目录

目录 说明 /etc/asterisk Asterisk主目录,包含其它关于Asterisk的配置文件;  *zaptel.conf这个配置文件放在/etc,因为其它软件也可以使用Zaptel这个硬件及其驱动,所以不是放在/etc/asterisk里. /usr/lib/asterisk/modules 这个目录包含所有可以加载Asterisk模块(应用程序…

英特网rst服务器未在运行,技术员示范win7系统提示“英特尔(R)RST服务未在运行”的详细办法...

不知道大家有没有遇到过win7系统提示“英特尔(R)RST服务未在运行”的问题,最近有很多朋友来向我咨询win7系统提示“英特尔(R)RST服务未在运行”的问题如何解决,于是小编就个大家整理的win7系统提示“英特尔(R)RST服务未在运行”的解决步骤,就…

初识临时表

临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。 创建临时表有多种方法。其一,先创建表结构,跟创建普…

小米手机电池恢复代码_解决小米手机屏幕问题的方法

屏幕在我们的小米手机中永远不会失败,因为没有它,我们将无法使用可用的应用程序和功能。为了帮助大家,我们汇总了小米和Redmi手机中最常见的问题,为您提供了针对我们所面临的每种情况的解决方案。MIUI定制层汇集了适用于小米手机的…

Asterisk拨号方案语法基础

Asterisk语法基础 extensions.conf(四部分:context,extension,priorities,application) context:用于对extensions组命名,把拨号方案的不同部分进行分离,免得交织在一起。 表示方法是把名字放在[]的中间,名字只能用a~z,A~Z,0~9,以及连字号和下划线组成(空格不在允许的字符里…

使用promise解决回调地狱_「每日一题」Promise 是什么?

window.Promise 已经是 JS 的一个内置对象了。1. Promise 有规格文档吗?2. 你一般如何使用 Promise。-----------目前的 Promise 都遵循 Promises/A 规范。英文规范:https://promisesaplus.com/中文翻译:图灵社区 : 阅读 : 【翻译】Promises/…