65.9K
CodeProject 正在变化。 阅读更多。
Home

初学者指南 - 大数据和 Hadoop 简介

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (13投票s)

2017年1月22日

CPOL

10分钟阅读

viewsIcon

23751

什么是大数据?Hadoop是如何被引入以解决与大数据相关的问题的?

大数据

顾名思义,大数据是海量数据,它复杂且难以使用传统数据处理应用程序在常规文件系统中存储、维护或访问。那么,这些海量数据的来源是什么呢?

  1. 典型的S大型证券交易所
  2. 手机
  3. 视频分享门户,如YouTube、Vimeo、Dailymotion等。
  4. 社交网络,如Facebook、Twitter、LinkedIn等。
  5. 网络传感器
  6. 网页、文本和文档
  7. 网络日志
  8. 系统日志
  9. 搜索索引数据
  10. CCTV图像

数据类型

数据可分为以下三类:

  1. 结构化数据:以表格形式呈现并存储在关系型数据库管理系统(RDMS)中的数据。
  2. 半结构化数据:没有正式数据模型并存储在XML、JSON等中的数据。
  3. 非结构化数据:没有预定义数据模型的数据,如视频、音频、图像、文本、网络日志、系统日志等。

大数据技术的特点

采用典型数据处理应用程序的常规文件系统面临以下挑战:

  1. 体量——来自不同来源的数据量巨大且日益增长。
  2. 速度——单个处理器、有限内存和有限存储的系统不足以处理如此海量的数据。
  3. 多样性——来自不同来源的数据种类繁多。

因此,大数据技术应运而生。

  • 它有助于以经济高效的方式存储、管理和处理海量和多样的数据。
  • 它分析原始形式的数据,可以是结构化、非结构化或流式数据。
  • 它实时捕获实时事件中的数据。
  • 它具有定义良好且强大的系统故障机制,可提供高可用性。它处理系统正常运行时间和停机时间。
    • 使用商用硬件进行数据存储和分析。
    • 在集群中维护同一数据的多个副本。
  • 它将数据以块的形式存储在不同的机器中,然后按需合并它们。

Hadoop

Hadoop是一个平台或框架,它有助于将海量和多样的数据存储在单一或分布式文件存储中。它是开源的,用Java编写,由Apache基金会发行。它有一个名为HDFS(Hadoop分布式文件系统)的分布式文件系统,可以实现在分布式文件存储之间存储和快速数据传输,并使用MapReduce来处理数据。

因此,Hadoop有两个主要组件:

  • HDFS是一个专门设计的文件系统,用于使用流式访问模式在并行服务器之间存储和传输数据。
  • MapReduce用于处理数据。

Hadoop硬件架构

需要理解一些关键术语:

  • 商用硬件:可以使用廉价的PC/服务器来构建集群。
  • 集群:通过网络互连的一组商用PC/服务器。
  • 节点:每台商用PC/服务器都称为节点。

因此,Hadoop支持分布式架构的概念。上图展示了互连节点如何组成集群,以及集群如何通过Hadoop框架互连。

  • 每个集群中的节点数量取决于网络速度。
  • 集群到节点的上行链路为3到4 Gb/s。
  • 集群到集群的上行链路为1 GB/s。

HDFS与常规文件系统

常规文件系统 Hadoop分布式文件系统

每个数据块的大小较小,如4KB。

每个数据块的大小为64 MB或120 MB。

如果一个2KB的文件存储在一个块中,剩余的2KB将未被使用或浪费。

如果一个50MB的文件存储在一个块中,剩余的14MB可以被使用。

块访问速度慢。

提供对数据块的高吞吐量访问。

大数据访问存在磁盘I/O问题,主要是因为多次寻道操作。

单次寻道后顺序读取大量数据。

提供花哨且用户友好的文件系统管理界面。

提供有限的文件系统管理界面。

只创建一个数据块的副本。如果数据块被擦除,数据就会丢失。

默认创建每个数据块的3个副本,并将它们分发到集群中的计算机上,以实现可靠和快速的数据访问。

  • HDFS在操作系统定义的文件系统之上公开了一个专门设计的文件系统。
  • 它方便用户将数据存储在文件中。
  • 它维护带有目录和文件的层次文件系统。
  • HDFS支持创建、删除、重命名、移动等不同的文件I/O操作。

Hadoop核心服务

Hadoop遵循主从架构。Hadoop中有5个服务运行:

  1. NameNode
  2. Secondary NameNode
  3. JobTracker
  4. DataNode
  5. TaskTracker

NameNodeSecondary NameNodeJobTracker被称为主服务,而DataNodeTaskTracker被称为从服务。

如图所示,每个主服务都可以相互通信,每个从服务也可以相互通信。由于DataNodeNameNode的从服务,它们可以相互通信;而TaskTrackerJobTracker的从服务,它们也可以相互通信。

HDFS操作原理

HDFS组件包括不同的服务器,如NameNodeDataNodeSecondary NameNode

NameNode服务器

NameNode服务器是一个单实例服务器,负责以下事项:

  • 维护文件系统命名空间。
  • NameNode就像一本书的目录。它知道每个数据块的位置。
  • 管理文件系统层次结构中的文件和目录。
  • 它使用一个名为FsImage的文件来存储整个文件系统命名空间,包括块到文件的映射和文件系统属性。此文件存储在NameNode服务器的本地文件系统中。
  • 它使用一个名为EditLog的事务日志来记录文件系统元数据发生的每个更改。此文件存储在NameNode服务器的本地文件系统中。
  • 如果HDFS中发生任何I/O操作,NameNode服务器的元数据文件将更新。
  • 元数据文件加载到NameNode服务器的内存中。每当有新的DataNode服务器加入集群时,内存中的元数据文件会更新,然后将文件的镜像作为检查点保留在本地文件系统中。
  • Metadata大小受NameNode服务器可用RAM的限制。
  • NameNode是一个关键的单点故障。如果它失败,整个集群将失败。
  • 但是NameNode服务器可以从辅助namenode服务器部分恢复。

