在这篇文章中,我们探讨了Hadoop背后的理念以及它是如何在系统设计中使用的。
目录:
- Hadoop简介
- 大数据和它的挑战
- 作为一种解决方案的Hadoop
- Hadoop的组成部分
- Hadoop与RDBMS
- Hadoop的使用案例
Hadoop简介
Hadoop是一个开源软件实用程序框架,它以分布式方式管理大数据存储,并并行地处理数据。Hadoop能够有效地将大数据处理分解到多个商品计算机(DataNodes)上,然后将结果结合起来。
大数据及其挑战
大数据是大量的数据,不能用传统的方式,如RDBMS(关系型数据库管理系统)来存储、处理和分析。大数据包括静态数据(如数据库、电子表格)、半结构化数据(电子邮件、html页面等)和非结构化数据(在社交网络上发布的信息,如Twitter、图像、视频等)。数量、速度、种类、价值、真实性是大数据的 "5V",也被称为大数据的特征。
在早期,只有有限的数据可以存储和处理。例如,结构化数据,如数据库,只需要一个处理器单元和一个存储单元。SQL被用来查询数据库,数据被整齐地存储在行和列中,就像EXCEL电子表格一样。随着近年来数据生成率的增加,它导致了具有不同数据格式的高数据量。目前的单处理器和单中央存储单元模式成为了瓶颈。
Hadoop作为一种解决方案
单个处理器不足以处理如此大量的不同类型的数据,因为它非常耗时。单个存储单元成为瓶颈,因为它产生了网络开销。
Hadoop实现了分布式存储的并行处理。多个处理器被用来处理大量的数据,这节省了时间。分布式存储被用于每个处理器。这使得存储和访问数据变得容易。Hadoop工作起来,没有产生网络开销,也没有瓶颈,因为不需要等待数据的提取或处理。
Hadoop的组成部分
Hadoop有三个组成部分。Hadoop分布式文件系统(HDFS)、MapReduce和另一个资源协商器(YARN)。
Hadoop分布式文件系统(HDFS)
HDFS是一个存储单元,它包含一个NameNode和多个DataNode。NameNode维护和管理DataNode,DataNode存储实际数据,它执行数据的读、写、处理和复制。数据节点之间的数据复制是Hadoop框架处理数据节点故障的方式。
Datanode每3秒向Namenode发送一次心跳(一种信号),以表明它是活的。如果在10分钟内没有心跳,就会出现 "心跳丢失 "的情况,相应的DataNode被认为是死亡/不可用。
地图重构
MapReduce是处理单元,它是一种编程算法,巨大的数据被以并行和分布式方式处理。应用程序被分成许多小的工作片段,在数据节点进行处理,结果被发送到NameNode。
输入的数据首先被分割成几块数据。接下来,这些数据块由地图任务进行并行处理。然后对其进行排序,并标上出现次数。在reduce任务中,进行聚合并获得输出。
另一个资源协商器(YARN)
YARN是Hadoop的资源管理单元。它作为Hadoop框架的OS(操作系统),执行集群资源的管理和作业调度。其工作流程如下。
- 当客户提交MapReduce作业时,它被发送到资源管理器。
- 资源管理器负责资源分配和管理。在这里,资源管理器分配一个容器(物理资源的集合,如CPU和RAM)来启动应用管理器。
- 应用程序管理器向资源管理器注册,并向节点管理器请求容器(管理节点和监控资源使用)。
- 应用程序代码在容器中执行。
- 一旦处理完成,应用管理器就会取消与资源管理器的注册。
Hadoop与RDBMS
第一个区别是Hadoop的读模式方法和RDBMS的写模式方法。在Hadoop中,对于什么样的数据被存储在HDFS中没有任何限制。应用程序代码不是预先配置数据结构,而是在应用程序读取数据时对其进行配置。这与RDBMS的 "写 "的模式相反。在向数据库输入数据之前,我们需要找出数据库的结构,修改数据结构,使其符合数据库所期望的数据类型。如果数据不符合它所期望的,数据库将拒绝该数据。
第二个区别是,Hadoop中的数据是一个压缩的文本文件或其他数据类型,它被复制到HDFS中的多个数据节点。而在RDBMS中,数据是以逻辑形式存储的,有链接表和定义的列。
最后,让我们假设Hadoop中的DataNode发生故障,导致数据集不完整。在这种情况下,Hadoop不会耽误对用户的响应。它将为用户提供一个即时的答案,并且最终会有一个一致的答案。Hadoop的最终一致性方法是一个更好的模型,用于读取1000个服务器上不断更新的非结构化数据。
另一方面,RDBMS采取的是2阶段提交的方法。RDBMS在向用户发布任何信息之前,必须在所有节点上实现完全的一致性。RDBMS的2阶段提交方法非常适用于管理和滚动交易,所以我们确信我们得到了正确的答案。
Hadoop的使用案例
让我们以谷歌地图的 "卫星视图 "为例。如何将来自不同内容提供者(输入)的大量图像数据文件(质量不同,拍摄时间不同)处理为用户的 "卫星视图"。
首先将整个区域划分为许多较小的 "网格",并指定固定的位置ID(经纬度是有用的唯一ID)。根据它们所覆盖的 "网格",将图像数据文件分割成更小的瓦片。其次,用图像文件名(key)和相应的图像数据(value)映射较小的图像。
接下来,我们根据图像数据的时间戳(拍摄日期)和质量(分辨率)对其进行排序。最后,我们通过重叠和合并相似的图像数据在它们所处的同一网格中进行缩减。使用MapReduce处理大量的图像数据文件后,其输出结果将是谷歌地图的 "卫星视图"。
通过OpenGenus的这篇文章,你一定对Hadoop有了完整的概念,以及它是如何在系统设计中使用的。