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






4.85/5 (13投票s)
什么是大数据?Hadoop是如何被引入以解决与大数据相关的问题的?
大数据
顾名思义,大数据是海量数据,它复杂且难以使用传统数据处理应用程序在常规文件系统中存储、维护或访问。那么,这些海量数据的来源是什么呢?
- 典型的S大型证券交易所
- 手机
- 视频分享门户,如YouTube、Vimeo、Dailymotion等。
- 社交网络,如Facebook、Twitter、LinkedIn等。
- 网络传感器
- 网页、文本和文档
- 网络日志
- 系统日志
- 搜索索引数据
- CCTV图像
数据类型
数据可分为以下三类:
- 结构化数据:以表格形式呈现并存储在关系型数据库管理系统(RDMS)中的数据。
- 半结构化数据:没有正式数据模型并存储在XML、JSON等中的数据。
- 非结构化数据:没有预定义数据模型的数据,如视频、音频、图像、文本、网络日志、系统日志等。
大数据技术的特点
采用典型数据处理应用程序的常规文件系统面临以下挑战:
- 体量——来自不同来源的数据量巨大且日益增长。
- 速度——单个处理器、有限内存和有限存储的系统不足以处理如此海量的数据。
- 多样性——来自不同来源的数据种类繁多。
因此,大数据技术应运而生。
- 它有助于以经济高效的方式存储、管理和处理海量和多样的数据。
- 它分析原始形式的数据,可以是结构化、非结构化或流式数据。
- 它实时捕获实时事件中的数据。
- 它具有定义良好且强大的系统故障机制,可提供高可用性。它处理系统正常运行时间和停机时间。
- 使用商用硬件进行数据存储和分析。
- 在集群中维护同一数据的多个副本。
- 它将数据以块的形式存储在不同的机器中,然后按需合并它们。
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个服务运行:
NameNode
Secondary NameNode
JobTracker
DataNode
TaskTracker
NameNode
、Secondary NameNode
和JobTracker
被称为主服务,而DataNode
和TaskTracker
被称为从服务。
如图所示,每个主服务都可以相互通信,每个从服务也可以相互通信。由于DataNode
是NameNode
的从服务,它们可以相互通信;而TaskTracker
是JobTracker
的从服务,它们也可以相互通信。
HDFS操作原理
HDFS组件包括不同的服务器,如NameNode
、DataNode
和Secondary 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
服务器发送Heartbeat
和BlockReport
。 - 如果在特定时间间隔内,任何
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个副本。这里,数据块被称为inputsplit
。NameNode
服务然后保留数据块存储位置、块大小等信息。这些信息被称为元数据。
以下是操作的完整流程:
- 文件被分成5个inputsplit,例如a.jpg、b.jpg、c.jpg、d.jpg和e.jpg,原始文件名是photo.jpg,文件大小为300 MB。
- 客户端将这些详细信息发送给
NameNode
服务器,询问哪些DataNode
服务器有可用的数据块来存储它们。 NameNode
服务器回复客户端,提供有足够空间存储文件的DataNode
服务器的详细信息。例如,它发送以下详细信息:
InputSplit | DataNode服务器 |
a.jpg | 数据节点服务器1 |
b.jpg | 数据节点服务器3 |
c.jpg | 数据节点服务器5 |
d.jpg | 数据节点服务器6 |
e.jpg | 数据节点服务器7 |
- 一旦客户端收到
NameNode
服务器的响应,它就开始请求DataNode
服务器存储文件。它开始将第一个inputsplit
a.jpg发送到DataNode
服务器1。 - 一旦
DataNode
服务器1收到请求,它会将a.jpg存储在其本地文件系统中,并请求复制到DataNode
服务器3。 - 一旦
DataNode
服务器3收到请求,它会将a.jpg存储在其本地文件系统中,并请求另一次复制到DataNode
服务器7。 - 一旦
DataNode
服务器7收到请求,它会将a.jpg存储在其本地文件系统中,并向DataNode
服务器3发送确认,表明文件已正确存储。 DataNode
服务器3随后向DataNode
服务器1发送确认,表明文件已在DataNode
服务器3和5中正确复制。DataNode
服务器1随后向客户端发送确认,表明文件已正确存储和复制。DataNode
服务器1、3和5向NameNode
服务器发送BlockReport
以更新元数据信息。- 其他inputsplit也重复相同的过程。
- 如果任何
DataNode
服务器1、3或5停止发送Heartbeat
和BlockReport
,NameNode
服务器会认为该DataNode
服务器已死亡,并选择另一个DataNode
服务器来替换a.jpginputsplit
的复制。 - 应该有一个用Java或任何其他语言编写的程序来处理文件photo.jpg。客户端将这个程序发送给Hadoop的
JobTracker
组件。JobTracker
组件从NameNode
服务器获取元数据信息,然后与相应DataNode
服务器的TaskTracker
组件通信以处理文件。JobTracker
和TaskTracker
之间的通信称为Map
。DataNode
服务器中的inputslit
数量等于Mapper
的数量。在上述示例中,将有5个mapper运行以处理photo.jpg文件。 TaskTracker
组件会不断向JobTracker
组件报告它们是否正确处理请求或是否处于活动状态。如果任何TaskTracker
停止向JobTracker
报告,JobTracker
会将相同的任务分配给存储inputslipt
副本的其中一个TaskTracker
。JobTracker
根据TaskTracker
的距离和正在运行的mapper数量来分配任务给TaskTracker
。- 每个
Mapper
为分配的每个任务生成一个输出文件。在这个例子中,将有5个mapper生成5个不同的输出文件。将有一个Reducer
将这些5个输入文件组合起来并报告给运行Reducer
的DataNode
服务器,例如DataNode
服务器4。然后,DataNode
服务器4将通过提供元数据与NameNode
服务器通信,说明已经处理了一个名为output.jpg的输出文件并可以使用。 - 客户端将持续观察并与
NameNode
服务器通信,一旦处理完成100%并生成了output.jpg文件。NameNode
服务器回复客户端,说明文件已处理完毕并可在DataNode
服务器4中使用。 - 客户端然后直接向
DataNode
服务器4发送请求并获取output.jpg文件。
结论
希望您喜欢阅读本文并学到了一些新东西。在我接下来的文章中,我将向您展示如何安装Hadoop并详细解释Hadoop的不同组件。
感谢阅读我的文章,请保持联系。
历史
- 2017年1月22日:初始版本