HDFS是Hadoop抽象的文件系统概念的一个实现。

适用场景

适用于大型商用机集群,流式数据访问模式来存储超大文件。

特征

1、超大文件。
2、流式数据访问。HDFS的构建思路是,一次写入,多次读取是最高效的访问模式。数据集通常由数据源生成或从数据源复制而来,接着长时间在此数据集上各种分析,每次分析涉及该数据集的大部分数据甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
3、商用硬件(各种零售店都能买到的普通硬件)。Hadoop不需要运行在昂贵且高可靠的硬件上。
4、不适用低延迟的数据访问。HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价。对于低延迟的访问需求,HBase是更好的选择。
5、不适用大量的小文件。由于namenode将文件系统的元数据存储在内存中,该文件系统所能存储的文件总数受限于namenode的内存容量。
6、不适用多用户写入,任意修改文件,HDFS的文件可能只有一个writer,而且写操作总是将数据添加在文件的末尾,不支持在文件的任意位置进行修改。

HDFS文件块的大小

每个磁盘都有默认的数据块大小,是磁盘进行读/写的最小单位。
构建于单个磁盘之上的文件系统是通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的整数倍。
与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元(从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M。)但与其他文件系统不同的是,HDFS中小于块大小的文件不会占据整个块的空间。

块大小设置128MB的原因

①HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输的数据会明显大于定位这个块开始位置所需的时间。因此传输一个由多个块组成的文件的时间取决于磁盘传输速率。
②但是不能设置过大,MapReduce任务通常一次只处理一个块中的数据,因此如果任务数太少(少于集群中的节点的数量),作业的运行速度就会比较慢。

对分布式文件系统中的块进行抽象会带来的好处

①一个文件的大小可以大于网络中任意一个磁盘的容量
②大大简化了存储子系统的设计,简化是所有系统的目标,这对于故障种类繁多的分布式系统来说尤为重要。将存储子系统控制单元设置为块(由于块的大小是固定的,因此计算单个磁盘上能存储多少个块就相对容易)。
③块适合用于数据备份(默认是3个)进而提高数据容错能力和提高可用性,HDFS中fsck指令可以显示块信息,即文件系统中各个文件由哪些块构成。

HDFS的角色

HDFS集群由两类节点以管理者-工作者模式运行。即一个namenode(管理者)多个datanode(工作者)。
①namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内的所有文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。
②客户端(client)代表用户通过namenode与datanode交互来访问整个文件系统。
③datanode是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或namenode调度),并定期向namenode发送它们所存储的块的列表。

实现namenode的容错

①第一种机制是备份那些组成文件系统元数据持久状态的文件。Hadoop通过配置,即将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)
②第二种机制是运行一个辅助namenode,作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理计算机上,因为它需要占用大量CPU时间与namenode相同容量的内存来执行合并操作,并保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。但是,辅助namenode总是滞后于主节点,所以主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在NFS的namenode元数据复制到辅助namenode并作为新的namenode运行。

联邦HDFS

namenode在内存中保存文件系统中每个文件和每个数据块的引用关系。这意味着对于一个拥有大量文件的超大集群而言,内存将成为限制系统横向扩展的瓶颈。在2.x发行版本系列中引入的联邦HDFS运行系统通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间中的一部分。例如一个namenode可能管理/user目录下的所有文件,而另一个namenode可能管理/share目录下的所有文件。每个namenode维护一个命名空间卷(namespace volume),包括命名空间的元数据和在该命名空间下的文件的所有数据块的数据块池。命名空间卷之间是相互独立的,两两之间并不相互通信。数据块池不再进行切分,因此集群中的datanode需要注册到每个namenode,并且存储来自多个数据块池的数据块。

HDFS的高可用性。活动-备用(active-standby)

①namenode之间需要通过高可用的共享存储实现编辑日志的共享。当备用namenode接管工作之后,它将通读共享编辑日志直至末尾,以实现与活动namenode的状态同步。
②datanode需要同时向两个namenode发送数据块处理报告,因为数据块的映射信息存储在namenode的内存中,而非磁盘。
③客户端需要使用特定的机制来处理namenode的失效问题,这一机制对用户是透明的。
这样一来,当活动namenode失效之后,备用namenode能够快速实现任务接管。如果在活动namenode失效且备用namenode也失效的情况下,管理员依旧可以申请一个备用namenode并实现冷启动。

故障切换与规避

一个称为故障转移控制器(failover_controller)的系统中有一个新实体管理着将活动namenode转移为备用namenode的转换过程。故障转移控制器是可插拨的,但其最初的实现是基于Zookeeper的并由此确保有且仅有一个活动namenode。每一个namenode运行着一个轻量级的故障转移控制器,其工作就是监视宿主namenode是否失效(通过一个简单的心跳机制实现)并在namenode失效时进行故障切换。
①管理员手动发起故障转移,称为“平稳的故障转移”,因为故障转移控制器可以组织两个namenode有序切换。
②在非故障转移的情况下,无法确定失效的namenode是否已经停止运行。但是在网速非常慢等情况下,也可能激发故障转移。为防止危害系统导致系统崩溃、脑裂等情况,进行“规避”,规避机制包括杀死namenode进程,收回访问共享存储目录的权限,通过远程管理命令屏蔽相应网络端口。诉诸的最后手段是,先前活动节点STONITH(shoot the other node in the head)的技术进行规避,该方法主要通过一个特定的供电单元对相应主机进行断电操作。
③客户端的故障切换通过客户端类库实现透明处理。最简单的实现是通过客户端的配置文件实现故障切换的控制。HDFS URI使用一个逻辑主机名,该主机名映射到一对namenode地址(在配置文件中设置),客户端类库会访问每一个namenode地址直至处理完成。

