常言道:男人是视觉动物。我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物。某些场合(比如面试、初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型。所以,第一眼,先走外貌协会的路线,打量一番,再通过望闻问切等各种手段获取关于你的大量信息(如谈吐、举止等),以快速建立起对于你的认识。
待人接物如此,搞技术也不例外,起码我是这样的。把玩了一番Hadoop的MapReduce过程,单词计数、去重、单表关联等运行的时候控制台打印出各种我看懂看不懂的信息,有了这些视觉呈现足以激发我的兴趣,激励并指引我慢慢走向其内部构造、运行机制。通过上篇的过渡也对于整个MapReduce的运行过程有了一个粗略的认识,下一步就是慢慢深入其源码,一窥hadoop究竟。
今天主要介绍有关Hadoop(0.20.2)的源码目录结构、各文件夹的职责以及源码中的包结构以及核心包对应的功能。
一.Hadoop的目录结构及职责
1.目录结构
2.各文件夹主要职责
bin: 此目录下为进行hadoop配置、运行以及管理的shell命令集合
c++:此目录下为linux下amd64-64位系统以及i386-32位系统提供的库文件集合
conf:此目录下为运行与配置hadoop环境需要的配置文件以及示例文件集合,实际运行时可以对照此目录下的文件结构进行相应的配置
contrib:此目录下针对hadoop运行过程中需要特殊强化的模块进行了模块化封装,此为其发布包以及相应的配置文件
docs:此目录下包含对于hadoop运行配置的基本文档,包括html和pdf两种格式
ivy:此目录下包含编译hadoop的ivy编译工具的脚本和配置文件
lib:此目录下包含编译以及运行hadoop环境必须的其他模块jar包集合
src:hadoop源码
webapps:发布包中的示例程序
build.xml:编译工程所需的ant配置文件
CHANGES.txt:新版本针对上一版本的更新点
二、源码包结构及功能
1.源码包结构
前提:需要将下载好的hadoop源码导入eclipse中,具体做法可以网上搜。需要将src下的core、tool、mapred以及hdfs四个文件夹拷贝到eclipse的项目中,得到结构图如下:
src/core:
src/mapred:
src/tools:
src/hdfs:
2.核心包主要功能介绍
tool:提供一些命令行工具,如DistCp,archive mapreduce: Hadoop的Map/Reduce实现 filecache: 提供HDFS文件的本地缓存,用于加快Map/Reduce的数据访问速度 fs: 文件系统的抽象,可以理解为支持多种文件系统实现的统一文件访问接口 hdfs: HDFS,Hadoop的分布式文件系统实现 ipc: 一个简单的IPC的实现,依赖于io提供的编解码功能 io: 表示层。将各种数据编码/解码,方便于在网络上传输 net: 封装部分网络功能,如DNS,socket security: 用户和用户组信息 conf: 系统的配置参数 metrics: 系统统计数据的收集,属于网管范畴 util: 工具类 record: 根据DDL(数据描述语言)自动生成他们的编解码函数,目前可以提供C++和Java http: 基于Jetty的HTTP Servlet,用户通过浏览器可以观察文件系统的一些状态信息和日志 log: 提供HTTP访问日志的HTTP Servlet
后面就是咀嚼代码的岁月了
对于Hadoop等大数据技术有兴趣的欢迎加群413471695交流讨论^_^