AlstonWilliams's Blog

Thinking will not overcome fear but action will.

ZooKeeper源码解析(2)-ZooKeeper集群环境搭建

为了学习一致性协议,研究一下分布式系统的实现,就选择了ZooKeeper这个分布式键值对系统. 其实好久之前就在学习一致性协议了,读完了Paxos,Raft以及Zab的论文,一直都觉得其实它们差不多,差别在于细节的实现上,所以分别找了Paxos, Raft的开源实现打算研究,由于Zab是集成在ZooKeeper内部的,没有单独拿出来的实现(也搜到过,但是不敢保证其正确性),就看ZooKee...

ZooKeeper源码解析(10)-Watcher实现

我们知道,ZooKeeper有一个非常重要的功能,就是做分布式锁.而这个分布式锁,就是通过ZooKeeper的Watcher来实现的. 在这篇文章中,我们将会介绍,在ZooKeeper中,Watcher到底是如何实现的. ZooKeeper Watch介绍 在ZooKeeper中,有三个读操作:getData(), getChildren(), exists(),都接受一个叫做Watc...

ZooKeeper源码解析(1)-总览

研究一款产品的时候,我们要从设计,架构的角度,来考虑其设计者为何要这样设计,这样设计的优点是什么,缺点是什么,其适用场景是什么,还有没有更好的解决方案. 在研究其实现时,也不能仅仅思考其功能上是如何实现的,还要考虑如何保证代码的优雅性,如何充分解耦,如何进行测试,代码中进行了哪些优化,我们还可以如何进一步优化. 这样我们才能也设计出一款具有更高的性能,更好的产品. 在这篇文章中,我们将...

YARN源码解析(9)-ApplicationMaster容错

在上一篇文章中,我们介绍了TaskAttempt是如何做到容错的。我们可以看到,TaskAttempt的容错很简单,就是ApplicationMaster让ResourceManager重新分配一个Container,就好了。 而除了TaskAttempt需要容错之外,ApplicationMaster更需要容错性。毕竟它相当于MapReduce的大脑。在这篇文章中,我们会详细介绍这个过程...

YARN源码解析(8)-TaskAttempt容错

我们前面已经介绍了,一个Application,一个Job正常执行的工作流程。 但是,我们都知道,在一个分布式系统中,容错是很重要的。容错性,也是在设计一个分布式系统的时候,必须要仔细考虑的问题。 了解MapReduce的朋友都知道,在MapReduce执行的时候,每个Mapper或者Reducer都是一个Task。而这些Task又有对应的TaskAttempt,来做到对每个Task的容...

YARN源码解析(7)-NodeManager中几种ContainerExecutor

在NodeManager中,有三种运行Container的方式,它们分别是: DefaultContainerExecutor LinuxContainerExecutor DockerContainerExecutor 从它们的名字中,我们就能看得出来,默认情况下,一定使用的是DefaultContainerExecutor。 而一般情况下,DefaultContain...

YARN源码解析(6)-CapacityScheduler

这篇文章的前半部分,我会翻译一篇不错的关于介绍CapacityScheduler各种概念的文章。实际上,也不能算是翻译,我会在其中穿插一些我的理解,并会删减一些内容。 在后面,会介绍从CapacityScheduler的代码层面,是如何分配一个Container的。 为什么要翻译这么一篇文章呢?因为实际上,CapacityScheduler中的概念还是蛮多的。如果不懂这些概念,可能就理解...

YARN源码解析(5)-MapReduce中,在数据本地节点分配Task是如何做到的?

在前面一篇文章中,我们讲到了ResourceManager,NodeManager以及ApplicationMaster的职责,以及它们的工作流程。 我们提到了,ApplicationMaster会通过向ResourceManager发送ResourceRequest这个数据结构,来获得Container,然后再联系对应的NodeManager进行Container的启动。 我们也提到了...

YARN源码解析(4)-ResourceManager,-NodeManager以及ApplicationMaster的功能

在之前的Hadoop版本中,是不存在ResourceManager, NodeManager的概念的,此时,只有JobTracker以及TaskTracker的概念。 但是,此时,在功能上,耦合度很高。YARN作为一个资源调度平台,却不是一个通用的平台,而是紧紧和MapReduce结合在一起。 后来,Hadoop的开发团队终于意识到,应当把YARN和MapReduce的实现独立出来,让Y...

YARN源码解析(3)-作业提交2

在上一篇文章中,我们初步介绍了一个客户端是如何准备一个Job并提交给YARN.在这篇文章中,我们会简单介绍,在YARN端,是如何提交并启动这个Job的. 过程 首先,Client会发送ApplicationSubmissionContext以及ContainerLaunchContext到ResourceManager. 我们可以看到,这里并不会使用rmClient.submi...