hadoop负载均衡与垃圾回收

负载均衡

负载的均衡,是分布式系统中一个永恒的话题,要让大家各尽其力齐心干活,发挥各自独特的优势,不能忙得忙死闲得闲死,影响战斗力。而且,负载均衡也是一个复杂的问题,什么是均衡,是一个很模糊的概念。比如,在分布式文件系统中,总共三百个数据块,平均分配到十个数据服务器上,就算均衡了么?其实不一定,因为每一个数据块需要若干个备份,各个备份的分布应该充分考虑到机架的位置,同一个机架的服务器间通信速度更快,而分布在不同机架则更具有安全性,不会在一棵树上吊死。。。

在这里说的负载均衡,是宽泛意义上的均衡过程,主要涵盖两个阶段的事务,一个是在任务初始分配的时候尽可能合理分配,另一个是在事后时刻监督及时调整。。。

在HDFS中, ReplicationTargetChooser 类,是负责实现为新分配的数据块寻找婆家的。基本上来说,数据块的分配工作和备份的数量、申请的客户端地址(也就是写入者)、已注册的数据服务器位置,密切相关。其算法基本思路是只考量静态位置信息,优先照顾写入者的速度,让多份备份分配到不同的机架去。具体算法,自行参见源码。此外,HDFS的 Balancer 类,是为了实现动态的负载调整而存在的。Balancer类派生于 Tool 类,这说明,它是以一个独立的进程存在的,可以独立的运行和配置。它运行有 NamenodeProtocolClientProtocol 两个协议,与主控服务器进行通信,获取各个数据服务器的负载状况,从而进行调整。主要的调整其实就是一个操作,将一个数据块从一个服务器搬迁到另一个服务器上。Balancer会向相关的 目标数据服务器 发出一个 DataTransferProtocol.OP_REPLACE_BLOCK 消息,接收到这个消息的数据服务器,会将数据块写入本地,成功后,通知主控服务器,删除早先的那个数据服务器上的同一块数据块。具体的算法请自行参考源码。。。

垃圾回收

对于垃圾,大家应该耳熟能详了,在分布式文件系统而言,没有利用价值的数据块备份,就是垃圾。在现实生活中,我们提倡垃圾分类,为了更好的理解分布式文件系统的垃圾收集,搞个分类也是很有必要的。基本上,所有的垃圾都可以视为两类,一类是由 系统正常逻辑产生 的,比如某个文件被删除了,所有相关的数据块都沦为垃圾了,某个数据块被负载均衡器移动了,原始数据块也不幸成了垃圾了。此类垃圾最大的特点,就是 主控服务器是生成垃圾的罪魁祸首 ,也就是说主控服务器完全了解有哪些垃圾需要处理。另外还有一类垃圾,是由于 系统的一些异常症状产生 的,比如某个数据服务器停机了一段,重启之后发现其上的某个数据块已经在其他服务器上重新增加了此数据块的备份,它上面的那个备份过期了失去价值了,需要被当作垃圾来处理了。此类垃圾的特点恰恰相反, 主控服务器无法直接了解到垃圾状况 ,需要曲线救国。。。

在HDFS中,第一类垃圾的判定自然很容易,在一些正常的逻辑中产生的垃圾,全部被塞进了 FSNamesystemrecentInvalidateSets 这个Map中。而第二类垃圾的判定,则放在数据服务器发送其数据块信息来的过程中,经过与本地信息的比较,可以断定,此数据服务器上有哪些数据块已经不幸沦为垃圾。同样,这些垃圾也被塞到recentInvalidateSets中去。在与数据服务器进行心跳交流的过程中,主控服务器会将它上面有哪些数据块需要删除,数据服务器对这些数据块的态度是, 直接物理删除 。在GFS的论文中,对如何删除一个数据块有着不同的理解,它觉着应该先缓存起来,过几天没人想恢复它了再删除。在HDFS的文档中,则明确表示,在现行的应用场景中,没有需要这个需求的地方,因此,直接删除就完了。这说明,理念是一切分歧的根本:)。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

C8051F060单片机在数字电源控制器中的应用

引言 随着科技的发展,数字控制系统的应用越来越广泛。以前的模拟电源控制系统线路复杂,控制精度低,故障率高。因此开发全数字电源控制系统越来越重要。微控制器,微处理...

3126
来自专栏编程

2018 年初值得关注的 25 个新 Android 库和项目

协作翻译 原文:25 new Android libraries and projects to check at the beginning of 2018 ...

26310
来自专栏依乐祝

.NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程

上一篇文章中我带着大家进行了权限部分的极简设计,也仅仅是一个基本的权限设计。不过你完全可以基于这套权限系统设计你的更复杂的权限系统,当然更复杂的权限系统要根据你...

1632
来自专栏魏琼东

AgileEAS.NET SOA中间件平台更新日志 2015-04-28

     AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平...

990

用MTR诊断网络问题

MTR是一个功能强大的工具,使管理员能够诊断和隔离网络错误,并向上游提供商提供网络状态报告。MTR表示的演进traceroute通过提供更大的数据样本,好像增强...

9705
来自专栏个人分享

分布式系统常用思想和技术

感谢该作者的总结,转载地址:http://blog.arganzheng.me/  本人将重点进行加粗,便于大家一起查阅学习

1403
来自专栏JackieZheng

可视化工具gephi源码探秘(二)---导入netbeans

  在上篇《可视化工具gephi源码探秘(一)》中主要介绍了如何将gephi的源码导入myeclipse中遇到的一些问题,此篇接着上篇而来,主要讲解当下通过my...

2708
来自专栏java工会

MVC设计模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器...

1260
来自专栏大数据文摘

手把手 | 如何在计算机上配置数据科学开发环境

从Python、R等编程语言到以Git为例的版本控制系统甚至Unix Shell等命令行工具,数据科学家的武器库现在越来越丰富了,在个人计算机上同时使用这些武器...

790
来自专栏企鹅号快讯

如何与深度学习服务器优雅的交互?

有没有想到小夕今天会发文章呢?( ̄∇ ̄)有木有超级想小夕呢( ̄∇ ̄) 小夕在前面写了一堆纯理论和半理论的文章,不要怕,这次来一篇纯工程的tricks集合! 如果...

3609

扫码关注云+社区

领取腾讯云代金券