第4讲 了解Hadoop生态系统

第4讲 了解Hadoop生态系统

模块目标

学完本模块的内容,读者将能够:

解释Hadoop生态系统各个组件的角色

本讲目标

学完本讲的内容,读者将能够:

列出Hadoop生态系统的各个组件

讨论在Hadoop分布式文件系统(HDFS)中存储文件的流程

解释Hadoop MapReduce的角色

解释利用HBase存储数据的流程

解释Hive是如何协助大数据挖掘的

解释Hadoop生态系统各个组件的角色,例如ZooKeeper、Sqoop、Oozie和Flume

 

“在每一个精心编写的大程序里面,都有一个精心编写的小程序。”

——Charles Antony Richard Hoare

 

你有没有想过,Facebook是如何为你找到和推荐这么多朋友的?这不是一个巧合,而是通过精心设计实现的。他们是怎么做到的呢?让我们了解一些完成这项工作的核心概念,以及用作此类解决方案的大数据技术。

当你需要处理大数据源(如拥有数十亿个人际关系的Facebook)时,传统的方法难堪重任。大数据的数据量、速度和多样性令大多数的技术无能为力。必须创建新技术来解决这一新挑战——Hadoop就是其中之一。

正如前几讲中提到的那样,Yahoo!和Google等搜索引擎创新者需要找到一种方法,使搜索引擎收集到的大量数据变得有意义,并可以为它们的业务所用。换句话说,这些公司需要了解它们收集了什么信息,以及它们如何将这些数据变现。开发Hadoop是因为它代表了使公司能轻松地管理和处理大数据的最实用的方式。

Hadoop经常被比作一个生态系统,因为就像生态系统为所有生物提供了一个完美的环境,让它们在其中互动那样,Hadoop也有开发和部署大数据解决方案所需的各种工具和技术。此外,Hadoop最大限度地利用了可用资源,减少了浪费。本讲将详细描述Hadoop生态系统。

4.1 Hadoop生态系统

预备知识 了解Hadoop大数据存储和管理流行的原因。

 

不使用充满了技术和服务的工具箱,赤手空拳地面对大数据的挑战,正如用勺子去把海洋舀空。作为Hadoop生态系统的核心组件,Hadoop MapReduce和Hadoop分布式文件系统(HDFS)不断改善,提供了极好的起点;然而,仅有这两个工具是不足以管理大数据的。因此,Hadoop生态系统提供了一系列专为大数据解决方案的开发、部署和支持而创建的工具和技术。

MapReduce和HDFS提供了支持大数据解决方案核心需求所需的基本结构和服务。生态系统的其余部分提供了为现实世界建立和管理以目标为导向的大数据应用程序所需的组件。缺少了该生态系统,开发人员、数据库管理人员、系统和网络管理员以及其他人员需要确定构建和部署大数据解决方案所需的独立的技术集合,并达成一致。在企业想要采用新兴技术趋势的情况下,这往往是昂贵而且费时的。

这就是Hadoop生态系统对于大数据的成功如此重要的原因;它是当今针对大数据挑战的最全面的工具和技术集合。该生态系统有利于为大数据的广泛采用创造新的机会。

图1-4-1显示了Hadoop生态系统中包含的一些工具和技术。

图1-4-1 Hadoop生态系统

下面是Hadoop生态系统中的一些工具和技术:

  • HDFS;
  • MapReduce;
  • YARN;
  • HBase;
  • Hive;
  • Pig;
  • Sqoop;
  • Zookeeper;
  • Flume;
  • Oozie。

下面是对Hadoop生态系统里的工具和技术的分析。

4.2 用HDFS存储数据

HDFS是一种实用、稳定的集群化文件存储和管理方法。HDFS不是文件的最终目的地,而是一个数据服务,它提供了一组处理大量高速数据的独特功能。和其他不断读写的文件系统不同,HDFS仅写一次数据,然后多次读取。

技术材料

 

扇区是硬盘上可访问的最小单元,簇是用于组织和标识磁盘上文件的大一点儿的单元。

下面我们详细地解释:在HDFS中,每个文件你仅能写一次,也就是说,只在文件创建的时候写入。这就避免了将存储在一个集群机器上的数据复制到其他机器上可能导致的一致性问题。HDFS通过一次性写入数据,确保数据可以从任何复制到不同机器上的缓存文件副本中读出,而不需要验证该内容是否已被修改过。这种做法使得HDFS成为支持大文件的极好选择。

HDFS是有弹性的,所以这些数据块在集群中复制,以防服务器失效。HDFS是如何跟踪所有的这些块的呢?简单地说,是用文件系统元数据

元数据被定义为“关于数据的数据”。

可以将HDFS元数据视为提供了下列信息的具体描述的模板:

  • 文件何时被创建、访问、修改、删除等?
  • 文件块存储在集群的什么地方?
  • 谁有权查看或修改文件?
  • 集群中存储了多少文件?
  • 集群中存在多少个数据节点?
  • 集群中的事务日志位于何处?

