设为首页 加入收藏

TOP

Hadoop分布式文件系统
2019-05-12 00:43:04 】 浏览:108
Tags:Hadoop 分布式 文件 系统

Hadoop的核心是HDFS和Map-Reduce,两者只是理论基础,不是什么具体可使用的高级应用。
Hadoop有一个称为HDFS的分布式系统(Hadoop Distributed FileSystem): 当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并存储到若干台单独的计算机上。管理网络上跨多台计算机存储的文件系统称为分布式文件系统
而Map_Reduce是用于数据处理的一种编程模型,是hadoop的核心组件之一,可以通过map-reduce很容易在hadoop平台上进行分布式的计算编程。

1.HDFS

HDFS以流式数据访问模式来存储超大文件,它是谷歌的GFS提出之后出现的另外一种文件系统,它有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。
其设计特点为

  • 大数据文件
  • 文件分块存储
    HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以从多个主机读取不同区块的文件,多主机读取比单主机读取效率要高得多。
  • 硬件故障
    HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
  • 流式数据访问:
    HDFS的构建思路是这样的:一次写入,多次读取是最高效的访问模式。每次数据分析都涉及该数据集的大部分数据甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
  • 廉价硬件:
    Hadoop并不需要运行在昂贵可靠的硬件上,它是设计运行在商用硬件的集群上的。因此对于庞大的集群来说,节点故障的几率还是非常高的。HDFS遇到上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。
  • 低时间延迟的数据访问:
    要求低时间延迟数据访问的应用,不适合在HDFS上运行。HDFS是为高数据吞吐量应用优化的,这可能会以高时间延迟为代价。
  • 大量的小文件:
    由于namenode将文件系统的元数据存储在内存中,所以因此该文件系统能够存储的文件总数受限于namenode的内存容量
  • 多用户写入,任意修改文件:
    HDFS中的文件可能只有一个writer,而且写操作总是将数据添加到文件的末尾。它不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。

1.1 HDFS优点

高吞吐量访问,高效性:HDFS的每个block分布在不同的rack上,在用户访问时,HDFS会计算使用最近和访问量最小的服务器给用户提供。由于block在不同的rack上都有备份,所以不再是单数据访问,所以速度和效率是非常快的。另外HDFS可以并行从服务器集群中读写,增加了文件读写的访问带宽。
高容错性,可靠性:上面简单的介绍了一下高度容错。系统故障是不可避免的,如何做到故障之后的数据恢复和容错处理是至关重要的。HDFS通过多方面保证数据的可靠性,自动将数据多份复制并且分布到物理位置的不同服务器上,并且能够自动将失败的任务重新分配。数据校验功能、后台的连续自检数据一致性功能,都为高容错提供了可能。
容量扩充:因为HDFS的block信息存放到namenode上,文件的block分布到datanode上,当扩充的时候,仅仅添加datanode数量,系统可以在不停止服务的情况下做扩充,不需要人工干预。分布式存储和分布式计算是在集群节点完成的,所以可以扩展至更过的集群结点。
低成本:hadoop本身是运行在普通PC服务器组成的集群中进行大数据的分发及处理工作的,这些集群是可以支持上千个结点的。

1.2 HDFS的关键元素

1.2.1 block:

HDFS也有块的概念,默认为64MB,与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元。

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

  1. 文件的所有块并不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。
  2. 块非常适用于数据备份进而提供数据容错能力和可用性。将每个块复制到少数几个独立的机器上(默认为3个)。可以确保在发生块,磁盘或机器故障后数据不丢失。如果发现一个快不可用,系统会从其他地方读取另一个副本,而这个过程对于用户来说是透明的。一个因损坏或机器故障而丢失的块可以从其他候选地点复制到另一台可以正常运行的机器上,以保证副本的数量回到正常水平。

1.2.2 namenode 和 datanode

HDFS集群有两类节点,并以管理者-工作者模式运行,即一个namenode(管理者)和多个datanode(工作者)。namenode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上。namenode也记录着每个文件中各个块所在的数据节点信息。
客户端通过namenode与datanode交互来访问整个文件系统。客户端提供一个文件系统接口,因此用户在编程时无需知道namenode和datanode也可实现其功能。
datanode是文件系统的工作节点,用于存储block块文件。它们根据需要存储并检索数据块(受客户端或namenode调度),并且定期向namenode发送它们所存储的块的列表。
在这里插入图片描述

2. Map-Reduce

将文件分布式存储到硬盘是第一步,而从海量数据中提取我们需要的内容就是MapReduce做的事了。其是一套从海量源数据提取分析元素最后返回结果集的编程模型。MapReduce的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。

2.1 MapReduce其处理过程主要分为两个步骤

在这里插入图片描述
1.映射(Mapping) 函数以key/Value数据对而作为输入,而输入数据经过业务逻辑计算产生若干仍旧以Key/Value形式表达的中间数。Map-Reduce计算框架会自动将中间结果中具有相同key值的记录聚合到一起,并将数据传送给Reduce函数内定义好的处理逻辑作为其输入值。
2. 聚合(Reducing) 函数接收到Map阶段传过来的某个Key值及其对应的若干value值的中间结果,函数逻辑对这个Key对应的value内容进行处理。一般是对其进行累加、过滤、转换等操作,生成Key/Value
形式的结果。

3. Hadoop经典案例

词典统计:对每次出现的词,词频+1,。但是当数据量非常大时,没办法在内存中维护一个这么大的字典,就需要map-reduce过程了。
在这里插入图片描述
大概是分为下面几个环节:
Map阶段:
主要完成key-value对生成,这里是每看到一个单词,就输出(单词,1)的kv对
排序阶段
对刚才的kv对进行排序,这样相同单词就在一块儿了
Reduce阶段
对同一个单词的次数进行汇总,得到(词,频次)对

4. Hadoop的局限性与不足

  • 抽象层次低,需要手动辨别mapper和reducer逻辑,使用上复杂
  • 只提供Map和Reduce两个操作,表达力欠缺
  • 处理逻辑隐藏在代码细节中,没有整理逻辑
  • 中间结果也存放在HDFS上,IO和通信开销大
  • 时延高,只适合batch数据处理,对于交互式数据处理和实时数据处理的支持不够
  • 对于迭代式数据处理性能比较差
    而spark相比hadoop有着更多的优点:
  • 丰富的API,而后者只有map和reduce
  • 中间结果不存磁盘,而hadoop需要把中间结果写进磁盘
  • 线程池模型减少任务启动开销,而hadoop任务调度和启动开销很大
  • 能充分利用内存,速度快,减少IO操作
  • 可以避免排序操作,而hadoop中map和reduce都需要排序
  • spark更适合迭代计算(机器学习算法),而hadoop不适合
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇运行一个 hadoop 任务的流程是什.. 下一篇hadoop之父

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目