Hadoop 简介

Hadoop是一个用java编写的Apache开放源代码框架,它允许使用简单的编程模型在计算机集群中分布式处理大型数据集。Hadoop框架式应用程序在跨计算机群集提供分布式存储和计算的环境中工作。Hadoop旨在从单个服务器扩展到数千台机器,每台机器提供本地计算和存储。

 

Hadoop架构

Hadoop框架包括以下四个模块:

  • Hadoop Common: 这些是其他Hadoop模块所需的Java库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的必要Java文件和脚本。
  • Hadoop YARN: 这是作业调度和群集资源管理的框架。
  • Hadoop分布式文件系统(HDFS™): 一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  • Hadoop MapReduce: 这是用于并行处理大型数据集的基于YARN的系统。

我们可以使用下面的图来描述Hadoop框架中可用的这四个组件。

Hadoop架构

自2012年以来,“Hadoop”这个术语经常指的不仅仅是上面提到的基础模块,还包括可以安装在Hadoop之上或与Hadoop一起安装的附加软件包,例如Apache Pig,Apache Hive,Apache HBase,Apache火花等

 

MapReduce的

Hadoop MapReduce 是一个软件框架,用于轻松编写应用程序,以可靠的容错方式在大型群集(数千个节点)的商品硬件上并行处理大量数据。

术语MapReduce实际上是指Hadoop程序执行以下两个不同的任务:

  • Map Task: 这是第一个任务,它接收输入数据并将其转换为一组数据,其中各个元素被分解为元组(键/值对)。
  • Reduce任务: 这个任务将地图任务的输出作为输入,并将这些数据元组合成一组较小的元组。reduce任务总是在map任务之后执行。

通常,输入和输出都存储在文件系统中。该框架负责调度任务,监控它们并重新执行失败的任务。

MapReduce框架由每个集群节点的一个主 JobTracker 和一个从 TaskTracker组成 。主站负责资源管理,跟踪资源消耗/可用性,并安排从站上的作业组件任务,监视它们并重新执行失败的任务。从站TaskTracker按照主站的指示执行任务,并定期向主站提供任务状态信息。

JobTracker是Hadoop MapReduce服务的单点故障,这意味着如果JobTracker发生故障,所有正在运行的作业都将停止。

 

Hadoop分布式文件系统

Hadoop可以直接与任何可安装的分布式文件系统(如Local FS,HFTP FS,S3 FS等)一起工作,但Hadoop使用的最常见文件系统是Hadoop分布式文件系统(HDFS)。

Hadoop分布式文件系统(HDFS)基于Google文件系统(GFS),提供分布式文件系统,可以以可靠的容错方式在大型集群(数千台计算机)的小型计算机上运行。

HDFS使用主/从体系结构,其中master由管理文件系统元数据的单个 NameNode 和存储实际数据的一个或多个从 DataNode组成

HDFS名称空间中的文件被拆分成几个块,这些块存储在一组DataNode中。NameNode确定块到DataNode的映射。DataNodes负责文件系统的读写操作。他们还根据NameNode给出的指令来处理数据块的创建,删除和复制。

HDFS像任何其他文件系统一样提供一个shell,并且可以使用一系列命令与文件系统进行交互。这些shell命令将在一个单独的章节以及适当的示例中进行介绍。

 

Hadoop如何工作?

阶段1

用户/应用程序可以通过指定以下项目将作业提交给Hadoop(hadoop作业客户端)以进行所需的过程:

  1. 输入和输出文件在分布式文件系统中的位置。
  2. 这个java类以jar文件的形式包含了map和reduce函数的实现。
  3. 通过设置特定于作业的不同参数来进行作业配置。

阶段2

然后,Hadoop作业客户端将作业(jar /可执行文件等)和配置提交给JobTracker,然后负责将软件/配置分发给从服务器,安排任务并监控它们,向作业客户端提供状态和诊断信息。

第3阶段

不同节点上的TaskTracker按照MapReduce实现执行任务,reduce函数的输出存储在文件系统上的输出文件中。

 

Hadoop的优点

  • Hadoop框架允许用户快速编写和测试分布式系统。它非常高效,它可以自动分配数据并在整个机器上工作,并反过来利用CPU内核的基本并行性。
  • Hadoop不依赖硬件来提供容错和高可用性(FTHA),而是Hadoop库本身已经被设计用于检测和处理应用层的故障。
  • 可以动态地向集群添加或删除服务器,并且Hadoop可以不中断地继续运行。
  • Hadoop的另一大优势是除了开源之外,它在所有平台上都兼容,因为它基于Java。