HDFS的元数据存储于名称节点服务器(NameNode Server)。这个服务器是所有HDFS元数据和数据节点(用户数据存储的地方)的存储库。你可能已经知道,HDFS集群越大,元数据占用的空间也就越大。当集群运行时,所有的元数据都将加载到名称节点服务器的物理内存中。为了获得最佳性能,名称节点服务器应当有很多物理内存,理想情况下还应该有许多固态硬盘——也就是在DRAM或闪存中存储数据的存储设备。这些资源越多,性能就越好。

4.2.1 HDFS架构

大数据带来了大的挑战。HDFS通过将文件分解成一组更小的块,解决了这些难题。这些数据块分布在HDFS集群的数据节点上,通过名称节点来管理。块的大小是可配置的,通常是128 MB或者256 MB,这意味着1 GB的文件的基本存储需求要消耗8个128 MB块。

HDFS遵循主从架构,HDFS集群包含单一的“名称节点”主服务器,和多个运行在HDFS集群上的“数据节点”。当整个集群位于数据中心的同一个物理机架上时,提供的性能水平最高。集群同时也包含了多个商品化服务器,它们是通常用于小型组织机构的专用服务器,为大规模计算或者文件访问服务。

HDFS集群维护文件系统命名空间,并控制来自客户的文件访问。名称节点跟踪数据节点中数据的物理存储位置。在HDFS中,一个文件被划分成一个或多个块后存储于数据节点中。名称节点主服务器执行打开、重命名以及关闭文件和目录等操作,并将不同的文件块映射到数据节点中。除了在接收到名称节点的指令时创建、删除和复制块之外,数据节点还执行文件读写操作。

图1-4-2描绘了HDFS的基本架构。

图1-4-2 HDFS的基本架构

下面的例子可以帮助你理解上述概念的工作原理。

例  子

 

考虑一个用于存储生活在美国的联系人号码的文件。由于文件中包含的信息量巨大,因此,它被存储于HDFS集群中。姓氏以字母A开头的联系人的电话号码存储于服务器1上,B开头的存储于服务器2上,以此类推。为了重构原始的电话号码簿,程序将从每个服务器收集文件块。

在一个或几个组件失去响应的情况下,为了实现数据可用性,HDFS默认将文件块复制到两台服务器上。数据冗余提供了信息的高可用性。也可以根据每个文件的基本需求,增加或降低冗余度级别。

下面我们来详细讨论两个重要的HDFS组件。

名称节点

HDFS通过将大文件分割成更小的被称作的部分来进行工作。在HDFS集群中,当所有的数据节点被集中到一个机架中时,名称节点使用“机架ID”来跟踪集群中的数据节点。

跟踪位于各种数据节点上、能组合成一个完整文件的数据块,是名称节点的职责。如果把块类比为汽车,那么数据节点就是停车场,而名称节点就是代客停车的司机。名称节点还扮演了“交通警察”的角色,管理所有的文件操作,如读、写、创建、删除和复制数据节点上的数据锁。正如停车员管理所有客人的车那样,管理文件系统命名空间就是名称节点的工作了。

文件系统命名空间是集群中的文件集合。

名称节点和数据节点之间有着密切的关系,但它们是“松耦合”的。集群元素可以动态地根据需求的增长(或减少)增加(或减少)服务器。在典型的配置中,我们有一个名称节点和一个可能的数据节点,它们运行在机架中的一个物理服务器上。其他服务器只运行数据节点。

数据节点不断地与名称节点交互,查看是否有需要数据节点做的事情。这种连续行为可以向名称节点发出关于数据节点可用性的警报。此外,数据节点自身也相互通信,使得它们可以在正常的文件系统操作时进行配合。这是必要的,因为一个文件的数据块很有可能存储于多个数据节点中。名称节点对于集群的正确操作十分重要,所以名称节点的数据应该复制以防止单点故障。

数据节点

数据节点提供“心跳”消息,以检测和确保名称节点和数据节点之间的连通性。当心跳不再存在时,名称节点从集群中取消该数据节点,就像没事发生过那样继续运行。如图1-4-3所示。

当心跳消息恢复或者新的心跳消息出现时,它会被添加到集群中。

数据安全性

与所有文件系统一样,保持数据安全是一个关键的特性。HDFS支持许多为提供数据完整性而设计的功能。正如你期望的那样,当文件被分割成块,然后分布在集群中不同服务器上时,操作中的任何变化都可能会产生错误的数据。HDFS采用下面的特性,以确保集群中不会出现错误数据。

  • 事务日志:事务日志是文件系统和数据库设计中非常普遍的做法。它们跟踪每一个操作,在出现任何错误时,都可以有效地审核或重建文件系统。
  • 校验和(Checksum)验证:校验和用于验证HDFS中的文件内容。验证以如下方式进行。
    (1)当客户端请求一个文件时,可以通过检查其校验和进行验证。


图1-4-3 HDFS心跳消息图解


