【摘要】
大数据Hadoop架构,及其核心组件。
【背景】
万万没想到大数据的发展这么快,以Hadoop为代表的大数据架构已经属于第一代基础设施了。现代基于hadoop的M/R管道虽然偏传统,但Hadoop提供了一整套解决方案,还是有非常好的优势。
【问题】
Hadoop架构的基础组件包括什么。
【整体解决方案】
底层以HDFS分布式文件系统做数据存储,所有的数据都通过MapReduce计算模型进行处理(把数据计算任务拆分成Map和Reduce两个过程,Map做初次处理,产生中间结果,Reduce做二次处理,拿中间结果进行分析产生最后数据);为了简化用户的使用成本,Hadoop在MapReduce之上提供了Pig、HIve平台,Pig支持海量数据并行计算,并提供接口给到上层做报表、导入关系型数据库;HIve基于SQL语句对数据进行分析错误,降低了如产品、运营人员的使用成本。整套Hadoop数据处理体系使用Zookeeper进行任务节点的协调管理、资源分配,保障系统的正常运行。数据接入可以通过批处理和流处理,以及消息同步等,还有数据实时计算的轻量级组件,比如clickhouse
【核心组件之一HDFS】
【HDFS概述】
- 高容错性:认为硬件总是不可靠的。
- 高吞吐量:为大量数据访问的应用提供高吞吐量支持。
- 大文件存储:支持存储TB-PB级别的数据。
- 大文件存储与访问
- 流式数据访问
- 大量小文件存储
- 随机写入
- 低延迟读取
-
多个小文件会占用大量的磁盘空间:在 HDFS 中,每个文件占用一个数据块,并且每个数据块都有一个默认的大小,通常是128MB或256MB。如果存储的是大量小文件,每个文件占用的磁盘空间远远小于一个数据块的大小,这就会导致磁盘空间的浪费。此外,HDFS管理单个文件所需的元数据信息(如名称、权限、时间戳等)是相对较大的,多个小文件会在存储这些元数据时占用更多的磁盘空间。
-
处理小文件会影响系统性能:每个文件无论大小,都需要在 HDFS 中存储、复制、移动和删除。此外,所有的操作都需要与 HDFS元数据服务 (NameNode)进行通信和协调。当存储的是大量小文件时,每个文件的操作所产生的额外开销会增加操作时间和网络流量,严重影响系统性能。
【HDFS基本架构】
![](https://i-blog.csdnimg.cn/blog_migrate/cf66421f97204099acc57f63d7d04d98.png)
NameNode(名称节点):负责管理文件系统的命名空间和文件的元数据信息。它记录了文件的层次结构、文件的权限和属性、数据块的位置以及副本策略等。NameNode 会将这些信息保存在内存中,并定期持久化到磁盘上的一个称为"fsimage"的镜像文件和一个称为"edit log"的文件中。NameNode 还负责处理客户端的文件系统操作请求,如文件的创建、读取、写入和删除等。
DataNode(数据节点):DataNode 是存储实际数据块的组件,负责管理磁盘上的数据块并向 NameNode 报告其存储的状态。每个数据节点在启动时向 NameNode 注册,并周期性地发送心跳信号以证明其在线状态。DataNode 还负责处理客户端和其他数据节点之间的数据传输请求,包括数据块的读取和写入。
namenode和secondarynamenode共同实现元数据的持久化:
【核心组件之二MapReduce】
【MapReduce概述】
- 易于编程:程序员仅需描述需要做什么, 而具体怎么去做就交由系统的执行框架处理。
- 良好的扩展性:可以通过添加机器以达到扩展集群能力的目的。
- 高容错性:通过计算迁移或者数据迁移等策略提高集群的可用性与容错性。
这与MapRedcue的数据处理和计算模式有关:
-
批量计算模式:MapReduce 采用的是批量计算模式,即数据会被分成一定大小的块,经过 Map 操作进行处理,再经过 Shuffle 和 Reduce 操作进行合并。整个过程需要数据的排序和组织,导致数据处理的时延比较大。同时,MapReduce 中的 Reduce 操作必须等到所有的 Map 操作均完成之后才能执行,这使得整个处理过程的时延更为明显。
-
数据处理的顺序和流向已经确定:MapReduce 的输入数据和输出数据都必须通过文件系统进行读取和写入,而且数据的处理流向也是固定的。这就意味着,MapReduce 无法对实时生成或变化的数据流进行处理,并不能以流式处理的方式动态地提供处理结果,而只能针对静态数据进行批量处理。
数据处理过程如下:
- 把输入的数据 (input) 拆分为多个键值对 (key-value)。
- 针对每一个键值对分别调用Map进行并行处理。
- 每个Map得到的结果同样是键值对的形式,且每个Map可能会产生多个新的键值对。
- 对Map得到的结果进行排序、组合。
- 将上一步结果进行Reduce规约计算。
- 以键值对的形式输出最终结果。
【HBase概述】
- 适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别。
- 利用Hadoop HDFS作为其文件存储系统,提供实时读写的分布式数据库系统。
- 利用ZooKeeper作为协同服务。
【HBase基本架构】
![](https://i-blog.csdnimg.cn/blog_migrate/62ede9237754dd8c14589d1bd4b60dd3.png)
-
HMaster:HMaster 是 HBase 的主节点,负责协调和管理整个 HBase 集群。它负责元数据管理、负载均衡、Region 的分配与迁移、安全访问控制等。HMaster 还维护了对于 RegionServer 的监控和控制,并提供了对外的管理接口,可以与客户端交互以执行表的创建、修改和删除等管理操作。
-
RegionServer:RegionServer 是 HBase 集群中的工作节点,负责存储和管理数据。每个 RegionServer 负责多个 Region(逻辑数据分片)的存储和处理。RegionServer 会在启动时向 HMaster 注册,并定期向 HMaster 发送心跳信号以保持联系。它执行客户端的读写请求,对数据进行存储、检索和更新操作,并与 HDFS 交互来读取和写入数据。
-
ZooKeeper:ZooKeeper 是 HBase 的协调服务,它用于分布式环境中的集群管理、配置管理和命名服务等。HBase 使用 ZooKeeper 来协调 HMaster 和 RegionServer 的选举过程、存储集群元数据和状态信息以及提供分布式锁等功能。
-
客户端:HBase 客户端用于与 HBase 集群进行交互,并执行数据的读写操作。客户端使用 HBase 提供的 Java API 或其他支持的 API 来连接到 HBase,发送数据操作请求,并接收和解析响应。