欢迎来到天天文库
浏览记录
ID:6127046
大小:1.84 MB
页数:47页
时间:2018-01-04
《hadoop之hdfs研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Hadoop之HDFS研究前言:网上已经有了一些技术博客来分析Hadoop,这里的分析基于以下的技术博客,并感谢,本文的源代码分析结合了技术博客和hadoop0.19.0版本的源代码,并融入了自己的理解。汇总如下,http://caibinbupt.javaeye.com/侧重HDFS的分析,是我学习的重要参考资料和起点。http://coderplay.javaeye.com/侧重MapReduce的分析,暂时还没有深入学习。http://www.cppblog.com/javenstudio/有部分Ha
2、doop,也有Lucene的分析。暂时还没有深入学习。http://hadoop.apache.org/core/docs/current/api/hadoop的官方API说明本文的分析以http://caibinbupt.javaeye.com/为基础,但侧重点不同。本文分析的目标如下:1,删繁就简,考虑一个最简单、能跑起来的HDFS是如何实现的,对于一些系统升级等细节不涉及。2,理清系统的主要模块之间的交互关系,便于从整体上把握系统。对模块采用内外两种方式分析。先搞明白模块的外部接口,干什么用,怎么用。
3、再考虑模块的内部是如何怎么实现的。技术博客中对模块内部是如何实现的解释比较多,本文更多的从如何使用模块的角度讲3,从改进和研究的角度去看系统,重点关注有研究价值部分的代码(例如,块的放置策略,MapReduce的调度策略)实现,找到相关的代码,搞清楚修改代码需要使用哪些API,目前的实现策略是什么。目前状况:分析了部分代码,NameNode的分析只完成了部分,很多细节还没有看明白。整体概览 主要的包与功能介绍PackageDependencestool提供一些命令行工具,如DistCp,archivemap
4、reduceHadoop的Map/Reduce实现filecache提供HDFS文件的本地缓存,用于加快Map/Reduce的数据访问速度fs文件系统的抽象,可以理解为支持多种文件系统实现的统一文件访问接口hdfsHDFS,Hadoop的分布式文件系统实现ipc一个简单的IPC的实现,依赖于io提供的编解码功能参考:http://zhangyu8374.javaeye.com/blog/86306io表示层。将各种数据编码/解码,方便于在网络上传输。完成对象的序列化与反序列化。net封装部分网络功能,如DN
5、S,socketsecurity用户和用户组信息conf系统的配置参数metrics系统统计数据的收集,属于网管范畴util工具类record根据DDL(数据描述语言)自动生成他们的编解码函数,目前可以提供C++和Javahttp基于Jetty的HTTPServlet,用户通过浏览器可以观察文件系统的一些状态信息和日志log提供HTTP访问日志的HTTPServletHDFS的设计概述:NameNode的设计维护名字空间,是HDFS中文件目录和文件分配的管理者。保存的重要信息如下:文件名————>数据块,N
6、ameNode在其本地磁盘上保存为文件(持久化)对目录树和文件名的更新——>数据块,使用操作日志来保存更新。数据块————>DataNode列表,NameNode不存,通过DataNode上报建立起来。一个HDFS集群上可能包含成千个DataNode节点,这些DataNode定时和NameNode通信,接受NameNode的指令。为了减轻NameNode的负担,NameNode上并不永久保存那个DataNode上有那些数据块的信息,而是通过DataNode启动时的上报,来更新NameNode上的映射表。Da
7、taNode和NameNode建立连接以后,就会不断地和NameNode保持心跳。心跳的返回其还也包含了NameNode对DataNode的一些命令,如删除数据库或者是把数据块复制到另一个DataNode。应该注意的是:NameNode不会发起到DataNode的请求,在这个通信过程中,它们是严格的客户端/服务器架构。DataNode当然也作为服务器接受来自客户端的访问,处理数据块读/写请求。DataNode之间还会相互通信,执行数据块复制任务,同时,在客户端做写操作的时候,DataNode需要相互配合,保
8、证写操作的一致性。下面我们就来具体分析一下DataNode的实现。DataNode的实现包括两部分,一部分是对本地数据块的管理,另一部分,就是和其他的实体打交道。我们先来看本地数据块管理部分。安装Hadoop的时候,我们会指定对应的数据块存放目录,当我们检查数据块存放目录目录时,我们回发现下面有个叫dfs的目录,所有的数据就存放在dfs/data里面。其中有两个文件,storage里存的东西是一些出错信息,貌似是
此文档下载收益归作者所有