(2)如果发送消息的校验和与接收消息的校验和匹配,那么文件操作可以继续进行。如果不匹配,则报告错误。校验和是一种错误检测技术,基于二进制数,为每一个传输的消息分配一个数值。
(3)随后消息接收者验证校验和,以确保该数字值与消息发送端发送的相同。在有任何不同的情况下,接收者可以认为收到的消息在传输过程中被篡改了。
校验和文件是隐藏的,这样有助于避免篡改。

  • 数据块:数据块会被复制到多个数据节点上,所以一个服务器的失效,可能不一定会损坏文件。当实施集群时,复制的程度、数据节点的数量以及HDFS命名空间就被确定了。因为HDFS是动态的,所有的参数都可以在集群运行过程中调整。

把数据块看作块服务器是合理的,因为这是它们的主要功能。块服务器是指在文件系统和块元数据中存储数据的服务器。

块服务器执行以下功能。

  • 在服务器本地文件系统存储(和检索)数据块。HDFS可用于许多不同的操作系统,并且在所有的系统上(例如,Windows、Mac OS或Linux)都有类似的表现。
  • 根据名称节点中的元数据模板,在本地文件系统上存储块的元数据。
  • 执行文件校验和的周期性验证。
  • 给名称节点发送关于哪些块可用于文件操作的定期报告。
  • 为客户按需提供元数据和数据。HDFS支持从客户应用程序到数据节点的直接访问。
  • 在“管道”模型的基础上,将数据转发到其他数据节点。

定  义

 

管道是多个数据节点之间的连接,用于支持跨服务器数据移动。

在数据节点上,块的放置对数据复制和对数据管道的支持至关重要。在HDFS中,文件块以下面的方式来维护:

(1)HDFS保留每个块的本地副本。

(2)然后在不同机架上放置第二个副本,以防止整个机架失效。

(3)发送第三个副本给同一个远程机架,但是发送给机架上的不同的服务器。

(4)最后,发送额外的副本到本地或远程集群的随机位置。

4.2.2 HDFS的一些特殊功能

HDFS的两个关键特性是数据复制弹性。幸运的是,客户端应用程序不需要跟踪所有块的位置。事实上,客户被导向最近的副本,以确保最高的性能。

此外,HDFS支持创建数据管道的能力。客户端应用程序将一个块写到管道中的第一个数据节点。该数据节点接管数据,并将其发送到管道中的下一个节点;这一直持续到所有的数据以及它们的备份数据都被写入磁盘。此时,客户端在文件中写入下一个块,重复这一过程。这是Hadoop MapReduce的重要特性

了解了这些文件、块和服务器,你可能想知道一切是如何保持平衡的。如果不加干预,一个数据节点可能过载,而另一个可能是空的。

HDFS有一个“再平衡”(Rebalancer)服务,它的设计目的就是解决这些可能出现的问题。其目标是,根据每组本地磁盘的空间占用率平衡数据节点。Rebalancer在集群活动且可以节流以避免网络流量拥塞时运行。毕竟,HDFS首先需要管理文件和块,其次才关心集群需要的平衡程度。

Rebalancer是有效的,但它没有多少内置的智能。例如,你不能创建访问或加载模式,不能为那些条件进行Rebalancer优化。或许这些特性会在未来的HDFS版本中提供。

知识检测点1

 

1.HDFS中数据节点和名称节点的功能是什么?

2.块服务器的确切功能是什么?

4.3 利用Hadoop MapReduce处理数据

我们将使用Hadoop来解决业务问题,因此有必要了解它的工作方式及原因。

Hadoop MapReduce由Apache Hadoop项目开发和维护的算法实现。我们可以将MapReduce比作一个引擎,因为这就是它工作的方式。你提供输入(燃油),引擎快速有效地将输入转化成输出(驱动车轮),得到你需要的答案(向前移动)。

MapReduce是一种并行编程框架,用于处理存储在不同系统中的大量数据。MapReduce简化了并行数据处理,并因其流行实现Hadoop而广为人知。

Hadoop Reduce包括了几个阶段,每个阶段都有一组重要操作,帮助你从大数据中获取需要的答案。这个流程从用户请求运行MapReduce程序开始,到结果被写回HDFS结束。

如前所述,当今的组织需要快速分析它们所产生的大量数据,以做出更好的决策。MapReduce是一种可以帮助商业组织处理非结构化和半结构化数据源的工具,而传统工具是难以分析这些来源的。

总体情况

 

需要注意的是,MapReduce既不是一个数据库也不是数据库的直接竞争对手。它与现有技术是互补的,使得用户能够执行许多在关系型数据库中也能完成的任务。

MapReduce提供了一个额外的好处:可以识别适用于给定情况的环境。你需要关注的是MapReduce在实践中最能发挥作用的方面,而不是理论上的能力,这样才能最大限度地利用MapReduce获益。

4.3.1 MapReduce是如何工作的

除了数据库中的关系型数据之外,大部分企业还要处理多种数据类型,包括文本、机器生成数据(如传感器数据、图像)等。组织机构需要快速有效地处理数据,以获取有意义的见解。利用MapReduce,可以对存储于文件系统中的数据进行计算处理。没有必要先将它加载到数据库中。

MapReduce包含由程序员构建的两个主要过程:映射map)和归约reduce)。这就是它名字的由来!这些程序在一组工作节点上并行运行。

