Hadoop源代码分析 之hadoop配置及启动(3)—–classpath与hadoop主要组件启动过程

原创文档,转载请将原文url地址标明

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

本文重点研究hadoop启动过程中主要功能模块同配置文件的作用,具体各个部件启动详细情况,后面会继续介绍。Hadoop是一个分布式的系统(也是分散式,各个组件在正常工作过程中都不在一个服务器上,这样才能发挥它的优点)这样一个分散式系统,如何让系统中各个节点都能协调工作起来?如何传递消息的,如何协调一致的启动的?

要回答或者理解这样一个过程,需要对每个组件启动有个了解,然后理解他们的启动过程,启动过程能协调一致,后续工作才能进行。然后是如何协调地通信,协调的工作。在本文我们先初步了解各个组件是如何启动。稍后我们总结整体启动过程。

系列文章简介,hadoop代表一种新的编程思想,基于hadoop有很多衍生项目,充分利用他们是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对我们将有非常大的帮助,我们以hadoop 0.1.0版本为基础逐步分析他的基本工作原理、结构、思路等等,本文是系统文章的一部分,系列文章详情参见

http://www.iigrowing.cn/hadoop_src_introduction

希望通过这个能帮助我们理解生产中hadoop。 时间有限,经验不足,疏漏难免,在这里仅分享一些心得,希望对大家能起到一个抛砖引玉的作用,有问题请大家给我留言或者评论等,这样也能对我的工作有很大帮助。感谢您阅读这篇文章!

1 Hadoop几个主要的部件

从hadoop相关脚本可知道,hadoop包括如下几个重要的部件(详情请参见前一篇文章)

if [ "$COMMAND" = "namenode" ] ; then

CLASS='org.apache.hadoop.dfs.NameNode'

Hadoop名称节点,主要负责文件系统管理工作

elif [ "$COMMAND" = "datanode" ] ; then

CLASS='org.apache.hadoop.dfs.DataNode'

Hadoop数据节点, 主要负责hadoop的文件存储工作(分布式存储)

elif [ "$COMMAND" = "dfs" ] ; then

CLASS=org.apache.hadoop.dfs.DFSShell

Hadoop的管理脚本, 管理员通过这个脚本程序,管理hadoop的相关事宜

elif [ "$COMMAND" = "fsck" ] ; then

CLASS=org.apache.hadoop.dfs.DFSck

Hadoop的文件检查, 管理通过这个脚本对文件系统进行相关检查

elif [ "$COMMAND" = "jobtracker" ] ; then

CLASS=org.apache.hadoop.mapred.JobTracker

Hadoop任务管理节点, 负责hadoop相关工作任务的管理调度工作

elif [ "$COMMAND" = "tasktracker" ] ; then

CLASS=org.apache.hadoop.mapred.TaskTracker

Hadoop的任务执行节点,负责hadoopmapreduce程序的具体执行工作等

elif [ "$COMMAND" = "job" ] ; then

CLASS=org.apache.hadoop.mapred.JobClient

Hadoop的任务客户端,负责同任务管理程序通行等,完成任务的处理等

2 NameNode的启动

Namenode启动过程中,主要包括format分支以及正常工作两个分支,相对比较简单(从运行到调用配置文件),因此我们主要采用静态查看代码方法就可以了,如下(注意红色区域)

clip_image002

如上图, 在namenode的main函数中, 通过getDir函数获取namenode工作文件夹,而getDir函数定义如下图

clip_image004

GetDir函数从配置文件中获取用户的相关配置

clip_image006

Configuration类根据用户classpath中默认配置的hadoop配置文件中的设置,获取相关属性。因此如上配置文件不在classpath中,则系统会抛出异常,程序退出,启动失败。

Namenode另外一个分支是启动一个namenode节点(上面是一段格式化namenode的代码),这个分支中,main函数调用namenode类的构造函数进行相关操作,如下:

/**

* Create a NameNode at the default location

*/

public NameNode(Configuration conf) throws IOException {

this(getDir(conf),

DataNode.createSocketAddr

(conf.get("fs.default.name", "local")).getPort(), conf);

}

在构造函数中,调用配置文件获取相关属性,然后初始化。

3 DataNode的启动

略,参见第一篇文章,已经包括了演示视频等信息。

4 DFSShell启动

