关于Hadoop: 大数据术语章节外文翻译资料

 2021-12-12 21:35:49

英语原文共 166 页

4

关于Hadoop:

大数据术语章节

很明显你已经读了第一部分,但是我们有预感,在拿起这本书之前,你已经明白了这一点——在我们的信息中有许多尚未开发的潜力。到目前为止,分析这些庞大的数据要花费的成本太高,令人望而却步。当然,也有惊人的机会成本的损失,与不利用这一信息有关,因为这种有待分析的信息的潜力几乎是无限的。我们在这里说的不只是无处不在的“竞争差异化”营销口号,我们谈论的是创新,发现,想象,以及几乎所有的其他能让你明天的工作方式大不相同的事情。从你今天的工作方式中,你会得到更多切实的结果和见解。

很多人和组织都试图从很多不同的方向解决这个问题,就大数据分析的流行程度而言,目前处于领先地位的是一个名为Hadoop的开源项目。Hadoop是IBM的 “InfoSphere ”平台的一部分。很简单,BigInsights包含、增强和扩展Hadoop开源框架,提供企业级的安全性、治理、可用性、与现有数据存储的集成、简化和改进开发人员生产力、可伸缩性、分析工具包等工具。

当我们写这本书的时候,我们认为引入一个关于Hadoop本身的章节是很有用的,因为BigInsights是(而且永远是)基于它主分支的核心Hadoop发行版,并且Apache Hadoop项目的向后兼容性将始终保持。在短期内,用Hadoop编写的应用会一直运行在BigInsights平台上。无论如何,这章的目的不是让您成为Hadoop专家,但是在阅读完它之后,您将了解核心Hadoop技术背后的基本概念,而且您可能在与饮水机旁的非技术人员交谈时显得很懂行。如果您对Hadoop一窍不通,这一章很适合您。

实话实说:Hadoop的发展历程