MpaReduce遵循主进程/工作者进程master/worker)方法,其中主进程负责控制整个活动,如识别数据,并将数据划分给不同的工作者进程。

MapReduce以如下方式工作。

  • MapReduce的工作者进程处理主进程中收到的数据,并将结果重新发送给主进程。
  • 每个MapReduce的工作者进程对自己部分的数据应用相同的代码;然而,工作者进程间没有交互,甚至一点都不了解对方。
  • 然后,主进程把从不同工作者进程那里收到的结果整合起来,进行最后的数据处理,以获取最终结果。

如果有稳定的网络日志流进入,它们可能以大数据块的形式分发到不同的工作者节点。轮询程序是一种简单的方法,条目被反复地依次传递到节点。某种散列排序也很常见。在这种情况下,MapReduce按照一定的公式将记录传递给工作者进程,以便把类似的记录发送到同一个工作者进程;例如,在客户的ID列上进行散列,就能将给定客户的所有记录发送给同一个工作者进程。如果计划按客户ID分析,那么这就至关重要了。

总体情况

 

MapReduce环境的重要特质之一是其处理非结构化文本的特殊能力。在关系型数据库中,一切东西都已存在于表、行和列中,数据已经有了定义明确的关系。但对于原始数据流来说,事实并不总是如此。加载大块文本到数据库的“blob”字段中是可能的,但它不是数据库的最佳使用方式,也不是处理此类数据的最佳方法。

4.3.2 MapReduce的优点和缺点

MapReduce可以运行在商品化硬件上,因此,启动和运行可能相当便宜,扩展也很经济。扩展性能很容易,因为所需要做的就是购买更多的服务器,并将它们连接到平台上。

MapReduce的独特之处

  • MapReduce可以比关系型数据库更好地处理某些问题。例如解析文本、处理来自网络日志的大量信息和读取巨大的原始数据源。当所需数据很少时,不必浪费时间和空间去把一堆原始数据加载到企业数据仓库中。MapReduce非常适合这种场合。在将数据加载到数据库之前,它将裁剪掉多余的数据。
  • 在许多场合,MapReduce被用作提取、加载和转换(ETL)工具。ETL工具读取一组数据源,执行一组格式化或重组步骤,然后把结果加载到目标数据源中。为了支持分析,MapReduce从运营系统中取得数据,将其加载到关系型数据库中,以便访问数据。同样,MapReduce经常被用以处理大数据源,以有意义的方式进行总结,并将结果传递给分析过程或者是数据库。

MapReduce的挑战

  • MapReduce不是一个数据库,所以缺乏安全、索引、查询或流程优化器、其他作业执行方面的历史视角,以及任何其他现有数据的知识。
  • MapReduce有精确定义每个进程所创建数据类型的责任。包括数据结构,一切都或多或少地需要自定义编码。
  • MapReduce将每个作业视为一个实体。它不知道其他可能同时进行的处理。
  • MapReduce是一个相对较新的概念。没有多少人知道该如何配置、编码或者很好地使用它。

随着时间的推移,MapReduce将发展成熟,越来越多的人会了解其不断变化的优点和缺点。

交叉参考 第5讲会详细讨论MapReduce。

 

 

总体情况

 

博客的容量巨大,并且包含了许多不相关的数据。MapReduce可以用于“大海捞针”,寻找少数有价值的内容。想象一项MapReduce处理工作,它实时审阅日志以确定需要立即采取的行动;例如,找到所有查看产品却没有购买的顾客。MapReduce进程可以识别那些需要后续电子邮件联系的顾客列表,并且立即向某个进程发送此信息以生成电子邮件。要完成这项工作,无须先将原始数据加载到关系数据库并运行查询,而是直接将任务的结果加载到数据库中。这样,在捕捉数据的同时也捕获了客户的历史记录,可以跨时间和跨业务单元执行更多的战略分析。在这个例子里,识别出的用户列表被加载到数据库中,以记录曾向其发送电子邮件的事实。这就能够同时跟踪和监控电子邮件历史,就像每次电子邮件营销活动中所做的那样。

4.3.3 利用Hadoop YARN管理资源和应用

作业调度与跟踪是Hadoop MapReduce的必要组成部分。Hadoop的早期版本支持基本的作业和任务跟踪系统,但随着Hadoop所支持工作组合的改变,旧的调度程序已无法满足要求。特别是,旧调度程序无法管理非MapReduce作业,不能优化集群利用率。因此,研发人员设计了新功能来解决这些缺点,并提供更多的灵活性、效率和性能。

YARN(Yet Another Resource Negotiator,另一种资源协调程序)是Hadoop的核心服务,它提供了两个主要的服务:

  • 全局资源管理(ResourceManager);
  • 每个应用程序的管理(ApplicationMaster)。

资源管理器(ResourceManager)是主服务,用于控制Hadoop集群中每个节点上的节点管理器。调度器(Scheduler)包含在资源管理器中,它的唯一任务就是把系统资源分配给运行中的特定应用程序(任务),但它不监控或跟踪应用程序的状态。

