`
yale
  • 浏览: 356985 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

HDFS框架中便于借鉴的设计

 
阅读更多

HDFS几个设计特点:

1. Block的放置:默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份无非就是为了数据安全,考虑同一Rack的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。
2. 心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。
3. 数据交验:采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。
4. NameNode是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文件系统中。
5. 数据管道性的写入:当客户端要写入文件到DataNode上,首先客户端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个Block的DataNode都成功写入,客户端才会继续开始写下一个Block。
6. 安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

7.合并

 我们可以把各服务器磁盘中的本地文件在向HDFS复制的过程中合并,这样可以节省本地计算机大大量磁盘空间,当然还可以先把文件进行合并,然后再复制到HDFS中(这种方式比较龊),因此,我们需要一个PutMerge类型的操作,Hadoop命令行工具中有一个getmerge命令,用于把一组HDFS文件在复制到本地计算机以前进行合并,但是没有setmerget命令把本地文件合并到HDFS中的命令,因此需要用HDFS API来实现,在Hadoop中用作文件操作的类位于org.apache.hadoop.fs包中,常见的open\read\write\close,实际,Hadoop文件API是通用的,可用于HDFS以外的其他文件系统,Hadoop文件API的起点是FileSystem类,这是与文件系统交互的抽象类,存在不同的具体实现子类来处理HDFS和本地文件系统,如下例子是一个合并本地文件到HDFS中:
 

 

我们可以继续看看上述代码中调用的接口或者实现的源代码:
Configuration类是用于保留键值配置参数的特殊类,默认是以HDFS系统的资源配置为基础的,如下:

 

 

HDFS接口的FileSystem对象

 

本地文件系统的FileSystem对象

 

得到本地文件列表

 

 

用于将数据写入HDFS文件中前定义参数:

 

8.冥等
虽然hadoop有对失败节点监控、自动重启的特性,但是这些特性无法完全满足健壮性的特点,比如:某节点并没有失效,只是由于一些异常原因导致运行速度缓慢,那么这个时候会影响hadoop整体的性能,为了解决这个问题,hadoop使用了冥等特性,不再仅当任务失败后才重启任务,hadoop会注意到运行速度缓慢的任务,并安排在另一个节点上并行执行相同的任务,冥等特性保证同步执行的任务会产生相同的输出,hadoop将监视这些同步执行的任务,只要一个任务成功完成,hadoop会采用它的输出,并杀死其他并行的任务,这种方式执行的时机是仅当所有的map任务已经安排执行之后,且仅对于那些比其他map任务平均执行进度远远落后的map任务,reduce任务也是一样

分享到:
评论

相关推荐

    MapReduce框架和HDFS框架

    Hadoop正是基于谷歌的mapreduce-osdi04和gfs-sosp2003这两篇论文构建起来的。

    hdfs官方设计文档(中文)

    Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,设计为部署在廉价硬件上的。HDFS对...

    Hadoop框架之HDFS的shell操作

    Hadoop框架之HDFS的shell操作Hadoop框架之HDFS的shell操作Hadoop框架之HDFS的shell操作Hadoop框架之HDFS的shell操作

    hdfs官方设计文档(翻译).doc

    好东西,hdfs官方设计文档(翻译),Hadoop 分布式文件系统 (HDFS)是一个设计为用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但又和这些文件系统有很明显的不同。HDFS是高容错的,...

    Hadoop中HDFS和MapReduce框架介绍pdf

    Hadoop中HDFS和MapReduce框架介绍pdf

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    HDFS可视化操作研究与实现

    Hadoop 是一个由Java 语言实现的软件框架,在一个计算机集群中对海量数据进行分布式计算,这个集群可 以支持上千个节点和PB 级别的数据. HDFS 是专门为Hadoop 设计的分布式文件系统,作为Hadoop 最基本的构成元 素...

    Hadoop 2.X HDFS源码剖析

    阅读《Hadoop 2.X HDFS源码剖析》可以帮助读者从架构设计与源码实现角度了解HDFS 2.X,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧以及编程规范等。这些对于读者全面提高自己的技术水平有很...

    HDFS构架设计和读写流程.docx

    HDFS构架设计和读写流程

    HDFS源码剖析带书签目录高清.zip

    阅读《Hadoop 2.X HDFS源码剖析》可以帮助读者从架构设计与源码实现角度了解HDFS 2.X,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧以及编程规范等。这些对于读者全面提高自己的技术水平有很...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。...在hdfs-site.xmle文件中添加如下内容: <name>dfs.webhdfs.enabled <value>true </property>

    使用扩展的HDFS框架在Hadoop中合并小文件的系统方法-研究论文

    Hadoop是可在Java平台上工作的开源框架。 它包含两个主要组件:HDFS(Hadoop分布式文件系统)和Map reduce,用于处理大量数据。 各种平台都可以生成大量的小文件。 处理小文件非常困难,因为从分布式系统中的块中...

    实验2常用的HDFS操作.doc

    (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件 (2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件...

    hdfs源码.zip

    第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...

    HadoopHDFS架构概述推荐系统框架图

    HadoopHDFS架构概述推荐系统框架图

    论文研究-基于Fluentd和HDFS的日志收集系统设计与实现 .pdf

    基于Fluentd和HDFS的日志收集系统设计与实现,刘富源,王春露,日志系统是信息系统里的重要组成部分,常用的日志收集工具都是以单机环境为基础,要进行多机日志收集时操作复杂,获得的日志集也

    论文研究-一种面向HDFS中海量小文件的存取优化方法.pdf

    从HDFS中读取数据时,根据文件之间的相关性,对接下来用户最有可能访问的文件进行预取,减少了客户端对NameNode节点的访问次数,提高了文件命中率和处理速度。实验结果证明,该方法有效提升了Hadoop对小文件的存取...

    HDFSErasureCodingDesign-20150206.pdf_hdfs_

    hdfs 的erasure code的设计

    实验二:熟悉常用的HDFS操作

    (1)理解 HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作系统:Linux(建议Ubuntu 16.04)。(2) Hadoop版本:2.7.1。 (3)JDK版本:1.7...

Global site tag (gtag.js) - Google Analytics