什么是分布式处理技术“Hadoop”?

Hadoop是一种开源中间件,利用分布式处理技术实现大规模数据的存储和分析。在 Apache 项目下,除了 Hortonworks、美国雅虎、Cloudera 等从一开始就参与的公司之外,英特尔、微软等更多公司的成员正在继续开发。


Hadoop出现的背景

Hadoop 使用 Google 中作为开源实现发布的以下基本技术。

  • * GFS(谷歌文件系统:谷歌的分布式文件系统)
  • * Google MapReduce(Google 的分布式处理技术)

它用于将搜索服务处理的网页信息保存在 GFS 中,以及使用 Google MapReduce 生成搜索索引等目的。基于这些论文,它开始由 Doug Cutting(现任 Apache 社区主席)领导的成员进行基于 Java 的开发。Doug 及其同事开发了以下组件作为 Hadoop:它已经到了现在。

  • * HDFS(Hadoop分布式文件系统)
  • * Hadoop MapReduce 框架

Hadoop 这个名字使用了 Doug 先生的孩子最喜欢的大象毛绒玩具的名字。



Hadoop的特点

Hadoop分布式处理平台的典型特点如下。

  • 特色一
    通过添加简单的服务器实现可扩展性
    如果分布式处理的 HDFS 容量或资源用完,您可以通过添加更多服务器来提高容量和处理性能。添加服务器不需要停止 Hadoop 集群。可以在服务继续的情况下进行操作。此外,可以在不影响应用程序或基础架构设计的情况下获得新的可扩展性。

  • 特色二
    假设存储非典型数据,实现处理灵活性
    与传统 RDBMS 和 DWH 的根本区别在于,在 HDFS 中存储数据时不需要模式定义。因此,可以减少预先设计的麻烦。在 Hadoop 中,存储在 HDFS 中的数据在每次处理时都被赋予了意义,因此您可以暂时存储它,并在确定处理策略时定义如何处理数据。

  • 特色三
    以使用商品产品为前提的基础设施配置和容错
    构成 Hadoop 环境的服务器不需要专用硬件或特殊规格。因此,通过使用商用服务器,您可以降低构建基础架构的成本。
    另外,在使用大量服务器的情况下,必须注意服务器发生故障时的处理方式,但由于 Hadoop 是一种假设发生故障的架构,因此即使任何服务器发生故障,系统也可以使用。整体不错。



组成 Hadoop 的组件

Hadoop 由两部分组成:HDFS(Hadoop Distributed File System)是一种分布式文件系统,Hadoop MapReduce 是一种分布式处理框架。

高密度文件系统

HDFS 由一个主节点NameNode和一个从节点DataNode组成。NameNode 管理分布式文件系统的元信息,DataNode 存储数据的实质。在 HDFS 中存储文件时,将文件分割成固定大小得到的数据以的形式保存在DataNode 中。

块也将副本存储在 多个 DataNode 上,考虑到任何 DataNode 将失败并且存储在该 DataNode 上的块将丢失的可能性。这使您可以在任何 DataNode 损坏的情况下引用另一个 DataNode 的同一块,这是一种防止数据丢失的机制。HDFS 默认在 DataNode 上存储三个副本。对于存储在 HDFS 中的每个文件,可以更改此副本数。

hadoop中间件 hadoop算中间件吗_hadoop中间件

HDFS 会在 DataNode 发生故障时存储块的副本,因此只要具有副本的所有 DataNode 不会同时发生故障,就可以继续服务。但是,由于 NameNode 是单节点,因此 HDFS 在发生故障时无法继续服务。在之前的 Hadoop(1 系列)中,针对 NameNode 的单点故障,试图通过结合其他 OSS 来减少服务停机时间。
作为维护 NameNode 服务的机制,使用 Apache ZooKeeper 的分布式锁机制开发了具有 Active-Standby 配置的NameNode-HA。如果 Active 端的 NameNode 发生故障,此 NameNode-HA 可以将服务接管到 Standby 端的 NameNode,而无需停机。

HDFS 是一个类似 POSIX 的文件系统。HDFS操作可以使用CLI(命令行界面)、REST、Java-API等来实现。由于命令系统类似于操作 UNIX 和 Linux 命令,可以说目前所学的知识可以应用到 HDFS 操作中。

