【Hadoop系列】HDFS

Hadoop的前世此生

什么是大数据

各行各业都会产生大量的数据,好比社交网站的意见观点,电商平台人们浏览网页停留的时间,交通运输天天产生的数据等等。这些数据大多不是结构化的,通常来讲都是半结构化或者非结构化的算法

在之前,咱们的处理能力达不到,因此不少数据要么没有存起来,要么没有利用起来。而如今数据愈来愈集中在云端的服务器上,而且计算能力已经今非昔比了,咱们彻底有能力对大数据进行存储和分析。数据库

因此所谓的大数据指的就是,原有的计算能力没法处理的大批量的数据,而大数据技术研究的是如何快速有效的处理这些结构化、半结构化数据的技术。编程

处理大数据的架构

下图是传统的集中式架构缓存

image.png

它的主要问题在于扩展性不强并且数据库将成为很大的瓶颈。服务器

因此谷歌提出了架构

  • MapReduce算法并发

  • BigTable框架

  • GFS分布式

合称“三剑客”。工具

那么相对于传统的架构,有什么样的变化呢?

  • 首先它可使用大量的x86服务器,而不是使用性能强健的大型机来完成计算,也就是Scale-out的

  • 另外它使用软件方案来保证硬件故障容错

    咱们知道x86服务器的稳定性不如小型机,存在必定的故障的可能,可是小型机实在太贵了。咱们彻底可让x86服务器组成集群,而后使用上层软件来保障总体的硬件故障容错。

  • 简化并行分布式计算,不须要再控制节点的同步和数据的交换。

image.png

Hadoop模仿Google的实现方式,最终演变成一系列的开源项目。

总结一下:

大数据既是一个概念又是一门技术,它是以Hadoop和Spark为表明的大数据基础框架,能够实现数据分析、挖掘、预测。

Hadoop

上面说到Hadoop是一种分布式计算解决方案,含有若干组件,其中最著名的当属

  • HDFS分布式文件系统:存储海量数据

    存储技术是大数据的基础,由于对于大量的数据,咱们但愿能找的一种比较廉价的方式来保存咱们的数据,那么分布式文件系统当属首选。

  • MapReduce编程模型:

    并行处理框架,实现任务分解和调度

因此Hadoop的优点在于:

  • 高扩展性,也就是能够经过增长节点来活动性能提高,好比说性能不够了,就怼新的服务器上去。

  • 低成本,能够基于便宜的x86服务器

  • 成熟的生态圈,里面有大量的工具集可使用

下面分别介绍一下HDFS和MapReduce
image.png

HDFS

【大话存储II】学习笔记(15章),文件级集群系统中咱们介绍了分布式集群的基本概念。

分布式文件系统能够等价于非共享存储集群文件系统,也就是说同一个文件系统下的文件是存放在不一样的节点里面,并且Sharing-nothing

那么分布式文件系统应该解决

  • 统一的命名空间,也就是对外显现同一个文件目录。

    这样用户不用管数据是如何存放的,分布式文件系统已经帮它解决存放的问题了,用户用起来就像使用本地文件同样简单。

  • 缓存一致,由于数据都缓存在各自的节点,不存在不缓存不一致的状况。

  • 分布式锁,也就是多个链接并发访问的时候,如何控制文件的数据会出现不一致的状况。

若要理解HDFS,咱们须要知道以下的基本概念。

基本概念

分布式设计

HDFS这样的架构,很是相似于【大话存储II】学习笔记(15章),块级集群存储系统中的XIV,固然XIV是提供块存储的,不过XIV也利用了文件系统的思想,对每一个块像一个文件同样。

HDFS的基本存储和操做单位是数据块, 默认大小64MB,通常设置为128M。为何要这么设计呢?由于一个文件会比较大,为了分布式存放,能够分红若干小块。那么最好就切成相同大小,好比说64MB。
image.png

并且为了保证数据块不丢失,对每一个数据块会保存3副本,分布在两个机架的三个节点中。 其中两份在同一个机架,一份在另外一个机架。

好比下图中两个A数据块放在机架1,另外一份副本放到了机架2 。
image.png

角色

【大话存储II】学习笔记(15章),文件级集群系统咱们介绍过,分布式文件系统有对称和非对称的两种。

对称集群中全部节点的地位相同,互相维护通讯连接进行数据同步,也正由于如此,不适合扩展。

而HDFS采用的是非对称集群,因此有Master和Slave两种角色。

Master就是HDFS中的NameNode,它的做用是 存放元数据,管理文件系统的命名空间。也就是一个注册中心,其余的Slave都要到它这边注册。

Master和Slave组成集群之后,能够自服务,也能够对外提供服务。

它会记录两种信息:

  • 文件与数据块的映射关系

  • 数据块与服务器的对应关系,也就是每一个块存放的节点的信息

Slave则是DataNode,它的主要做用就是存放数据块,是具体的执行者。

当块存储信息改变了之后,DataNode会向NameNode主动更新信息

image.png

另外,在这种主从架构里面,NameNode的地位很超然,很是的重要,一旦他挂了则整个系统就宕了。

因此从HDFS 2x就能够为NameNode配置HA了。

以下图所示,出现了一个Secondary NameNode。

image.png

二级NameNode按期同步元数据镜像文件和修改日志,当NameNode发生故障时,备胎转正。
image.png

HDFS的读与写

下面咱们来看一下写流程。

image.png

  • 客户端向NameNode发出请求,表示本身要发送文件了,而后NameNode会返回如今空余存储的信息

  • 而后客户端将文件分块,

  • 接着,客户端将数据块1以及相应的元数据信息发给DataNode1

  • 而后开启流水线复制,将数据同步给另外的节点

  • 写完了之后,DataNode才返回更新信息,最后NameNode向客户端返回成功。

image.png
image.png

读文件

下图展现了HDFS的读流程

image.png

  • 首先客户端向NameNode发起读请求,将路径+文件名发过去

  • NameNode返回元数据,告诉客户端能够从哪些地方取

  • 而后由客户端本身向DataNode读取数据

image.png

HDFS的特色

了解了HDFS的架构以及读写流程之后,咱们能够总结一下HDFS的特色。

本质上HDFS就是一个分布式文件系统,它

  • 经过三副本机制进行冗余,相似于的分布式的RAID10

  • 它的写比较的复杂,须要复制2份,还要同步各类信息,并且修改也比较麻烦,只能删除之后再写。因此比较适合于一次写入,屡次读取的场景,如今的OLAP就比较契合

  • 由于每次写或者读都须要向NameNode发起请求,因此NameNode是整个系统的瓶颈,因此若是是小文件的话,NameNode压力很是大。

也就是说HDFS适合于批量读,这样吞吐量高,由于能够并发读嘛。

可是不支持多用户写相同的文件,由于没有加锁。

也就是不适合交互应用以及那些实时性要求高的地方。
image.png

相关文章
相关标签/搜索