大数据基础架构Hadoop( 三 )


文章插图
图2 HDFS基本架构
HDFS文件系统主要包含一个NameNode、一个Secondary NameNode和多个DataNode 。
(1)NameNode
NameNode用于存储元数据以及处理客户端发出的请求 。元数据不是具体的文件内容 , 它包含3类重要信息 。第1类信息是文件和目录自身的属性信息 , 如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等;第2类信息是记录文件内容存储的相关信息 , 如文件分块情况、副本个数、每个副本所在的DataNode信息等;第3类信息是用于记录HDFS中所有DataNode的信息 , 用于DataNode管理 。
在NameNode中存放元信息的文件是fsimage文件 。在系统运行期间 , 所有对元数据的操作均保存在内存中 , 并被持久化到另一个文件edits中 。当NameNode启动时 , fsimage文件将被加载至内存 , 再对内存里的数据执行edits文件所记录的操作 , 以确保内存所保留的数据处于最新的状态 。
(2)Secondary NameNode
Secondary NameNode用于备份NameNode的数据 , 周期性地将edits文件合并到fsimage文件并在本地备份 , 然后将新的fsimage文件存储至NameNode , 覆盖原有的fsimage文件 , 删除edits文件 , 并创建一个新的edits文件继续存储文件当前的修改状态 。
(3)DataNode
DataNode是真正存储数据的地方 。在DataNode中 , 文件以数据块的形式进行存储 。Hadoop 3.x默认128 MB为一个数据块 , 如果存储一个大小为129 MB的文件 , 那么文件将被分为两个数据块进行存储 。当文件上传至HDFS端时 , HDFS会将文件按128MB的数据块大小进行切割 , 将每个数据块存储至不同的或相同的DataNode并备份副本 , 一般默认备份3个副本 。NameNode负责记录文件的分块信息 , 以确保在读取该文件时可以找到并整合所有数据块 。
HDFS的特点
随着数据量越来越多 , 传统的单机式文件存储系统已经不能满足日益增长的数据存储需求 , 分布式文件存储系统—HDFS应运而生 。作为分布式文件系统 , HDFS能够解决海量数据的存储问题 , 其优点列举如下 。
1)高容错性 。HDFS上传的数据会自动保存多个副本 , 通过增加副本的数量增加HDFS的容错性 。如果某一个副本丢失 , 那么HDFS将复制其他节点上的副本 。
2)适合大规模数据的处理 。HDFS能够处理GB、TB甚至PB级别的数据 , 数量级规模可达百万 , 数量非常大 。
3)流式数据访问 。HDFS以流式数据访问模式存储超大文件 , 有着“一次写入 , 多次读取”的特点 , 且文件一旦写入 , 不能修改 , 只能增加 , 以保证数据的一致性 。
当然HDFS也不是完美的 , 同样存在局限性 , 如不适合低延迟数据访问 , 无法高效存储大量小文件、不支持多用户写入及任意修改文件 。
4Hadoop计算引擎—MapReduce
MapReduce是一个分布式运算程序的编程框架 , 是基于Hadoop的数据分析应用的核心框架 。MapReduce的核心功能是将用户编写的业务逻辑代码和自带的组件整合成一个完整的分布式运算程序 , 并行运行在Hadoop集群上 。认识MapReduce分布式计算框架 , 并了解MapReduce的执行流程 , 有利于后续的MapReduce编程学习 。
MapReduce是Hadoop的核心计算框架 , 是用于大规模数据集(大于1TB)并行运算的编程模型 , 主要包括Map(映射)和Reduce(规约)两个阶段 。
1)当启动一个MapReduce任务时 , Map端将会读取HDFS上的数据 , 将数据映射成所需要的键值对类型并传至Reduce端 。
2)Reduce端接收Map端键值对类型的中间数据 , 并根据不同键进行分组 , 对每一组键相同的数据进行处理 , 得到新的键值对并输出至HDFS 。
MapReduce作业执行流程如图3所示 。

大数据基础架构Hadoop

文章插图
图3 MapReduce作业执行流程图
一个完整的MapReduce过程涉及数据的输入与分片、Map阶段数据处理、Shuffle&Sort阶段数据整合、Reduce阶段数据处理、数据输出等操作 。
1)数据的输入与分片 。MapReduce过程中的数据是从HDFS分布式文件系统中读取的 。文件上传至HDFS时 , 一般按照128 MB分成若干个数据块 , 所以在运行MapReduce程序时 , 每个数据块均会对应一个Map任务 。也可以通过重新设置文件分片大小调整Map的个数 , 在运行MapReduce程序时系统会根据所设置的分片大小对文件重新分片(Split) 。


推荐阅读