Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)

文章目录

  • 作者信息
  • 一.前言
  • 二.什么是Hadoop
      • 2.1 Hadoop的由来
      • 2.2 什么是分布式系统(distributed system)
      • 2.3 Hadoop的组成
      • 2.4 Hadoop的优点
      • 2.5 Hadoop的缺点
      • 2.6 Hadoop能够做什么
      • 2.7 Hadoop的生态圈
  • 三.什么是HDFS?
      • 3.1 大数据存储的难题
      • 3.2 HDFS的解决方案
      • 3.3 HDFS读写的基本单位:数据块
          • 3.3.1 为什么要分块管理?
          • 3.3.2 为什么HDFS的块要设置这么大?
      • 3.4 一主多从的架构:namenode和datanode
          • 3.4.1 namenode
          • 3.4.2 datanode
  • 四.HDFS的高可用机制(HA,high-avaliability)
      • 4.1 Sencondary Namenode机制
      • 4.2 active-standby 机制和两种同步方式
          • 4.2.1 NFS方式
          • 4.2.2 QJM方式
  • 五.HDFS的容错机制
      • 5.1 HDFS的三种故障类型
      • 5.2 HDFS的故障检测机制
      • 5.3 HDFS的备份策略
  • 六.总结
  • 七.参考资料

作者信息

作者:黄钰朝
邮箱:[email protected]
日期:2019年8月5日

一.前言

最近主要学习了Hadoop的几个入门的知识:

  • 什么是Hadoop?
  • Hadoop的组成
  • Hadoop的优缺点和应用
  • 什么是HDFS?
  • HDFS的组成
  • HDFS的高可用机制和容错机制

二.什么是Hadoop

2.1 Hadoop的由来

Hadoop是apache基金会的一个分布式系统基础架构,主要应用于大数据处理领域。Hadoop的核心是分布式文件系统(HDFS)和分布式计算框架(MapReduce),HDFS提供了在分布式系统中存储和管理文件的能力,而MapReduce提供了在分布式系统中对文件进行分析计算的能力。因为分布式系统相比于集中式系统具有存储和性能方面的优势,而大数据分析的特点就是数据量大,计算量大,所以Hadoop非常适用于大数据处理。

Hadoop最早是作为lucene的子项目Nutch(一个开源的搜索引擎)的一部分被Doug Cutting开发出来,一开始是为了解决搜索引擎需要处理的数据量不断增大的问题,Doug Cutting基于谷歌的学术论文GFS实现了分布式文件系统NDFS(后来改名为HDFS),基于谷歌学术论文提出的MapReduce编程模型实现了分布式计算框架MapReduce,后来又根据谷歌提出的分布式数据存储系统Big Table实现了实时分布式数据库HBase。至此,谷歌大数据的三驾马车(GFS,MapReduce,Big Table),都被Doug Cutting 一一引入到了Hadoop系统中。

Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)_第1张图片
Hadoop的核心思想是:移动计算比移动数据更划算

2.2 什么是分布式系统(distributed system)

分布式系统是建立在网络之上的软件系统,分布式系统在软件层面将分散在不同主机上的硬件资源统一管理起来,例如分布式文件系统,在分布式文件系统中的一个文件实际上分布在很多不同的主机上,在对这个文件进行读取操作时,实际上需要将分布在不同主机上的数据取出来,而在分布式文件系统中,用户并不需要关心这些文件的不同部分数据存储在哪里,只需要对文件进行统一操作,而数据的存储,调度则交给分布式系统自动完成。

分布式系统的优点是具有高可靠性,因为分布式系统在硬件层面上是将数据分布在不同的主机上,并且对于每一份数据,都会数据的副本保存在另外的主机上,所以某个结点主机出现故障时并不会影响整个分布式系统的运行。

2.3 Hadoop的组成

Hadoop由四个核心模块组成:

  • Hadoop Common :Hadoop工具包,为Hadoop各个模块提供基础设施
  • HDFS :分布式文件系统,用于海量数据的存储和管理
  • MapReduce :分布式计算框架,用于对海量数据进行处理和计算
  • YARN :分布式资源管理和任务调度框架(出现于Hadoop 2.0)

Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)_第2张图片

2.4 Hadoop的优点

  • 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。
  • 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
  • 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。(负载均衡)
  • 高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
  • 低成本:Hadoop是开源的,并且Hadoop集群不需要昂贵的高端服务器即可实现高性能的大数据分析。

2.5 Hadoop的缺点

  • 不满足低时延的场景
  • 不适合大量的小文件存储
  • 不支持多用户写入和随意修改文件

2.6 Hadoop能够做什么

Hadoop适合用于海量数据,写一次,读多次的场景,按计算特征可以分为:

  • 数据密集型:数据量极大,计算相对简单的,比如词频统计
  • 计算密集型:计算复杂,数据量相对不大的,比如3D建模
  • 数据密集和计算密集混合型:比如3D电影的渲染