DataNode服务器

一个集群中可以有任意数量的DataNode服务器,具体取决于所使用的网络类型和存储系统。它负责以下事项:

  • 存储和维护数据块。
  • 定期向NameNode服务器报告以更新元数据信息。
  • 当客户端或NameNode服务器发出请求时,存储和检索块。
  • 根据NameNode的指令执行读写请求,执行块的创建、删除和复制。
  • 每个DataNode服务器在特定时间间隔内向NameNode服务器发送HeartbeatBlockReport
  • 如果在特定时间间隔内,任何DataNode服务器没有向NameNode服务器报告,NameNode服务器会认为该DataNode服务器已死,并删除该DataNode服务器的元数据信息。

Secondary NameNode服务器

Secondary NameNode服务器可能只有一个实例。它负责以下事项:

  • 维护NameNode服务器的备份。
  • 它不被视为NameNode服务器的灾难恢复,但NameNode服务器可以从该服务器部分恢复。
  • 通过编辑日志定期保留命名空间镜像。

当客户端请求Hadoop存储一个文件时,请求会发送到NameNode服务器。例如,文件大小为300 MB。由于每个数据块的大小为64MB,文件将被分成5个数据块,其中4个等于64 MB,第5个是44MB,并将它们存储在同一集群中的5个不同数据节点服务器中,并带有3个副本。这里,数据块被称为inputsplitNameNode服务然后保留数据块存储位置、块大小等信息。这些信息被称为元数据。

以下是操作的完整流程:

  1. 文件被分成5个inputsplit,例如a.jpgb.jpgc.jpgd.jpge.jpg,原始文件名是photo.jpg,文件大小为300 MB。
  2. 客户端将这些详细信息发送给NameNode服务器,询问哪些DataNode服务器有可用的数据块来存储它们。
  3. NameNode服务器回复客户端,提供有足够空间存储文件的DataNode服务器的详细信息。例如,它发送以下详细信息:
InputSplit DataNode服务器

a.jpg

数据节点服务器1

b.jpg

数据节点服务器3

c.jpg

数据节点服务器5

d.jpg

数据节点服务器6

e.jpg

数据节点服务器7

  1. 一旦客户端收到NameNode服务器的响应,它就开始请求DataNode服务器存储文件。它开始将第一个inputsplit a.jpg发送到DataNode服务器1。
  2. 一旦DataNode服务器1收到请求,它会将a.jpg存储在其本地文件系统中,并请求复制到DataNode服务器3。
  3. 一旦DataNode服务器3收到请求,它会将a.jpg存储在其本地文件系统中,并请求另一次复制到DataNode服务器7。
  4. 一旦DataNode服务器7收到请求,它会将a.jpg存储在其本地文件系统中,并向DataNode服务器3发送确认,表明文件已正确存储。
  5. DataNode服务器3随后向DataNode服务器1发送确认,表明文件已在DataNode服务器3和5中正确复制。
  6. DataNode服务器1随后向客户端发送确认,表明文件已正确存储和复制。
  7. DataNode服务器1、3和5向NameNode服务器发送BlockReport以更新元数据信息。
  8. 其他inputsplit也重复相同的过程。
  9. 如果任何DataNode服务器1、3或5停止发送HeartbeatBlockReportNameNode服务器会认为该DataNode服务器已死亡,并选择另一个DataNode服务器来替换a.jpg inputsplit的复制。
  10. 应该有一个用Java或任何其他语言编写的程序来处理文件photo.jpg。客户端将这个程序发送给Hadoop的JobTracker组件。JobTracker组件从NameNode服务器获取元数据信息,然后与相应DataNode服务器的TaskTracker组件通信以处理文件。JobTrackerTaskTracker之间的通信称为MapDataNode服务器中的inputslit数量等于Mapper的数量。在上述示例中,将有5个mapper运行以处理photo.jpg文件。
  11. TaskTracker组件会不断向JobTracker组件报告它们是否正确处理请求或是否处于活动状态。如果任何TaskTracker停止向JobTracker报告,JobTracker会将相同的任务分配给存储inputslipt副本的其中一个TaskTracker
  12. JobTracker根据TaskTracker的距离和正在运行的mapper数量来分配任务给TaskTracker
  13. 每个Mapper为分配的每个任务生成一个输出文件。在这个例子中,将有5个mapper生成5个不同的输出文件。将有一个Reducer将这些5个输入文件组合起来并报告给运行ReducerDataNode服务器,例如DataNode服务器4。然后,DataNode服务器4将通过提供元数据与NameNode服务器通信,说明已经处理了一个名为output.jpg的输出文件并可以使用。
  14. 客户端将持续观察并与NameNode服务器通信,一旦处理完成100%并生成了output.jpg文件。NameNode服务器回复客户端,说明文件已处理完毕并可在DataNode服务器4中使用。
  15. 客户端然后直接向DataNode服务器4发送请求并获取output.jpg文件。

结论

希望您喜欢阅读本文并学到了一些新东西。在我接下来的文章中,我将向您展示如何安装Hadoop并详细解释Hadoop的不同组件。

感谢阅读我的文章,请保持联系。

历史

  • 2017年1月22日:初始版本
© . All rights reserved.