所需的所有系统信息存储于资源容器中。它包含了详细的CPU、磁盘、网络和在节点及集群上运行应用程序所必需的其他重要资源属性。每个节点都有一个节点管理器(NodeManager),保存在集群的全局资源管理器中。节点管理器监视应用程序CPU、磁盘、网络和内存的使用率,并将其报告给资源管理器。对于每一个运行在节点上的应用程序,都有一个对应的应用程序管理器(ApplicationMaster)。如果需要更多的资源来支持运行中的应用程序,该应用程序管理器会通知节点管理器,由节点管理器代表应用程序与资源管理器(调度器)协商额外的资源。节点管理器还负责在它的节点中跟踪作业状态和进程。

4.4 利用HBase存储数据

HBase是Apache软件基金会的一个项目,按照Apache软件许可证v2.0发表。

HBase是一个分布式的非关系型(列式)数据库,采用HDFS作为其持久化存储。它仿照Google的BigTable(存储非关系型数据的一种有效形式)进行了修改,可以容纳非常大的表(有数十亿列/行),因为它是在Hadoop的商品化硬件(也叫商品化服务器)集群上的一个层次。HBase提供了大数据的随机、实时读/写访问。它是高度可配置的,具有很高的灵活性,能高效地处理大量数据。HBase可以在多个方面帮助你面对大数据的挑战。

技术材料

 

列式数据库是指以列形式(而不是行形式)存储数据的数据库管理系统。HBase使用Hadoop文件系统和MapReduce引擎满足其核心数据存储需求。

由于HBase是一个列式数据库,所有的数据都以行和列形式存储在表中,这与关系型数据库管理系统相似。行和列的交叉点称为单元格。

HBase表和关系型数据库表的重要区别之一是版本控制。每一个单元格的值包含了一个“版本”属性,这不过是一个唯一识别单元格的时间戳。版本控制跟踪单元格中的变化,使得在必要时检索任何版本的内容成为可能。

HBase的实现为数据处理提供了多种有用的特性。它是可扩展、稀疏、分布式、持久化的,并支持多维映射。HBase利用行和列的键值对和时间戳,对映射进行索引。连续的字节数组用于表示映射中的每一个值。当你的大数据实施需要随机、实时的读/写数据访问时,HBase是一个很好的解决方案。它经常被用来为后续分析处理存储结果。

HBase的特性

HBase的重要特性包括了以下内容。

  • 一致性:虽然HBase不是原子性、一致性、隔离性、持久性(ACID)的实现,但提供了强一致性的读写操作。这意味着只要你不需要RDBMS支持的“额外特性”(如完整的事务支持或者有类型列),就可以将它用于高速的需求。
  • 分片:HBase提供透明的、自动化分割以及内容的再分布,因为数据是由所支持的文件系统分布的。
  • 高可用性:通过区域服务器的实施,HBase支持局域网和广域网的故障转移和恢复。其核心是一个主服务器,负责检测区域服务器和集群的所有元数据。
  • 客户端API:通过Java API,HBase提供了编程访问。
  • IT运营支持:为了增进运营洞察力,HBase提供了一套内置的网页。HBase的实现最适合于:
    • 大容量、增量型数据采集和处理。
    • 实时信息交换(如消息等)。
    • 经常变化的内容服务。

技术材料

 

ACID属性解释如下。

  • 原子性(atomicity):确保数据库操作中的所有事务要么全部发生,要么全部不发生。

  • 一致性(consistency):确保数据库中的修改遵循已定义的规则和约束。

  • 隔离性(isolation):确保数据库操作中的并发事务是以隔离的方式执行的。

  • 持久性(durability):确保完成数据库操作后,对数据库的变更得以体现并留存。

4.5 使用Hive查询大型数据库

Hive是一个建立在Hadoop核心元素(HDFS和MapReduce)上的批处理数据仓库层。它为了解SQL的用户提供了一个简单的类SQL实现,称为HiveQL,而且不牺牲通过mappers和reducers进行的访问。利用Hive,你可以两者兼得:对结构化数据进行类SQL访问,以及利用MapReduce进行复杂的大数据分析。

与大多数数据仓库不同,Hive不是设计用于快速响应查询的。事实上,查询可能需要几分钟甚至几小时,这取决于它的复杂性。因此,最好将Hive用于数据挖掘和不需要实时行为的深层次分析。因为它依赖于Hadoop的基础,所以非常具有扩展性、可伸缩性和弹性——这是普通数据仓库所不具备的特性。

Hive使用以下3种数据组织的机制。

  • :Hive表与RDBMS表是一样的,都由行和列组成。因为Hive是基于Hadoop HDFS层之上的,表被映射到文件系统的目录中。此外,Hive支持在其他原生文件系统中存储的表。
  • 分区:一个Hive表可以支持一个或多个分区。这些分区映射到底层文件系统的子目录中,代表了整个表的数据分布;例如,如果表名叫作autos(汽车),有一个键值12345和一个制造商值Icon,分区的路径就会是/hivewh/autos/kv=12345/Icon。
  • 桶:把表中的数据划分成桶(bucket)。桶在底层文件系统的分区目录中存储为文件。桶基于表列的哈希值。在前面的例子中,你可能有一个被称为Focus的桶,包含了所有福特福克斯汽车的属性。