2.7 Hadoop的生态圈

  • HBASE:分布式列存储数据库
  • Zookeeper:分布式协作服务
  • HIVE:数据仓库
  • Pig:ad-hoc脚本
  • Yarn:分布式资源管理器

Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)_第3张图片

三.什么是HDFS?

HDFS的全称是Hadoop Distributed File System,顾名思义,HDFS是Hadoop中的分布式文件系统,是Hadoop的核心部件之一,解决的是大数据处理中的第一个问题:大数据怎么保存?

3.1 大数据存储的难题

大数据的特点就是数据量大,因此对于大数据存储有三个主要的问题:

  • 数据存储容量的问题:数据量大,一台电脑的存储空间不够用怎么办?
  • 数据读写速度的问题:数据量大,读写数据太慢怎么办?
  • 数据可靠性的问题:数据都保存在磁盘上,磁盘损坏了怎么办?

3.2 HDFS的解决方案

在单机时代,解决的方案是RAID(独立冗余磁盘阵列),而现在,Hadoop的解决方案是HDFS(分布式文件系统)

RAID的原理就是在一台主机中安装多个磁盘,通过RAID技术,使得多个磁盘使用起来就像一个磁盘一样,RAID技术将数据分散在不同的磁盘上,读写时可以多个磁盘并行读写,大大提高了读写性能,同时在可靠性上,根据不同的RAID级别,使用不同的策略(副本的份数等)使数据冗余存储,也就是生成数据的副本,一旦数据发生丢失或损坏,立即从副本中恢复,这样使得数据的可靠性也得到了大大提升。通过多个廉价磁盘的组合形成磁盘阵列,其读写性能和可靠性甚至远远超过单个昂贵的高端磁盘。

HDFS的设计理念和RAID相似,不同的是HDFS面向更加大量的数据,并且不是以磁盘为单位,而是基于计算机网络技术,将数据保存在不同的主机上。

HDFS的具体解决方案是分片冗余,本地校验

3.3 HDFS读写的基本单位:数据块

磁盘中以数据块为单位对数据进行读写。HDFS中也有“块”的概念,默认情况下,HDFS的一个块的大小是128m。如果一个文件的大小小于一个块的大小,那么该文件在HDFS中实际也只会占用其原本文件大小的空间,而不会占据一个块的空间。

3.3.1 为什么要分块管理?

答案很明显,将文件分成很多的小块,可以将一个很大的文件存储在不同的磁盘上面,而且由于块的大小是固定的,很容易计算单个磁盘能够存储多少个块。

3.3.2 为什么HDFS的块要设置这么大?

因为读写是以块为单位的,因此每次读取需要查找每一个块,将块设置得很大主要就是为了减少寻址时间。但是块也不能设置得太大,块越大时,文件分割得到的块就越少,就失去了“分布式”的优势:并行读写。因此一般设置块的大小时,要使得寻址时间占数据传输时间的1%。

3.4 一主多从的架构:namenode和datanode

Hadoop整体上使用一主多从的架构,即由一个namenode,集中管理n个datanode。

3.4.1 namenode
  • 存储文件的元数据,并且在运行时这些元数据都保存在内存中而不是磁盘中,因此整个HDFS能够存储的文件数取决于namenode的内存大小
  • 一个block在namenode中对应一条记录(一般大小为150字节),因此大量的小文件会使得namenode消耗大量的内存
  • namenode的保存的元数据会定时保存到本地的磁盘上,但是与datanode相关的信息(比如block的位置信息)不会保存,而是在namenode每次重启之后动态重建
  • 如果namenode失效则整个HDFS就失效了,因此要保证namenode的高可用性
3.4.2 datanode
  • 存储具体的block数据
  • 复杂数据的读写操作
  • datanode启动时会向namenode报告当前的block信息,之后也会定时报告
  • datanode之间也会进行通信,复制数据块,保证数据冗余性

四.HDFS的高可用机制(HA,high-avaliability)

可用性是指系统正常工作时间比上总的运行时间,由此可见,发生故障的时间越短,则可用性越高,高可用性就是指系统能够长时间保持正常工作的能力

HDFS中,每个datanode中的数据都有存在于别的datanode上面的副本,因此单个datanode失效并不会影响Hadoop集群的正常运行,而namenode只有一个,namenode一旦失效,整个HDFS就处于不可访问的状态,因此,HDFS的高可用主要就是namenode的高可用

4.1 Sencondary Namenode机制

Sencondary Namenode并不解决namenode的单点问题和非高可用性问题(non-HA)。

在Hadoop2.0之前,namenode存在单点问题,仅仅通过secondary namenode机制来辅助namenode,减轻namenode的重启时的压力。