这个过程比较长,采用静态查找的办法找到调用配置文件过程比较长,因此需要采用一点特别的技巧,这里采用动态跟踪的办法。具体是在被认为应该调用配置文件的地方设置断点,然后运行程序(调试模式),程序会在断点处中断运行,这个时候,在通过调试器的堆栈调用次序获取,调用关系。

参考视频

shell-conf_dsfshell-debug-iigrowing.rar5.58M 2012年12月1日 16:39 到期 下载

clip_image008

从上图中,可以知道这个类的功能哈!

主函数中,通过调用FileSystem.parseArgs(….),获取一个文件系统,这个文件系统可以是本地文件系统,也可以是分布式文件系统。具体情况根据配置文件的定义了,在未做任何配置情况,系统将是本地文件系统,供用户调试基本程序,这个接口等同分布式文件系统是相同的。

在程序中正确配置后,返回的是一个本地文件系统,这个文件系统封装了大部分网络操作等,用户仅仅关心或者将文件系统作为本地文件一样看待,简化了编程等。

clip_image009

FileSystem的ParseArgs函数中,调用了 get(conf)函数,相关定义如下

clip_image011

在上面定义中,函数首先获取了配置文件相关设置,这个配置是系统根据classpath进行获取的配置文件。

5 DFSck启动

clip_image013

从上图,可以看到DFSck的具体功能了(这里面功能笔者用的不多,因此没多研究,抱歉)

这个类中main函数调用类的构造函数,类构造函数如下图

clip_image015

在构造函数中,最终调用配置文件(从classpath中获取配置文件)

6 JobTracker启动

这个类在hadoop中非常重要了,负责正集群的任务调度工作,

clip_image016

在这个类的main函数中,调用startTracker函数进行相关功能的工作,同时这类参数中,动态创建了一个匿名的configuration类。这类会从系统的classpath中寻找hadoop的配置文件等,然后初始化,若是寻找不到,则抛出异常退出。

clip_image017

startTracker函数定义如上,函数最后通过调用构造函数,构造函数如下

clip_image018

构造函数创建了一个配置文件,这个配置文件继承了configuration类,最后调用configuration的get方法获取配置文件,这个方法需要从系统的classpath中获取配置文件,然后获取参数

clip_image020

7 TaskTracker启动

这类负责hadoop中工作任务的具体执行等工作

clip_image022

如上图,在main函数中,创建了类的一个实例,实例中调用了 jobTracker的一个方法,方法定义如下:

clip_image023

方法中最终需要从classpath中获取相关配置,然后系统能正常的工作

8 JobClient启动

Jobclient是系统任务下达的一个借口,用户(我们)编写的hadoop程序都通过这个接口发布给任务管理程序。

累了,具体代码自己看下面图中 红色部分代码吧!多谢!!

clip_image025

Hadoop是个复杂的应用系统,了解的他的启动过程,是理解他的必备的过程!

 

参考文章
Hadoop源代码分析 之Datanode工作原理(5)—–拷贝文件过程总结

Hadoop源代码分析 之Datanode工作原理(4)—–拷贝本地文件到hadoop的过程

Hadoop源代码分析 之Datanode工作原理(3)—–datanode工作过程总结

hadoop源代码介绍

Hadoop源代码分析 之Datanode工作原理(2)—–datanode基本工作过程

Hadoop源代码分析 之Datanode工作原理(1)—–datanode启动过程代码分析

Hadoop源代码分析 之hadoop配置及启动(4)—–启动过程汇总

Hadoop源代码分析 之hadoop配置及启动(3)—–classpath与hadoop主要组件启动过程

Hadoop源代码分析 之hadoop配置及启动(2)—–classpath与启动shell脚本

Hadoop源代码分析 之hadoop配置及启动(1)—–classpath与配置文件

Hadoop源代码分析 之hadoop源代码项目(1)—–创建eclipse下java项目

Hadoop源代码分析 之环境配置(2)—–虚拟机ip配置

Hadoop源代码分析 之环境配置(1)—–hadoop虚拟机配置

Hadoop源代码分析 之概念介绍(2)—–初学者眼中的hadoop

Hadoop源代码分析 之概念介绍(1)—–服装加工,火车货物检查与hadoop

调试eclipse下hadoop的map reduce程序

发表评论