- 浏览: 134612 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zfcejb:
你好,这X-gen有源码参考吗
X-gen PPT下载——《研磨设计模式》 实战 -
1927105:
LZ研究过Hibernate4里的监听时间吗?我这边用4.3. ...
Hibernate4实战 之第六部分:基本实现原理 -
hbbbs:
看介绍 挺美的!
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
即这个是综合运用设计模式的
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
很值得一看
X-gen PPT下载——《研磨设计模式》 实战
第一部分:当前HDFS架构详尽分析
HDFS架构
•NameNode
•DataNode
•Sencondary NameNode
数据存储细节
NameNode 目录结构
Namenode 的目录结构:
${ dfs.name.dir}/current /VERSION
/edits
/fsimage
/fstime
/edits
/fsimage
/fstime
dfs.name.dir 是 hdfs-site.xml 里配置的若干个目录组成的列表。
NameNode
Namenode 上保存着 HDFS 的名字空间。对于任何对文件系统元数据产生修改的操作, Namenode 都会使用一种称为 EditLog 的事务日志记录下来。例如,在 HDFS 中创建一个文件, Namenode 就会在 Editlog 中插入一条记录来表示;同样地,修改文件的副本系数也将往 Editlog 插入一条记录。 Namenode 在本地操作系统的文件系统中存储这个 Editlog 。整个文件系统的名 字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为 FsImage 的文件中,这 个文件也是放在 Namenode 所在的本地文件系统上。
Namenode 在内存中保存着整个文件系统的名字空间和文件数据块映射(Blockmap) 的映像 。这个关键的元数据结构设计得很紧凑,因而一个有 4G 内存的Namenode 足够支撑大量的文件 和目录。当 Namenode 启动时,它从硬盘中读取Editlog 和 FsImage ,将所有 Editlog 中的事务作 用在内存中的 FsImage 上,并将这个新版本的 FsImage 从内存中保存到本地磁盘上,然后删除 旧的 Editlog ,因为这个旧的 Editlog 的事务都已经作用在 FsImage 上了。这个过程称为一个检查 点(checkpoint) 。在当前实现中,检查点只发生在 Namenode 启动时,在不久的将来将实现支持 周期性的检查点。
HDFS NameSpace
HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数 现有的文件系统类似:用户可以创建、删除、移动或重命名文件。当前, HDFS 不支持用户磁盘配额和访问权限控制,也不支持硬链接和软链接。但 是 HDFS 架构并不妨碍实现这些特性。
Namenode 负责维护文件系统命名空间,任何对文件系统名字空间或属 性的修改都将被 Namenode 记录下来。应用程序可以设置 HDFS 保存的文件 的副本数目。文件副本的数目称为文件的副本系数,这个信息也是由 Namenode 保存的。
DataNode
Datanode 将 HDFS 数据以文件的形式存储在本地的文件系统中,它并不知道有 关 HDFS 文件的信息。它把每个 HDFS 数据块存储在本地文件系统的一个单独的文件 中。 Datanode 并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定 每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录中创建所 有的本地文件并不是最优的选择,这是因为本地文件系统可能无法高效地在单个目 录中支持大量的文件。
当一个 Datanode 启动时,它会扫描本地文件系统,产生一个这些本地文件对应 的所有 HDFS 数据块的列表,然后作为报告发送到 Namenode ,这个报告就是块状态 报告。
Secondary NameNode
Secondary NameNode 定期合并 fsimage 和 edits 日志,将 edits 日志文件大小控制在一个限度下。
配置Secondary NameNode
• conf/masters文件指定的为Secondary NameNode节点
•修改在masters文件中配置了的机器上的conf/hdfs-site.xml文件,加上如下选项:
<property> <name>dfs.http.address</name> <value>namenode.hadoop-host.com:50070</value> </property>
•core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。
<property> <name>fs.checkpoint.period</name> <value>3600</value> <description>The number of seconds between two periodic checkpoints. </description> </property>
<property> <name>fs.checkpoint.size</name> <value>67108864</value> <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description> </property>
Secondary NameNode
Secondary NameNode处理流程
(1) 、 namenode 响应 Secondary namenode 请求,将 edit log 推送给Secondary namenode , 开始重新写一个新的 edit log 。
(2) 、 Secondary namenode 收到来自 namenode 的 fsimage 文件和 edit log 。
(3) 、 Secondary namenode 将 fsimage 加载到内存,应用 edit log , 并生成一 个新的 fsimage 文件。
(4) 、 Secondary namenode 将新的 fsimage 推送给 Namenode 。
(5) 、 Namenode 用新的 fsimage 取代旧的 fsimage , 在 fstime 文件中记下检查 点发生的时
HDFS通信协议
所有的 HDFS 通讯协议都是构建在 TCP/IP 协议上。客户端通过一个可 配置的端口连接到 Namenode , 通过 ClientProtocol 与 Namenode 交互。而Datanode 是使用 DatanodeProtocol 与 Namenode 交互。再设计上,DataNode 通过周期性的向 NameNode 发送心跳和数据块来保持和 NameNode 的通信,数据块报告的信息包括数据块的属性,即数据块属于哪 个文件,数据块 ID ,修改时间等, NameNode 的 DataNode 和数据块的映射 关系就是通过系统启动时DataNode 的数据块报告建立的。从 ClientProtocol 和 Datanodeprotocol 抽象出一个远程调用 ( RPC ), 在设计上, Namenode 不会主动发起 RPC , 而是是响应来自客户端和 Datanode 的 RPC 请求。
HDFS的安全模式
Namenode 启动后会进入一个称为安全模式的特殊状态。处于安全模式 的Namenode 是不会进行数据块的复制的。 Namenode 从所有的 Datanode 接收心跳信号和块状态报告。块状态报告包括了某个 Datanode 所有的数据 块列表。每个数据块都有一个指定的最小副本数。当 Namenode 检测确认某 个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全 (safely replicated) 的;在一定百分比(这个参数可配置)的数据块被 Namenode 检测确认是安全之后(加上一个额外的 30 秒等待时间), Namenode 将退出安全模式状态。接下来它会确定还有哪些数据块的副本没 有达到指定数目,并将这些数据块复制到其他 Datanode上。
第二部分:HDFS文件读取的解析
文件读取流程
流程分析
•使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
• Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;
•客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.
•读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;
•当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
•读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。
第三部分:HDFS文件写入的解析
文件写入流程
流程分析
•使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
•Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件 创建一个记录,否则会让客户端抛出异常;
•当客户端开始写入文件的时候,会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。
•开始以pipeline(管道)的形式将packet写入所有的replicas中。把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。
•最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
•如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。
流水线复制
当客户端向 HDFS 文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副 本系数设置为 3 ,当本地临时文件累积到一个数据块的大小时,客户端会从 Namenode 获取一个 Datanode 列表用于存放副本。然后客户端开始向第一个 Datanode 传输数据,第一个 Datanode 一小部分一小部分 (4 KB) 地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中 第二个 Datanode节点。第二个 Datanode 也是这样,一小部分一小部分地接收数据,写入本地 仓库,并同时传给第三个 Datanode 。最后,第三个 Datanode 接收数据并存储在本地。因此, Datanode 能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的 方式从前一个 Datanode 复制到下一个
更细节的原理
客户端创建文件的请求其实并没有立即发送给 Namenode ,事实上,在刚开始阶 段 HDFS 客户端会先将文件数据缓存到本地的一个临时文件。应用程序的写操作被透 明地重定向到这个临时文件。当这个临时文件累积的数据量超过一个数据块的大小 ,客户端才会联系 Namenode 。 Namenode 将文件名插入文件系统的层次结构中,并 且分配一个数据块给它。然后返回 Datanode 的标识符和目标数据块给客户端。接着 客户端将这块数据从本地临时文件上传到指定的 Datanode 上。当文件关闭时,在临 时文件中剩余的没有上传的数据也会传输到指定的 Datanode 上。然后客户端告诉 Namenode 文件已经关闭。此时 Namenode 才将文件创建操作提交到日志里进行存储 。如果 Namenode 在文件关闭前宕机了,则该文件将丢失。
第四部分:副本机制
特点
1. 数据类型单一
2. 副本数比较多
3. 写文件时副本的放置方法
4. 动态的副本创建策略
5. 弱化的副本一致性要求
副本摆放策略
修改副本数
1.集群只有三个Datanode,hadoop系统replication=4时,会出现什么情况?
对于上传文件到hdfs上时,当时hadoop的副本系数是几,这个文件的块数副本数就会有几份,无论以后你怎么更改系统副本系统,这个文件的副本数都不会改变,也就说上传到分布式系统上的文件副本数由当时的系统副本数决定,不会受replication的更改而变化,除非用命令来更改文件的副本数。因为dfs.replication实质上是client参数,在create文件时可以指定具体replication,属性dfs.replication是不指定具体replication时的采用默认备份数。文件上传后,备份数已定,修改dfs.replication是不会影响以前的文件的,也不会影响后面指定备份数的文件。只影响后面采用默认备份数的文件。但可以利用hadoop提供的命令后期改某文件的备份数:hadoop fs -setrep -R 1。如果你是在hdfs-site.xml设置了dfs.replication,这并一定就得了,因为你可能没把conf文件夹加入到你的 project的classpath里,你的程序运行时取的dfs.replication可能是hdfs-default.xml里的 dfs.replication,默认是3。可能这个就是造成你为什么dfs.replication老是3的原因。你可以试试在创建文件时,显式设定replication。replication一般到3就可以了,大了意义也不大。
发表评论
-
Hadoop实战-中高级部分 之 Hadoop 管理
2012-10-15 17:06 1875Hadoop RestFul Hadoop ... -
Hadoop实战-中高级部分 之 Hadoop RPC
2012-10-13 07:23 1409关注我们的微 ... -
Hadoop实战-中高级部分 之 Hadoop RPC
2012-10-12 21:12 96关注我们的微博 ... -
Hadoop实战-中高级部分 之 Hadoop RPC
2012-10-12 15:57 62关注我们的微博 Hadoop RestFu ... -
Hadoop实战-中高级部分 之 Hadoop RPC
2012-10-12 13:58 28关注我们的微博 Hadoop RestFul ... -
Hadoop实战-中高级部分 之 Hadoop RPC
2012-09-25 16:53 96Hadoop RestFul Hadoop HDF ... -
Hadoop实战-中高级部分 之 Hadoop 管理
2012-09-18 08:41 192Hadoop RestFul Hadoop HDF ... -
Hadoop实战-中高级部分 之 Hadoop MapReduce工作原理
2012-09-14 17:26 2872Hadoop RestFul Hadoop H ... -
Hadoop实战-中高级部分 之 Hadoop MapReduce工作原理
2012-09-14 08:24 161Hadoop RestFul Hadoop H ... -
Hadoop实战-中高级部分 PPT 和 源码 下载
2012-09-13 12:55 1980内容概述:Hadoop中高级精品课程,深入学习HDFS的原理; ... -
Hadoop实战-中高级部分 之 Hadoop IO
2012-09-09 07:17 2521Hadoop RestFul Hadoop H ... -
Hadoop实战-中高级部分 之 Hadoop MapReduce高级编程
2012-09-09 07:17 2013Hadoop RestFul Hadoop HDF ... -
Hadoop实战-中高级部分 之 Hadoop作业调优参数调整及原理
2012-09-07 18:46 1313Hadoop实战-中高级部分 之 Hadoop作业 ... -
Hadoop实战-中高级部分 之 Hadoop HA
2012-09-07 18:45 1428Hadoop实战-中高级部分 之 Hadoop ... -
Hadoop实战-中高级部分 之 Hadoop HA
2012-09-07 07:03 247Hadoop实战-中高级部分 之 Hadoop作业 ... -
Hadoop实战-中高级部分 之 Hadoop作业调优参数调整及原理
2012-09-07 07:03 166Hadoop实战-中高级部分 之 Hadoop作业调 ... -
Hadoop实战-中高级部分 之 Hadoop作业调优参数调整及原理
2012-09-06 20:28 150Hadoop实战-中高级部分 之 Hadoop作业 ... -
Hadoop实战-中高级部分 之 Hadoop HA
2012-09-06 20:28 122Hadoop实战-中高级部分 之 Hadoop作业调优参 ... -
Hadoop实战-中高级部分 之 Hadoop HA
2012-09-06 16:45 54Hadoop实战-中高级部分 之 Hadoop作业调优参数调整 ... -
Hadoop实战-中高级部分 之 Hadoop作业调优参数调整及原理
2012-09-06 16:44 31Hadoop实战-中高级部分 之 Hadoop作业调优参数调整 ...
相关推荐
Hadoop实战文档的这一部分主要聚焦于大数据技术体系的核心组成部分,特别强调了Hadoop技术的重要地位,并对其核心组件HDFS(Hadoop分布式文件系统)和MapReduce进行了深入解析。同时,也讨论了与传统大数据解决方案...
### Hadoop实战中文版知识点概览 #### 一、Hadoop概述 - **定义与背景**:Hadoop是一个开源框架,用于分布式存储和处理大型数据集。它最初由Apache软件基金会开发,旨在解决大规模数据处理的问题。Hadoop的核心...
在本课程"云计算分布式大数据Hadoop实战之路--从零开始(第1-10讲)"中,我们将全面深入地探讨Hadoop这一核心的云计算大数据处理框架。Hadoop是Apache软件基金会开发的一个开源项目,其设计目标是允许在廉价硬件上...
- **HDFS架构**: - **NameNode**:负责管理文件系统的命名空间和客户端对文件的访问。 - **DataNode**:存储实际的数据块。 - **Secondary NameNode**:辅助NameNode,定期合并fsimage和edits文件,并减少...
- **HDFS架构**:包括NameNode、DataNode和Secondary NameNode等关键组件。 - **HDFS工作原理**:数据块的读写过程、副本机制及数据冗余策略。 - **HDFS命令行操作**:常用命令如上传文件、查看目录结构、复制文件等...
《Hadoop实战》一书是针对大数据处理领域中核心组件Hadoop进行深入探讨的技术书籍。Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它允许在廉价硬件上存储和处理海量数据。这本书的主要目标是帮助读者理解...
这两本书——《Hadoop实战中文版》和《Hadoop技术内幕:深入理解MapReduce架构设计与实现原理》提供了全面且深入的Hadoop学习资源。 《Hadoop实战中文版》是入门Hadoop的优秀教程,全书共12章,涵盖266页内容,它...
通过这个深入理解Hadoop HDFS的高级教程,读者将能全面了解HDFS的工作原理,并具备在实际环境中部署、管理和优化HDFS的能力。无论你是数据工程师、大数据分析师还是系统管理员,都能从中受益匪浅。
《王家林的云计算分布式大数据Hadoop实战高手之路》是一套全面且深入的教程,旨在帮助初学者和有经验的IT专业人士掌握Hadoop的核心技术和应用。这套教程包含了从基础到高级的多方面内容,覆盖了Hadoop的安装、配置、...
1. **Hadoop架构**:Hadoop主要由两个核心组件构成,HDFS(Hadoop Distributed File System)和MapReduce。HDFS负责数据的分布式存储,而MapReduce则用于并行处理数据。 2. **HDFS**:HDFS是一个高容错性的系统,...
《Hadoop实战解决方案指南》第二版是一本专为IT专业人士准备的深度解析Hadoop技术的书籍。这本书通过实际案例,详细介绍了如何在企业环境中运用Hadoop解决各种数据处理问题。以下将围绕书中的核心知识点进行深入阐述...
### Hadoop实战——初级部分学习笔记 2 #### 一、引言与背景 随着大数据时代的到来,Hadoop作为处理大规模数据集的核心工具之一,其重要性和应用范围日益扩大。本文将基于私塾在线《Hadoop实战——初级部分》的...
本课程“Hadoop大数据开发与性能调优实战培训课程-Hadoop组件详解”旨在深入探讨Hadoop的主要组件及其优化策略,帮助开发者和数据工程师提升在大数据环境中的实践能力。 首先,我们要了解Hadoop的基础架构,它主要...
2. **HDFS详解**:深入探讨HDFS的设计理念、内部机制以及高级功能,例如数据块管理、数据副本策略等。 3. **MapReduce编程**:教授如何使用MapReduce进行数据处理,包括基本的MapReduce程序设计、优化技巧以及案例...
6. Hadoop实战案例: 实战案例能够帮助读者加深对Hadoop的理解。可以介绍一些常见的Hadoop应用案例,如使用Hadoop进行日志文件分析、处理大规模的数据集、构建数据仓库等。通过这些案例,用户可以了解在实际工作中...
2. **HDFS操作**:学习如何上传、下载、查看和删除HDFS中的文件,理解HDFS的数据块、副本和容错机制。 3. **MapReduce编程**:通过实例了解MapReduce的工作流程,编写Mapper和Reducer程序,掌握Job提交和监控。 4. *...