Hadoop (http://hadoop op.apache.org/)是一个是用Java编写的

Apache软件基础中的顶级的Apache项目,您可以将Hadoop视为一种专门为特大规模的数据操作而设计的分布式集群文件系统构建的计算环境。

Hadoop的灵感来自于谷歌在其谷歌(分布式)文件系统上的工作(GFS)和分布式计算系统编程模型,将工作分解为映射器和还原器任务,把数据跨集群服务器存储,实现大规模并行性。分布式计算系统并不是一个新概念(IBM于2007年10月与谷歌合作对分布式计算系统和谷歌文件系统中的大规模互联网问题进行了联合研究);然而,Hadoop已经使其实际应用于更广泛的用途。与事务性系统不同,Hadoop被设计成通过一个高度可扩展的分布式批处理系统扫描大型数据集来获取结果,Hadoop不是关于快速响应和实时存储,或者频繁热切的事务速度的;它是关于发现和使曾经几乎不可能的事情从可扩展和分析的角度成为可能的;Hadoop方法是围绕一个“函数到数据”模型构建的而非“数据到函数”;在这个模型中,因为有太多的数据,所以分析程序会被发送到数据中去(我们将在本章后面详细介绍)。

Hadoop是一个非常奇怪的名称(您将在Hadoop的世界中发现许多奇怪的名称)。现在,只要阅读Hadoop上的任何一本书,它基本上就都会以这个项目吉祥物的名字开始,我们也从这里开始吧。Hadoop实际上是创始人Doug Cutting的儿子给他的毛绒玩具大象起的名字。在给他的项目起名字时,Cutting 显然是在寻找一些容易说的东西,而且没有什么特别的含义,他儿子的玩具的名字似乎很合适。Cutting 的命名方法引发了一系列古怪的名字(你很快就会发现),但说实话,我们喜欢它。(当我们写这本书的时候,我们在心里回想起一些与我们孩子的玩具有关的名字,我们很高兴是Cutting 而不是我们来命名这项技术的;Pinky和Squiggles听起来不像是好的选择。

Hadoop通常被认为有两个部分:一个文件系统(Hadoop分布式文件系统)和一个编程范例(MapReduce)——稍后将详细介绍。Hadoop的关键组件之一是环境中的冗余。不仅数据冗余地存储在集群的多个位置,而且编程模型可以预测到故障,并通过在集群中的各个服务器上运行部分程序自动解决故障。由于这种冗余,可以将数据及其相关编程分布在一个非常大的商品组件集群中。众所周知,普通硬件组件将会失败(尤其是当您拥有大量硬件组件时),但是这种冗余提供了容错性和Hadoop集群自我修复的能力。这允许Hadoop跨大型廉价机器集群扩展工作负载,以处理大数据问题。

有许多hadoop相关的项目,我们在本书中介绍了其中一些(处于规模大小的考虑,有些我们没有介绍)。hadoop相关的一些项目比较引人注目,包括:Apache Avro(用于数据序列化),Cassandra 和HBase(数据库),Chukwa(一个大型分布式系统监控系统专门设计的),Hive (提供特别的sql查询,数据聚合和汇总),Mahout(创造学习库),Pig (高级Hadoop编程语言,它提供了一个数据流语言和并行计算的执行框架),ZooKeeper (为分布式应用程序提供协调服务),等等。

Hadoop的组件

Hadoop项目由三个部分组成:Hadoop分布式文件系统(HDFS)、Hadoop MapReduce模型和Hadoop Common。要理解hadoop,您必须理解文件系统的底层基础结构和MapReduce编程模型。让我们首先讨论Hadoop的文件系统,它允许应用程序跨多个服务器运行。

Hadoop分布式文件系统

要理解如何将Hadoop集群扩展到数百(甚至数千)个节点,必须从Hadoop分布式文件系统(HDFS)开始。hadoop集群中的数据被分解成更小的块(称为blocks),并分布在整个集群中。通过这种方式,映射和reduce函数可以在较大数据集的较小子集上执行,这提供了大数据处理所需的可伸缩性。

Hadoop的目标是在一个非常大的集群中使用常用的服务器,其中每个服务器都有一组便宜的内部磁盘驱动器。为了获得更高的性能,MapReduce尝试将工作负载分配给存储要处理的数据的这些服务器。这就是所谓的数据局部性。(由于这一原则,不建议在Hadoop环境中使用存储区域网络(SAN)或网络附加存储(NAS)。对于使用SAN或NAS的Hadoop部署,额外的网络通信开销会导致性能瓶颈,尤其是对于较大的集群。现在花一点时间,考虑一个1000台机器的集群,其中每台机器有三个内部磁盘驱动器;然后考虑由3000个廉价驱动器 1000个廉价服务器组成的集群的失败率!在这里,我们可能已经达成共识了:您在Hadoop集群中将要经历的组件无故障运行时间(MTTF)很可能类似于您孩子外套上的拉链:它将会失败(很有诗意的是,拉链似乎只有在您真正需要它们的时候才会失败)。Hadoop很酷的一点是,MTTF指标与廉价硬件相关联的现实已经得到了很好的理解(如果您愿意,这是一个设计点),Hadoop的部分优势在于它具有内置的容错和故障补偿功能。HDFS也是如此,数据被划分为块,这些块的副本存储在Hadoop集群中的其他服务器上。也就是说,一个单独的文件实际上存储为更小的块,在整个集群中的多个服务器之间复制。

想想一个包含美国每个人的电话号码的文件;姓氏以a开头的人可能存储在服务器1上,而姓氏以B开头的人可能存储在服务器2上,等等。在Hadoop环境中,电话簿的各个部分将存储在集群中,为了重建整个电话簿,您的程序需要集群中每个服务器的块。为了在组件出故障时实现依然可用,HDFS默认情况下将这些小块复制到两个额外的服务器上(参见图4-1)

图4-1 数据块如何写入HDFS的示例。请注意(默认情况下)如何将每个块写入三次,并将至少一个块写入不同的服务器机架以实现冗余。

(这种冗余可以根据每个文件或整个环境增加或减少;例如,开发Hadoop集群通常不需要任何数据冗余。这种冗余提供了多种好处,最明显的是更高的可用性。此外,这种冗余允许Hadoop集群将工作分解成更小的块,并在集群中的所有服务器上运行这些作业,以获得更好的可伸缩性。最后,您将获得数据局部性的好处,这在处理大型数据集时非常重要。我们将在本章后面详细介绍这些重要的好处。

HDFS中的数据文件被划分为块,Apache Hadoop中这些块的默认大小是64 MB,对于较大的文件,块大小越大越好,因为这将大大减少名称节点(NameNode)所需的元数据量。预期的工作负载是另一个需要考虑的因素,因为非顺序访问模式(随机读取)在块大小较小的情况下会执行得更好。在BigInsights中,默认块大小是128 MB,因为根据IBM Hadoop工作人员的经验,最常见的部署涉及到具有顺序读取的更大的文件和工作负载。这比用于其他环境的块大小大得多——例如,典型的文件系统的磁盘上块大小为512字节,而关系数据库通常存储的数据块大小在4 KB到32 KB之间。请记住Hadoop被设计用来扫描非常大的数据集,因此使用非常大的块大小是有意义的,这样每个服务器可以同时处理更大的数据块。跨集群的协调有很大的开销,因此本地处理大块工作而不向其他节点发送数据的能力有助于提高性能和开销与实际工作的比率。回想一下,每个数据块默认存储在三个不同的服务器上;在Hadoop中,这是通过HDFS在幕后工作来实现的,以确保至少有两个块存储在单独的服务器机架上,以提高在丢失整个服务器机架时的可靠性。

Hadoop的所有数据放置逻辑都由一个名为NameNode的特殊服务器管理。这个NameNode服务器跟踪HDFS中的所有数据文件,比如块存储在哪里,等等。NameNode的所有信息都存储在内存中,这允许它为存储操作或读取请求提供快速响应时间。现在,我们知道您在想什么:如果整个Hadoop集群只有一个NameNode,那么您需要知道将此信息存储在内存中会创建一个单点故障点(SPOF)。因此,我们强烈建议您为NameNode选择的服务器组件要比Hadoop集群中的其他服务器更加健壮,以最小化失败的可能性。此外,我们还强烈建议您对存储在NameNode中的集群元数据进行常规备份。此元数据中的任何数据丢失都将导致集群中相应数据的永久丢失。在编写本书时,Hadoop的下一个版本(版本0.21)包含了定义BackupNode的功能,它可以作为NameNode的冷备份。

图4-1表示一个由三个数据块组成的文件,其中一个数据块(表示为block_n)复制到另外两个服务器上(表示为block_n#39;和block_n#39;)。第二个和第三个副本存储在单独的物理机架上,位于单独的节点上,以提供额外的保护。我们将详细介绍HDFS如何存储数据块,以便简要介绍这个Hadoop组件。Hadoop MapReduce应用程序框架的伟大之处在于,与以前的网格技术不同,开发人员不必处理NameNode的概念和数据存储的位置——Hadoop可以为您做到这一点。当你启动Hadoop工作,应用程序必须读取数据并开始工作MapReduce编程任务,Hadoop将联系NameNode,找到保存着需要访问的部分数据的服务器来开始任务,然后把你的应用程序在这些节点上本地运行。(我们将在下一节介绍MapReduce的详细信息。)类似地,在创建文件时,HDFS将自动与NameNode通信,以便在特定服务器上分配存储并执行数据复制。需要注意的是,在处理数据时,不需要MapReduce代码直接引用NameNode。当作业被调度到Hadoop集群中的不同服务器上时,与NameNode的交互最容易完成。这大大减少了作业执行期间与NameNode的通信,从而有助于提高解决方案的可伸缩性。总之,NameNode处理描述文件存储位置的集群元数据;MapReduce作业处理的实际数据从不流经NameNode。

在本书中,我们将讨论IBM如何将企业功能引入Hadoop,这是IBM利用其数十年的经验和研究来利用其无处不在的企业IBM通用并行文件系统(GPFS)来减轻这些担忧的一个特定领域。GPFS最初只在SAN技术上运行。2009年,GPFS被扩展到在一个无共享集群(称为GPFS- snc)上运行,并用于Hadoop等用例。与HDFS相比,GFPS-SNC提供了许多优势,其中之一解决了前面提到的NameNode问题。在GPFS-SNC中实现的Hadoop运行时不必处理这个特殊的SPOF问题。GPFS-SNC允许您构建更可靠的Hadoop集群(还有其他好处,比如更容易管理和性能)。

除了对单个NameNode表示关注外,一些客户还注意到HDFS不是UNIX (POSIX)兼容文件系统的可移植操作系统接口。这意味着,在与文件交互时可能使用的几乎所有熟悉的命令(复制文件、删除文件、写入文件、移动文件等等)都可以通过HDFS以不同的形式使用(在语法上存在差异,在某些情况下,功能上存在限制)。为了解决这个问题,您必须编写自己的Java应用程序来执行一些功能,或者培训IT人员学习不同的HDFS命令来管理和操作文件系统中的文件。我们将在本章的后面详细讨论这个主题,但是我们希望您注意,这是BigInsights为Hadoop环境提供的用于大数据处理的另一个“企业环绕”。GPFS-SNC完全符合ieee定义的POSIX标准,该标准定义了API、shell和实用程序接口,这些接口提供了不同风格UNIX(如AIX、Apple OSX和HP-UX)之间的兼容性。

MapReduce的基础知识

MapReduce是Hadoop的核心。正是这种编程范式支持Hadoop集群中数百或数千台服务器之间的大规模可伸缩性。对于那些熟悉集群扩展数据处理解决方案的人来说,MapReduce的概念非常容易理解。对于刚接触这个主题的人来说,它可能有点难以理解,因为它通常不是人们以前接触过的东西。如果您是Hadoop MapReduce作业的新手,不要担心:我们将用一种能够让您快速了解它的方式来描述它。

MapReduce这个术语实际上是指Hadoop程序执行的两个不同的任务。第一个是映射(map)作业,它获取一组数据并将其转换为另一组数据,其中单个元素被分解

资料编号:[5600]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。