Hadoop是一个用java编写的Apache开源框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。Hadoop框架工作的应用程序工作在一个跨计算机集群提供分布式存储和计算的环境中。Hadoop被设计成从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。
Hadoop架构
Hadoop框架包括以下四个模块:
- Hadoop Common: 这是其他Hadoop模块依赖的Java库和工具。这些库提供文件系统和操作系统级别的抽象,并包含启动Hadoop所需的Java文件和脚本。
- **Hadoop YARN: **这是一个用于作业调度和集群资源管理的框架。
- Hadoop分布式文件系统(HDFS™): 一种分布式文件系统,提供对应用程序数据的高吞吐量访问。
- MapReduce: 这是一个基于YARN的大型数据集并行处理系统。
我们可以使用下面的图来描述Hadoop框架中可用的这四个组件。
hadoop_architecture.jpg自2012年以来,“Hadoop”一词通常不仅指上述基本模块,还指可以安装在Hadoop之上或与Hadoop并行的附加软件包集合,如Apache Pig、Apache Hive、Apache HBase、Apache Spark等。
MapReduce
Hadoop MapReduce是一个易于编写应用程序的软件框架,这些应用程序以可靠、容错的方式并行处理大集群(数千个节点)上的海量数据。
MapReduce这个词实际上是指Hadoop程序执行的两个不同的任务:
- Map任务: 这是第一个任务,它接受输入数据并将其转换为一组数据集合,其中单个元素被分解为元组(键/值对)。
- Reduce任务: 该任务将map任务的输出作为输入,并将这些数据元组组合成较小的元组集合。reduce任务总是在map任务之后执行。
通常输入和输出都存储在文件系统中。该框架负责调度任务、监视任务并重新执行失败的任务。
MapReduce框架由一个master JobTracker和每个集群节点的一个slave TaskTracker组成。master 负责资源管理,跟踪资源消耗/可用性,调度从服务器上的作业组件任务,监视它们并重新执行失败的任务。slave 按照主任务的指示执行任务,并定期向主任务提供任务状态信息。
JobTracker是Hadoop MapReduce服务的一个单点故障,这意味着如果JobTracker宕机,所有正在运行的作业都会停止。
Hadoop Distributed File System
Hadoop可以直接与任何可挂载的分布式文件系统(如本地FS、HFTP FS、S3 FS等)一起工作,但是Hadoop最常用的文件系统是Hadoop分布式文件系统(HDFS)。
Hadoop分布式文件系统(HDFS)是基于谷歌文件系统(GFS)的,它提供了一个分布式文件系统,可以在小型计算机的大型集群(数千台计算机)上以可靠、容错的方式运行。
HDFS使用主/从(master/slave)架构,其中主架构由管理文件系统元数据的单个名称节点NameNode和存储实际数据的一个或多个从数据节点DataNodes组成。
HDFS名称空间中的文件被分成几个块,这些块存储在一组数据节点DataNodes中。NameNode确定块到DataNodes的映射。DataNodes 负责文件系统的读写操作。它们还根据NameNode给出的指令负责块的创建、删除和复制。
HDFS提供了与任何其他文件系统一样的shell,可以使用命令列表与文件系统交互。这些shell命令将在单独的一章中介绍,并提供适当的示例。
Hadoop是如何工作的
Stage 1
用户/应用程序可以通过以下项目将作业提交给Hadoop (Hadoop作业客户端)进行所需的处理:
- 在分布式文件系统中输入和输出文件的位置。
- java类以jar文件的形式包含map和reduce函数的实现。
- 通过设置特定于作业的不同参数进行作业配置。
Stage 2
然后Hadoop客户端将作业(jar/可执行文件等)和配置提交给JobTracker, JobTracker负责将软件/配置分发给slaves服务器,调度和监视任务,向客户端提供状态和诊断信息。
Stage 3
不同节点上的TaskTrackers 按照MapReduce实现执行任务,reduce函数的输出存储在文件系统上的输出文件中。
Hadoop的优点
- Hadoop框架允许用户快速编写和测试分布式系统。它是高效的,它自动分配数据并跨机器工作,反过来利用CPU核心的底层并行性。
- Hadoop不依赖硬件来提供容错和高可用性(FTHA),Hadoop库本身被设计来检测和处理应用层的故障。
- 可以动态地从集群中添加或删除服务器,Hadoop可以不间断地继续运行。
- Hadoop的另一个巨大优势是,它不仅是开源的,而且可以在所有平台上兼容,因为它是基于Java的。
原文链接:https://www.tutorialspoint.com/hadoop/hadoop_introduction.htm
网友评论