1 / 48
文档名称:

Hadoop之HDFS研究.doc

格式:doc   大小:1,714KB   页数:48页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Hadoop之HDFS研究.doc

上传人:xxq93485240 2019/12/15 文件大小:1.67 MB

下载得到文件列表

Hadoop之HDFS研究.doc

文档介绍

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