目录
大数据
数据类型
大数据技术的特点
Hadoop
Hadoop硬件架构
HDFS与常规文件系统
Hadoop核心服务
HDFS工作原理
名称节点服务器
数据节点服务器
辅助名称节点服务器
结论
大数据
顾名思义,大数据是使用传统数据处理应用程序在常规文件系统中存储、维护或访问的复杂且难以存储、维护或访问的海量数据。这组庞大的数据的来源是什么。
- 典型的大型证券交易所
- 手机
- 视频共享门户,如YouTube,Vimeo,Dailymotion等。
- 社交网络,如脸书、推特、LinkedIn等。
- 网络传感器
- 网页、文本和文档
- 网络日志
- 系统日志
- 搜索索引数据
- 闭路电视图像
数据类型
数据可以标识为以下三种类型:
- 结构化数据:以表格格式呈现并存储在RDMS(关系数据库管理系统)中的数据
- 半结构化数据:没有正式数据模型并以XML,JSON等形式存储的数据。
- 非结构化数据:没有预定义数据模型的数据,如视频、音频、图像、文本、网络日志、系统日志等。
大数据技术的特点
具有典型数据处理应用程序的常规文件系统面临以下挑战:
- 数量——来自不同来源的数据量很高,并且可能每天都在增加
- 速度——单个处理器、有限的RAM和有限的基于存储的系统不足以处理如此大量的数据
- 多样性——来自不同来源的数据各不相同
因此,大数据技术应运而生:
- 它有助于以成本和时间有效的方式存储,管理和处理大量和多样化的数据。
- 它以本机形式分析数据,可以是非结构化、结构化或流式处理。
- 它从实时事件中实时捕获数据。
- 它具有定义非常明确且强大的系统故障机制,可提供高可用性。它处理系统正常运行时间和停机时间:
- 使用商用硬件进行数据存储和分析
- 跨集群维护相同数据的多个副本
- 它将数据存储在不同机器的块中,然后根据需要合并它们。
Hadoop
Hadoop是一个平台或框架,有助于在单个或分布式文件存储中存储大量和多样化的数据。它是开源的,用Java编程,由Apache基金会分发。它有一个称为HDFS(Hadoop分布式文件系统)的分布式文件系统,可以在分布式文件存储和MapReduce之间存储和快速数据传输并处理数据。
因此,Hadoop有两个主要组件:
- HDFS是一个专门设计的文件系统,用于使用流访问模式在并行服务器之间存储和传输数据。
- MapReduce处理数据。
Hadoop硬件架构
需要了解一些关键术语:
- 商品硬件:PC/服务器使用廉价的硬件可用于制作集群。
- 集群:在网络中互连的一组商用PC/服务器
- 节点:每个商用PC/服务器都称为节点。
因此,Hadoop支持分布式架构的概念。上图显示了一组互连的节点如何组成集群,以及集群如何通过Hadoop框架互连。
- 每个集群中的节点数取决于网络速度
- 从群集到节点的上行链路为3到4 Gb/s
- 集群之间的上行链路为1 GB/秒
HDFS与常规文件系统
常规文件系统 | Hadoop分布式文件系统 |
每个数据块的大小很小,只有4KB | 每个数据块的大小为64 MB或120 MB |
如果2KB文件存储在一个块中,则剩余的2 KB未使用或浪费 | 如果将50 MB的文件存储在一个块中,则可以使用剩余的14 MB |
访问块的速度慢 | 提供对数据块的高吞吐量访问 |
大数据访问存在磁盘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行为类似于一本书的目录。它知道每个数据块的位置。
- 管理文件系统层次结构中的文件和目录。
- 它使用名叫FsImage的文件来存储整个文件系统命名空间,包括块到文件和文件系统属性的映射。此文件存储在NameNode服务器的本地文件系统中。
- 它使用名叫EditLog的事务日志来记录对文件系统元数据发生的每个更改。此文件存储在NameNode服务器的本地文件系统中。
- 如果HDFS中发生任何I/O操作,则更新NameNode服务器的元数据文件。
- 元数据文件被加载到NameNode服务器的内存中。每当有新DataNode服务器加入集群时,内存中的元数据文件都会更新,然后在本地文件系统中保留文件的镜像作为检查点。
- Metadata大小仅限于NameNode服务器中可用的RAM。
- NameNode是一个关键的故障点。如果失败,整个群集将失败。
- 但是NameNode服务器可以从辅助名称节点服务器部分恢复。
数据节点服务器
群集中可能有任意数量的DataNode服务器,具体取决于网络类型和存储系统的类型。它负责以下工作:
- 存储和维护数据块
- 定期向NameNode服务器报告以更新元数据信息
- 当有来自客户端或NameNode服务器的请求时存储和检索块
- 从NameNode执行读取,写入请求,根据以下指令执行块创建,删除和复制
- 每个DataNode服务器在特定持续时间内发送Heartbeat和BlockReport到NameNode服务器。
- 如果任何DataNode服务器在特定持续时间内没有向NameNode服务器报告,则NameNode服务器认为该DataNode服务器已死并删除该DataNode服务器的元数据信息。
辅助名称节点服务器
可以有一个辅助NameNode服务器的实例。它负责以下工作:
- 维护NameNode服务器备份
- 它不被视为NameNode服务器的灾难恢复,但NameNode服务器可以从该服务器部分还原。
- 定期通过编辑日志保留命名空间镜像
当客户端请求Hadoop存储文件时,请求会转到NameNode服务器。例如,文件大小为300MB。由于每个数据块的大小为64MB,因此文件将被分成5个数据块,其中4个等于64MB,第5个等于44MB,并将它们存储在具有3个副本的同一集群中的5个不同的数据节点服务器中。在这里,数据块被inputsplit.NameNode服务调用,然后保留信息,如数据块的存储位置,块的大小等。此信息称为元数据。
以下是操作的完整流程:
- 该文件分为5个输入拆分,分别表示a.jpg,b.jpg,c.jpg,d.jpg和e.jpg原始文件名为photo.jpg并且文件大小300 MB
- 客户端向NameNode服务器发送具有此详细信息的请求,询问DataNode服务器有哪些可用的数据块来存储它们。
- NameNode服务器使用DataNode服务器的详细信息响应客户端,该服务器有足够的空间来存储文件。假设它发送以下详细信息:
InputSplit | DataNode Server |
a.jpg | Data Node Server 1 |
b.jpg | Data Node Server 3 |
c.jpg | Data Node Server 5 |
d.jpg | Data Node Server 6 |
e.jpg | Data Node Server 7 |
- 一旦客户端收到来自NameNode服务器的响应,它就会开始请求DataNode服务器存储文件。它开始向DataNode服务器1发送第一个inputsplit a.jpg。
- 一旦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发送BlockReport到NameNode服务器更新元数据信息。
- 对其他输入拆分重复相同的过程。
- 如果DataNode服务器1、3和5中的任何一个停止发送Heartbeat和BlockReport,NameNode服务器认为DataNode服务器已死,并选择另一台DataNode服务器来替换a.jpg inputsplit的复制。
- 应该有一个用Java或任何其他语言编写的程序来处理文件photo.jpg。客户端将此程序发送到Hadoop的JobTracker组件。JobTracker组件从NameNode服务器获取元数据信息,然后与相关DataNode服务器的TaskTracker组件通信以处理文件。JobTracker和TaskTracker之间的通讯叫Map。DataNode服务器的inputslit数量等于Mapper的数量。在上面的示例中,将有5个映射器运行来处理photo.jpg文件。
- TaskTracker组件会继续向JobTracker组件报告,如果它们正在正确处理请求或它们是否处于活动状态。如果有任何TaskTracker停止报告给JobTracker,则JobTracker将相同的任务分配给inputslipt存储复制的TaskTracker其中一个。
- JobTracker根据TaskTracker的距离和正在运行的映射器数量将任务分配给TaskTracker。
- 每个Mapper为每个分配的任务生成一个输出文件。在此示例中,将有5个映射器生成5个不同的输出文件。将有一个Reducer,其将合并这5个输入文件并向正在运行的DataNode服务器报告,其中Reducer在运行,例如DataNode服务器4。然后,DataNode服务器4将通过提供元数据与NameNode服务器通信,说明有一个名为output.jpg的输出文件已被处理并准备使用。
- 一旦处理完成100%并生成输出.jpg文件,客户端将继续监视并与NameNode服务器通信。NameNode服务器响应客户端说该文件已处理并准备在DataNode服务器4中使用。
- 然后客户端直接向DataNode服务器4发送请求并获取输出.jpg文件