命令行接口的两个属性

①fs.default.name(core-sit.xml中):设置为hdfs://localhost/,用于设置Hadoop的默认文件系统。文件系统由URI指定的,这里使用hdfs URI来配置HDFS为Hadoop的默认文件系统。HDFS的守护程序通过该属性项来确定HDFS namenode的主机及端口。我们将在localhost默认端口8020上运行namenode。HDFS客户端也可以通过该属性得知namenode在哪里运行进而连接到它。
②dfs.replication:如果设置为1,则HDFS就不会按默认设置将文件系统块复本设为3。在单独一个datanode上运行时,HDFS无法将块复制到3个datanode上,所以会持续给出块复本不足的警告,设置该属性之后,就不会再有问题了。

HDFS的文件访问权限

针对文件和目录,HDFS的权限模式与POSIX非常相似,分为三类权限模式。
只读权限®:读取文件、列出目录
写入权限(w):写入文件或是在一个目录上新建及删除文件或目录
执行权限(x):访问一个目录的子项,对于文件,该权限可以忽略

Hadoop权威指南(第三版)笔记——HDFS相关推荐

  1. hadoop权威指南第三版 发布说明

    (此文摘自http://hadoopbook.com) hadoop权威指南第三版发行说明: 第三版会在2012年5月发行.你现在可以预定一份电子版,或购买"Early Release&qu ...

  2. Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF--高清晰

    一.下载地址(永久有效) 百度云盘下载(公开永久):Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF高清晰 CSDN积分下载:Hadoop权威指南(第3版)+高清晰 二.数据的存储和分 ...

  3. Hadoop权威指南(第二版)pdf中文版

    今天终于找到 hadoop权威指南第二版的中文pdf版本了,发给大家共享一下 下载地址:http://dl.dbank.com/c0hh1arjiz ------------------------- ...

  4. 【hadoop权威指南第四版】第三章hadoop分布式文件系统【笔记+代码】

    3.1块 显示块信息 % hdfs fsck / -files -blocks 3.5 Java接口 3.5.1从hadoop URL读取数据 使用java.net.URL 对象来打开一个数据流 In ...

  5. 【hadoop权威指南第四版】第六章MR的工作原理【笔记+代码】

    6.1 运行MR作业 工作原理 四大模块: 客户端,提交MR作业. jobtracker,协调作业的运行.jobtracker 是一个java应用程序,主类是Jobtracker. tasktrack ...

  6. 【hadoop权威指南第四版】第七章MR的类型与格式【笔记+代码】

    7.1MR类型 7.2 输入格式 7.2.1输入分片与记录 InputFormat类的层次结构 每一个map操作只处理一个输入分片,并且一个一个地处理每条记录,也就是一个键值对. 在数据库中,一个输入 ...

  7. 读书笔记《Hadoop权威指南第4版(Hadoop The Definitive Guide 4th)》

    Chapter 1 Meet Hadoop Data Storage and Analysis The problem is simple: although the storage capaciti ...

  8. 【hadoop权威指南第四版】第五章MR应用【笔记+代码】

    5.1 API的配置 配置文件 <?xml version="1.0"?> <configuration> <property> <nam ...

  9. 《CSS权威指南第三版》第二章的读书笔记

    第2章 选择器 CSS的主要优点,就是很容易向所有同类型的元素应用一组样式. 1.    基本规则 修改所有h2: h2{color:gray;} a.    规则结构 每个规则有两个基本部分:选择器 ...

最新文章

  1. 1051 Pop Sequence(两种双指针思路)
  2. 请问这个解法的时间复杂度怎么分析?谢谢!
  3. 学点 C 语言(19): 数据类型 - 数组
  4. PHP上传图片到数据库,并进行显示
  5. 一个前端岗位电话面试所带来的问题的思考
  6. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(静默创建实例_08)
  7. python通用爬虫和聚焦爬虫的区别
  8. python脚本多少钱一个_一个python脚本
  9. QT每日一练day18:文件IO
  10. FZOJ2110: Star
  11. go 获取内核数_Go的GPM多线程调度
  12. Matlab-多曲线画法和点标记
  13. 【图像检测】基于Itti模型实现图像显著性检测附matlab代码
  14. 二叉树的先序遍历(C++)
  15. STM32CubeMX学习笔记(5)——基本定时器接口使用
  16. Halcon——颜色识别提取
  17. c++实现经典游戏贪吃蛇(超详解)
  18. FZU - 2301 H - Chosen by god (组合数学)
  19. NO2/*学习记录*/--模仿百度首页(纯HTML+css)
  20. Linux复习题:2判断题

热门文章

  1. IDEA中Java项目删除Web框架后无法再次添加Web框架解决办法
  2. Third season eighteenth episode,hypnotic recording(maybe you can remember 吕子乔)
  3. 神州数码无线产品(AC+AP)配置
  4. 麻省理工公开课《算法导论》学习笔记:第一讲
  5. 文化怪杰--辜鸿铭全传!
  6. excel 置信区间 计算_如何用excel计算95%的置信区间
  7. 雨课堂知识点总结(八)
  8. win7,win8,win10环境下如何使用dnw!
  9. HTML中的删除线:del和s的区别
  10. MathType中如何批量修改公式字体和大小