HDFS 可以将任何用户数据存储在分布式文件系统上。此外,保存它不需要特殊的工作。由于其机制,HDFS 在存储大文件方面非常有效。另一方面,它不适合以下用途。

(1) 存储大量小文件

由于 HDFS 元信息由 NameNode 管理,存储大量小文件会浪费资源。在 HDFS 中,最好将小文件组合起来,并将它们存储为几个大文件。

(2) 文件更新

在 HDFS 中,您只能添加到保存的文件中。没有更新和保存文件中间的机制。在这种情况下,在本地环境中更新文件后,更新的文件将保存在 HDFS 中并被覆盖。

Hadoop MapReduce

Hadoop MapReduce 有两个组件,一个实现分布式处理的 MapReduce 处理平台和一个运行在处理平台上的 MapReduce 应用程序。

Hadoop MapReduce 处理平台

Hadoop MapReduce 由一个主节点JobTracker和一个从属节点TaskTracker组成。JobTracker 负责管理 MapReduce 作业,将任务分配给 TaskTracker,并管理 TaskTracker 资源。TaskTracker 负责执行任务。
在 MapReduce 处理平台中,如果一个 TaskTracker 失败,并且该 TaskTracker 正在执行的任务无法完成,JobTracker 会将相同的任务分配给另一个 TaskTracker。这允许您继续运行整个 MapReduce 作业,而无需重新开始。
JobTracker在给TaskTracker分配一个任务(map任务)的时候,是为了尽可能多的使用和运行TaskTracker的服务器共存的DataNode管理的数据。这称为数据局部性。通过使用与TaskTracker共存的DataNode的数据,可以尽可能减少服务器之间的通信量,抑制开销。另一方面,reduce 任务需要从多个 TaskTracker 中获取数据,因此不能像 map 任务那样考虑数据的局部性。

hadoop中间件 hadoop算中间件吗_mapreduce_02

Hadoop MapReduce 应用程序

MapReduce 应用程序由在 MapReduce 处理平台上运行的 MapReduce 作业组成。MapReduce 作业主要定义了以下流程。

  1. (1)map处理:对于输入数据,意思是key值形式的数据经过一些处理。
  2. (2)reduce处理:对map处理的每个key聚合的数据进行一些处理。
  3. (3) MapReduce作业定义:定义处理(1)和(2)的信息(输入路径、输出路径、reduce进程的多重性等)。

(*另外,输入数据如何读取,输出数据如何写入,个别数据类型等可根据需要使用。)

说到分布式处理,对于处理所需的操作,例如用于共享处理信息的通信和文件操作,需要复杂的实现。由于 Hadoop 在 Hadoop 内部实现了这些实现,定义 MapReduce 作业的用户可以在不了解复杂实现的情况下定义流程。

Hadoop 的 MapReduce 应用程序是在假设它将用于批处理的情况下开发的 。 执行 MapReduce 作业至少需要 10 秒。因此,不适合用RDBMS进行毫秒级提取特定数据等处理。

hadoop中间件 hadoop算中间件吗_hadoop_03

Hadoop YARN

在Hadoop2系统中,分布式处理框架Hadoop MapReduce的机制发生了变化,分离为分布式资源控制机制Hadoop YARN和MapReduce Application Master。随着 YARN 的出现,对于不适合 MapReduce 的进程,通过每个人实现一个机制(Application Master 和 application control),分布式处理已经成为可能,YARN 机制和 MapReduce 一样。YARN 上的 MapReduce 以外的应用程序正在积极开发中,例如 Apache Tez 和 Apache Spark。

在 YARN 中, ResourceManager被配置 为管理 Hadoop 集群中资源的主节点,而NodeManager被配置为管理处理节点的从节点。管理应用程序的节点ApplicationMaster请求 ResourceManager 保护一个容器,该容器在检查资源状态的同时执行处理。ResourceManager 根据来自 NodeManager 的资源使用状态来回答关于哪个节点启动 Container 的信息。在这个回答之后,Application Master 请求容器在处理节点上启动并运行应用程序。

YARN机制消除了主节点集中应用管理的瓶颈,使得配置更多处理节点的Hadoop集群成为可能。在 Hadoop 1 系统中,3000 到 4000 个节点是集群的极限,但是通过 YARN 机制可以配置一个约 10000 个节点的集群。