首先需要了解namenode用于保存元数据信息的两个文件:

  • fsimage:文件系统镜像,顾名思义,这是namenode启动时对整个HDFS生成的快照

  • edit logs:这是namenode启动后,HDFS发生改动的记录
    Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)_第4张图片
    这里有几个要点:

  • namenode启动时才会把edit logs合并到fsimage中,启动之后的改动只保存到edit logs

  • 如果namenode运行的时间很长,那么edit logs文件就越大,下次启动合并需要的时间就越长

Secondary Namenode的作用:

  • 定时将namenode的eidt logs合并到fsiamge中,减小eidt logs文件,缩短namenode的重启时间

Hadoop学习笔记-Hadoop入门和HDFS的原理(8月5号)_第5张图片

4.2 active-standby 机制和两种同步方式

这是Hadoop2.0之后引入的高可用机制,使用active namenode和standby namenode两个namenode来实现高可用,其中active namenode是状态为active的namenode,而是standby namenode是状态为standby namenode的namenode,可见两者的区别在于状态,两者是完全可以互相替换的,当active namenode失效时,standby namenode就会变成 active状态,接管工作,整个切换的过程只需要几十秒。而在这之前,namenode失效时进行冷启动需要大约30分钟。

实现两个namenode之间互相替换,需要保证两者的数据是同步的,而实现数据同步有两种可供选择的方式:NFS方式和QJM方式

4.2.1 NFS方式

NFS作为active namenode和standby namenode之间数据共享的存储。active namenode会把最近的edits文件写到NFS,而standby namenode从NFS中把数据读过来。

这个方式的缺点是,如果active namenode或者standby namenode有一个和NFS之间网络有问题,则会造成他们之前数据的同步出问题。

4.2.2 QJM方式

QJM的方式可以解决上述NFS容错机制不足的问题。active namenode和standby namenode之间是通过一组journalnode(数量是奇数,可以是3,5,7…,2n+1)来共享数据。

active namenode把最近的edits文件写到2n+1个journalnode上,只要有n+1个写入成功就认为这次写入操作成功了,然后standby namenode就可以从journalnode上读取了。

可以看到,QJM方式有容错的机制,可以容忍n个journalnode的失败。

五.HDFS的容错机制

5.1 HDFS的三种故障类型

HDFS可能发生的三种故障为:

  • 结点失败:就是单个结点整个失效了
  • 网络故障:结点没有发生故障,但是无法向它收发数据
  • 数据损坏:数据在磁盘中损坏或者在传输过程中损坏

5.2 HDFS的故障检测机制

HDFS为此使用的故障检测机制为:

  • 每个datanode每隔固定的时间就向namenode发送一个信号(心跳信号),如果namenode长时间(10分钟)没有收到某个datanode的心跳信号,就认为这个datanode宕机了,即检测到结点失败故障
  • 只要发送了数据,接收方就会返回确认码,如果没有收到回复,发送方会重试几次,还没有回复的话就认为对方主机宕机了或者网络异常,即检测到结点失败或网络故障
  • 发送数据时同时发送总和校验码和数据,datanode定期向namenode发送数据块存储状况的报告,发送前会检查总和校验码是否正确,如果数据出现错误则不发送该数据块的信息

5.3 HDFS的备份策略

  • HDFS中数据以数据块划分和存储,每个数据块都会保存其副本(默认会保持有3个副本)。
  • 数据块的第一个副本优先放在原数据块所在的结点上,如果该结点放不下了,就在该结点所在的机架(也叫本地机架)中选择一个合适的结点来存放
  • 另外两个副本放在与本地机架不同的另一个机架中的不同结点上(这两个副本同机架不同结点)
  • 以上的策略尽可能保证了所有副本不会同时丢失,同时又兼顾了数据安全和网络传输的开销

六.总结

今天的时间,整体上了解了Hadoop是个什么东西,学习Hadoop的发展历史和组成结构,以及Hadoop的优缺点和适合的场景,了解了HDFS的原理和HDFS高可用和容错性的实现。这还只是Hadoop的基础,后面看了一下Hadoop的I/O,感觉不是很明白这些压缩,数据完整性,序列化框架和基于文件的数据结构在具体的运用中是个什么样子,又能发挥多大的作用,所以,接下来的目标应该是学习MapReduce相关的知识,站在运用的角度再来理解这些东西。

导师提到的需要注意的问题:

  • 两个namenode不可以同时为active,但是可能同时为standby
  • standby namenode是不支持读写,只能对active namenode进行读写
  • 编程时不仅要写active namenode的ip,也要写standby namenode的ip,因为两者随时可能发生切换

七.参考资料

  • Hadoop NoteBook
  • 知乎-hadoop和大数据的关系?和spark的关系?
  • 大数据学习笔记
  • 知乎-如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?
  • 一探究竟:Namenode、SecondaryNamenode、NamenodeHA关系
  • HDFS容错机制详解
  • 《Hadoop权威指南》

你可能感兴趣的:(QG训练营日志)