Hive的元数据存储在外部的元数据库中。元数据库是一个包含了Hive模式详细描述的关系型数据库,包括列类型、所有者、键和值的数据、表统计信息等。元数据库能够将目录数据和Hadoop生态系统中其他元数据服务进行同步。

如前所述,Hive支持一种叫作HiveQL的类SQL语言。通过在单个HiveQL语句中共享输入数据,它还支持多重查询和插入。Hive可扩展支持用户自定义的聚合、列变换以及嵌入式MapReduce脚本。

知识检测点2

 

选出下列哪个Hadoop组件提供了对结构化数据的类SQL访问,并利用MapReduce进行复杂的大数据分析。

a.Hive

b.HDFS

c.HBase

d.MapReduce

4.6 与Hadoop生态系统的交互

Hadoop的强大功能和灵活性对于软件开发人员是显而易见的,这主要是因为Hadoop生态系统是“开发人员为开发人员而构建的”;然而,并不是每个人都是软件开发者。

编写程序或使用专业查询语言不是与Hadoop生态系统交互的唯一途径。重要的是,软件开发人员之外的其他人(如IT基础设施团队)也使用Hadoop。已经引入的各种工具和技术使得非软件开发人员团队也能访问Hadoop生态系统。Pig和Pig Latin、Sqoop、Zookeeper、Flume和Oozie是这些工具和技术中的一部分。

4.6.1 Pig和Pig Latin

Pig是为了让非开发人员更好地接近和使用Hadoop而设计的。Pig是一个交互式(基于脚本)的执行环境,支持Pig Latin—— 一种用来表达数据流的语言。Pig Latin语言支持输入数据的加载和处理,通过一系列的操作,转换输入的数据并产生期望的输出。

Pig的执行环境有以下两种模式。

  • 本地:所有的脚本都在单一的机器上运行。不需要Hadoop MapReduce和HDFS。
  • Hadoop:又称为MapReduce模式,所有的脚本运行在一个给定的Hadoop集群上。

Pig会在后台建立一组映射和归约作业。用户无需关注代码的编写、编译、打包和提交到RDBMS。Pig Latin语言提供一种抽象的方式,将焦点放在数据上(而不是关注自定义的软件程序结构),从大数据中获取答案。Pig还使原型制作变得非常简单;例如,你可以在大数据环境的一个小型表示上运行一个Pig脚本,以确保在将所有数据提交处理之前收到预期的结果。

Pig程序可以以3种不同的方式运行,它们都与本地和Hadoop模式兼容。

  • 脚本:就是一个包含Pig Latin命令的文件,通过.pig后缀(如file.pig或myscript.pig)来识别。这些命令由Pig解释并顺序执行。
  • Grunt:一种命令解释程序。可以在Grunt命令行上输入Pig Latin,Grunt将代表你执行该命令。这对于原型制作和因果分析来说是非常有用的。
  • 嵌入式:Pig程序可以作为Java程序的一部分来执行。Pig Latin有很丰富的语法。它支持操作者进行以下操作:
    • 数据加载和存储;
    • 数据流化;
    • 数据过滤;
    • 数据分组和连接;
    • 数据排序;
    • 数据合并和分离。

Pig Latin还支持各种类型、表达式、函数、诊断操作、宏以及文件系统命令。如果想要获得更多的例子,可访问Apache.org 中的Pig网站:http://pig.apache.org。这是一个丰富的资源网站,可以为你提供所有的细节。

4.6.2 Sqoop

许多企业将信息存储在关系型数据库管理系统和其他数据存储中。所以它们需要一种在这些数据存储和Hadoop之间移动数据的手段。虽然有时候必须实时移动数据,但在大多数情况下,需要整批地加载和卸载数据。

Sqoop(SQL-to-Hadoop)工具提供了从非Hadoop数据存储中提取和转换数据,使之成为Hadoop可用的形式,然后将数据加载到HDFS的能力。这个过程叫作ETL。将数据送入Hadoop对于使用MapReduce处理是至关重要的,而从Hadoop抓取数据进入外部数据源供其他种类的应用程序使用也同样关键。Sqoop可以完成这些工作。和Pig类似,Sqoop是一个命令行解释程序。你可以在命令解释程序中输入Sqoop命令,由其逐条执行。Sqoop中有以下4种关键功能。

  • 批量导入:Sqoop可以将单个表或者整个数据库导入HDFS。数据存储在本地目录中,文件存储在HDFS中。
  • 直接输入:Sqoop可以将SQL(关系型)数据库直接导入和映射到Hive和HBase中。
  • 数据交互:Sqoop可以生成Java类,使你可以用编程的方式与数据进行交互。
  • 数据导出:在目标数据库特性的基础上,使用目标表的定义,Sqoop可以从HDFS中直接导出数据到关系型数据库中。

