从今天开始新的系列:Hadoop总结篇
之前的hadoop学习篇由于是学习过程中随手记下来的一些内容,不具有系统性。所以在这个系列中,将凭着这段时间的研究心得,来记录一些自认为比较重要的东西。
比如作业从提交到执行到写出结果,将有一个从浅到深,逐步深入的过程。另外一些开发过程中使用到的比较零碎的东西,将会以外篇的形式记录。
hadoop版本:2.7.X
由于是第一篇,那么先来个综述吧。
学习hadoop我们到底要学些什么?
在2.x以后,hadoop的体系结构基本按如下三部分划分:
第一部分就是HDFS文件存储系统。就像我们操作系统的任意一种存储系统一样,这个模块决定了文件存在哪里,怎么存取。只不过他被hadoop集成使用。
主要的进程有三个: NameNode DataNode SecondaryName 这三个类,是有main函数的
第二部分就是计算框架mapreduce,同hadoop1.x里的实现基本一致
第三部分是调度框架yarn
yarn的作用是什么?调度!这个词是精髓,调度资源,调度任务。
主要进程:resourceManager ApplicationMaster,NodeManager这三个类,也是有main函数的。
我们要学的,主要就是这三部分内容。
下面先概括的说一下执行一个job的基本工作流程:
resourceManager 接到客户端提交的任务,会申请资源(container),本质是在集群中的一台机器上,与其上的NodeManager协调,在资源上启动ApplicationMaster。
然后把job的控制权交给ApplicationMaster。后者接管后,根据任务的描述信息,去向resourceManager 申请运行task的资源。根据resourceManager 的回馈(资源可用情况描述),与可用的节点(NodeManager)协调,启动task任务。
task任务启动,那么就使用计算框架内容执行具体的计算了。
而hdfs文件读取,贯穿于整个job执行阶段。
这里有必要说明一下,Job 和Application的关系,其实两者是一个东西在不同阶段的描述。提交的时候叫Job,提交后,hadoop系统跑起来后,那就是Application了。就好像一个人小时候在家里,家人都叫乳名。上学后,就用正式名字来称呼了。