Sqoop的工作是通过查看想要导入的数据库,并为源数据选择恰当的导入功能进行的。在识别输入之后,它为表格(或数据库)读取元数据,并为你的输入需求创建类定义。你可以强制Sqoop进行非常有选择性的工作,这样可以在输入之前就获取你所寻找的列,而不是在完整的输入后再寻找数据,从而节省了相当多的时间。将数据从外部数据库导入至HDFS,事实上是由Sqoop在后台所创建的MapReduce作业执行的。

Sqoop是另一个适合非程序员的有效工具。另一个值得注意的重要方面是,它对HDFS和MapReduce等底层技术的依赖。

4.6.3 Zookeeper

在攻克大数据难题的方面,Hadoop中最好的技术是其“分而治之”的能力。在问题被分解之后,问题的解决依赖于采用跨Hadoop集群的分布式和并行处理技术的能力。对于一些大数据问题,交互式工具无法提供做出业务决策所需的洞察力或时效性。在这种情况下,你需要创建分布式应用,以解决大数据问题。Zookeeper是Hadoop协调这些分布式应用程序的所有元素的手段。

下面的例子将有助于理解Zookeeper。建立一个大规模分布式系统要求不同的服务能够发现对方;例如,一个Web服务可能需要找到处理查询的缓存服务。此外,并不强制每一个服务都有一个固定的主IP地址。在这种情况下,你可以在50个节点上启动同一个服务,其中任何一个都可能被选为首先启动的主机。为了实现这样的通信,这些服务必须相互通信。一个服务的所有节点如何相互通信,并找到另一个服务的主机IP地址?单一服务的所有节点如何达成关于选举主机的共识?

Zookeeper是管理上述问题,并在一个中央位置存储少量信息的服务。它充当协调器,并提供对该信息的访问。Zookeeper还提供了高可用性。

作为一种技术来说,Zookeeper很简单,但使用了强大的特性。可以说,如果没有它,即便能够建立弹性、容错的分布式Hadoop应用程序,过程也将十分困难。下面是Zookeeper的一些功能。

  • 进程同步:Zookeeper协调集群中多个节点的启动和停止。这确保所有的处理按预定的顺序发生。只有在整个进程组完成之后,才能进行后续处理。
  • 配置管理:Zookeeper可以用来发送配置属性到集群中任何一个或所有节点。当处理依赖于在所有节点上可用的特定资源时,Zookeeper确保了配置的一致性。
  • 自我选举:Zookeeper了解集群的构造,可以将一个“领导”的角色分配给其中一个节点。这个领导/主节点代表集群处理所有的客户请求。如果领导节点失效,会从剩余节点中选举另一个领导。
  • 可靠的消息传输:尽管Zookeeper中的工作负载是松耦合的,你仍然需要在集群节点之中实现特定于分布式应用的通信。
  • 队列/顺序一致性:Zookeeper提供了一个发布/订阅功能,允许创建队列。即使在节点失效的情况下,该队列也能保证消息的传递。

因为Zookeeper管理服务于单一分布式应用程序的节点组,所以最好跨机架实施。这与集群自身(机架内)的需求是完全不同的,原因很简单:Zookeeper必须在集群以上的级别执行、实现弹性和容错。记住,Hadoop集群已经具有容错性了。Zookeeper只需要关心自身的容错性。

4.6.4 Flume

Apache Flume是一个分布式系统,用于将不同来源上存储的大量数据传输到一个单一的集中式数据库。Flume是可靠的系统,能够高效地收集、组织和移动数据。

Flume可以用来传输各种数据,包括网络流量、通过社交网络产生的数据、商业交易数据和电子邮件等。

现有的数据嵌套工具值得考虑,而不是编写一个应用程序来将数据移动至HDFS,因为它们涵盖了许多共同的需求。Apache Flume是一个用于将大量数据流移动到HDFS的流行系统。非常常见的用例之一是,从一个系统(例如,一堆Web服务器)收集日志数据,将其聚集到HDFS中供今后分析。

4.6.5 Oozie

Oozie是Apache Hadoop用来管理和处理已提交作业的开源服务。Oozie基于工作流/协调,也支持可扩展性可伸缩性。它是一个数据仓库服务,组织运行在Hadoop上的作业之间的依赖性,包括不同平台的HDFS、Pig和MapReduce。

Apache Oozie包括以下两个重要的组件。

  • 工作流引擎:工作流引擎可以存储和运行不同类型的Hadoop作业(包括MapReduce、Pig和Hive)组成的工作流。
  • 协调器引擎:协调器引擎根据预定义日程和数据可用性运行工作流作业。

Oozie的设计具有可伸缩性,可以在Hadoop集群中管理大量的工作流。Oozie使得失败工作流的重新运行更易处理,因为不需要浪费时间运行工作流已完成的部分。Oozie以集群中服务的形式运行,客户端提交工作流定义,可立即(或以后)运行。按照Oozie的说法,工作流是一个动作节点控制流节点的有向无环图。

  • 动作节点执行工作流任务,如在HDFS中移动文件、运行MapReduce、流化、Pig或者Hive作业、执行Sqoop导入。
  • 控制流节点通过实现条件逻辑(依据早期动作节点的结果选择不同的执行分支)或并行执行等结构,管理操作之间的工作流执行。

当工作流完成时,Oozie可以向客户端发起一个HTTP回调,通知工作流的状态。它也可能在每次工作流进入或退出动作节点时,收到回调。图1-4-4显示了Oozie的工作流。

图1-4-4 Oozie工作流

工作流有 3 个控制节点和一个动作节点:一个开始(start)控制节点、一个映射-归约(map-reduce)动作节点、一个杀死(kill)控制节点和一个结束(end)控制节点。节点之间允许转换。

总体情况

 

在不断变化的Hadoop生态系统和所支持的商业发行版中,新的工具和技术不断引入,现有的技术正在改善,还有一些技术由于更好的替代者出现而退役。这是开源技术最大的优势之一。

另一个优势是,商业公司采用开源技术。这些公司改进了产品,通过适度的成本提供支持和服务,使得它们更好地为每个人服务。这就是Hadoop生态系统进化的方式,也是它成为应对大数据挑战的出色选择的原因。

 

知识检测点3

 

1.Sqoop是如何工作的?

2.Zookeeper有哪些能力?

练习

基于图的问题

下图给出了在Hadoop中使用HBase和Hive的订单处理周期。

从上图中,确定必须运行哪些工具来过滤订单数据,并从中抽取出属于已交付订单的数据。

多项选择题

选择正确的答案。在下面给出的“标注你的答案”里将正确答案涂黑。

1.HDFS通过将大文件分解成较小分片的方式进行工作。这些文件的较小分片被称为:

  a.块

  b.名称节点

  c.数据节点

  d.命名空间

2.数据节点还提供什么消息来检测和保证名称节点和数据节点之间的连通性?

  a.管道

  b.分解

  c.心跳

  d.映射

3.元数据被定义成:

  a.关于数据的数据

  b.模式框架

  c.链接分析

  d.文本挖掘

4.MapReduce环境特别能够处理什么?

  a.非结构化文本

  b.结构化文本

  c.图像

  d.网络日志

5.“另一种资源协调者”(YARN)所提供的主要服务是什么?选择所有符合的答案。

  a.全局资源管理  

  b.记录阅读器

  c.MapReduce引擎

  d.按程序管理

6.确定Hive用于数据组织的机制。选择所有符合的答案。

  a.表

  b.分区

  c.元数据

  d.桶

7.Pig程序有哪些不同的运行方式?选择所有符合的答案。

  a.脚本

  b.Grunt

  c.嵌入式

  d.排序数据

8.Zookeeper的功能是什么?选择所有符合的答案。

  a.进程同步

  b.自我选举

  c.数据交互

  d.数据导出

9.数据分析师Steve需要一个ETL工具来读取源数据、格式化数据,并加载已提取和已格式化了的数据到目标数据源中。他应该使用下列哪种工具?

  a.MapReduce

  b.HBase

  c.Zookeeper

  d.Oozie

10.为了分析数据,Jennifer需要一个系统,从许多不同的来源收集、聚集和移动大量的日志数据到一个集中的数据存储中。你建议Jennifer使用下列哪个工具?

  a.MapReduce

  b.Zookeeper

  c.Oozie

  d.Flume

标注你的答案(把正确答案涂黑)

测试你的能力

1.讨论MapReduce是如何工作的,并解释MapReduce的优势和劣势。

2.区分Oozie与Zookeeper,并讨论Oozie工作流。

备忘单

  • Hadoop:Hadoop的开发是因为它代表了使公司能轻松管理大量数据的最务实方式。
  • Hadoop分布式文件系统:一个可靠的、高带宽的、低成本的数据存储集群,便于跨机器的相关文件管理。
  • MapReduce引擎:MapReduce算法的一个高性能并行/分布式数据处理实现。
  • Hadoop MapReduce:Hadoop MapReduce是由Apache Hadoop项目开发和维护的算法实现。
  • 利用Hadoop生态系统,构建大数据基础设施。
  • 利用HadoopYARN管理资源和应用。
    • 全局资源管理(资源管理器)。
    • 按应用程序管理(应用程序管理器)。
  • 将HBase用于和非关系型数据库的连接。
    • 一致性:HBase提供了强大的一致性读和写,并不基于最终的一致性模型。
    • 分片:HBase提供了内容的透明、自动分割和重分布。
    • 高可用性:通过区域服务器的实施,HBase支持局域网和广域网的故障转移和恢复。
    • 客户端API:HBase提供了通过Java API的可编程访问。
  • 利用Hive查询大型数据库。
    • 表:Hive构建在Hadoop HDFS层之上,表被映射到文件系统中的目录。
    • 分区:一个Hive表可以支持一个或多个分区。
    • 桶:数据可以划分成桶。在底层文件系统中,桶在分区目录中作为文件存储。
  • 与Hadoop生态系统交互。
    • Pig和Pig Latin。
    • 脚本:就是一个含有Pig Latin命令的文件,该命令通过.pig的后缀来识别。
    • Grunt:Grunt是一个命令行解释器。
    • 嵌入式:Pig程序可以作为Java程序的一部分来执行。
    • Sqoop。
    • Zookkeeper。
    • Flume。
    • Oozie。

目录

相关技术

推荐用户