大数据猩球:海量数据处理实践指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-13 11:20:18

点击下载

作者:唐李洋

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

大数据猩球:海量数据处理实践指南

大数据猩球:海量数据处理实践指南试读:

前言

《大数据猩球:海量数据处理实践指南》以实用、可操作的视角解释了大数据,以经过检验的最佳实践为中心,向读者展示了Hadoop的实战智慧。

读者将对大数据形成有用的、概念性的认识。数据就是洞察力,关键是理解大数据的可扩展性(scalability):即无限规模的数据取决于相异的枢轴点(pivot point)。我们会教你如何运用这些枢轴点进行数据操作。

最后,本书提供了真实数据和实际问题的具体示例,将概念和实际应用相结合。

本书梗概《大数据猩球:海量数据处理实践指南》讲述了如何使用简单、有趣、精致的工具,解决大规模数据处理中的重要问题。

从超大规模的事件流中发现模式是一件重要而且困难的事情。大部分时候,地震是不会发生的——但是模式能够根据平静时期的数据提前预测是否会发生地震。如何在数以亿计的事件中逐个对比数万亿个连续事件,从而发现极少数事关紧要的事件呢?一旦找到了这些模式,如何实时地做出响应?

我们选用大家都能够理解的案例,而且它们具有普适性,能够适用于其他问题解决的场景。我们的目的是向读者提供:

● 大规模思考的能力——使读者深刻理解如何将一个问题分解为有效的数据转换(data transformation),以及集群中的数据流动如何影响这些转换。

● 用详细的示例代码在场景中展现如何使用Hadoop解决有意思的问题。

● 关于有效软件开发的建议和最佳实践。

本书的全部示例都采用真实数据,用来描述很多问题领域中的模式,包括:

● 创建统计概要。

● 识别数据中的模式和组。

● 批量查找、过滤和移动记录。

本书强调简洁性和趣味性,特别吸引初学者,但同样适合有经验的人。你会发现本书为有创造力的分析人员提供了最强大、最有价值的方法。我们的座右铭是“机器人是廉价的,而人是重要的”:编写可读的、可扩展的代码,然后再确定是否需要一个较小的集群。本书的代码改编自Infochimps和Data Syndrome解决企业级业务问题的程序,这些简单的高级转换能够满足我们的需求。

很多章节都配有练习。如果你是初学者,我们强烈建议你每一章都至少完成一个练习。在面前摆本书看,不如边看书边写代码学得更深入。本书官网上有一些简单的解决方案和结果数据集。

本书适合谁

我们希望你至少熟悉一种编程语言,并不一定非要是Python或Pig。熟悉SQL会有些帮助,但这不是必需的。如果有商务智能方面的数据工作经历或分析背景,会很有帮助。

更重要的是,你应该有一个需要大数据工具箱来解决问题的实际项目——这个问题要求在多个机器之间横向扩展(scale out)。如果你没有这样的项目,但又确实很想学习大数据工具箱,看一下第3章,我们采用棒球数据。这是一个探索起来很有趣的大型数据集。

本书不适合谁

本书不是《Hadoop权威指南》(Hadoop:The Definitive Guide,已出版),而更像是《Hadoop固执指南》(Hadoop:A Highly Opinionated Guide)。本书唯一提到裸Hadoop API的地方就是,“大多数情况下,不要使用它”。我们推荐以某种空间不高效的格式存储数据,还有很多时候我们鼓励以小部分的性能损失换取程序员更多的愉悦。本书不厌其烦地强调编写可扩展的代码,却只字不提编写高性能的代码,因为获取成倍加速比的最佳途径是使用双倍数量的机器。

这是因为,对大部分人来说,集群的成本远远低于数据科学家使用它的机会成本。如果数据不仅大,还很巨大(比如100TB),而且我们期望在生产线上不断地运行作业,那就需要考虑其他权衡了。但是,即使是PB级规模,仍然要按照我们介绍的方式来开发。

本书涉及Hadoop的提供和部署问题,以及一些重要的设置。但是并没有真正介绍任何高级算法、操作或调优问题。

本书没有包括的内容

目前我们不讨论Hive。对于熟悉Hive的人,Pig脚本能够天然地翻译成Hive。

本书讲的是互联网上没有的东西。我们不准备花时间介绍基础教程和核心文档。另外,我们也不会涉及以下内容:

● Hadoop的安装或维护。

● 其他类MapReduce的平台(Disco、Spark等),或其他框架(Wukong、Scalding、Cascading)。

● 有时候我们用到了Unix测试工具包(cut/wc/etc),但只是作为工具临时用一下。我们并不会深入讲述这些东西,有其他O'Reilly书籍详细介绍这些实用工具。

理论:黑猩猩和大象

从第2章开始,你会看到黑猩猩和大象公司(Chimpanzee and Elephant Company)热情的员工们。大象记性好(内存很大),易于进行大规模迁移。通过大象类比组装数据,有助于理解移动超大量数据的易点和难点。黑猩猩聪明,但是一次只能考虑一件事情。它们展示了如何在单个关注点下实现简单的转换,以及如何在不占用更多空间的情况下分析PB级的数据。

黑猩猩和大象结合起来,共同隐喻了如何处理大规模数据。

实战:Hadoop

Doug Cutting说,Hadoop是“大数据操作系统的内核”。Hadoop是最主流的批处理方案,既有商用企业支持,也拥有庞大的开源社区,能够在每一个平台和云上运行——短期内这种形势并不会改变。

本书中的代码无须改动即可在你的笔记本电脑或企业级Hadoop集群上运行。我们使用docker提供一个虚拟Hadoop集群,你可以在自己的笔记本上运行。

示例代码

使用Git签出(check out)本书的源代码:

运行上述命令以后,示例代码在examples/ch_XX目录下。

关于Python和MrJob

我们选择Python有两个原因。第一,作为一种高级语言(除了Python,还有Scala、R等),Python既拥有完美的Hadoop框架又具备广泛的支持。更重要的是,Python是一种可读性很强的语言。本书提供的示例代码能够清晰地映射到其他高级语言,而且我们推荐的方法在任何语言中都是可用的。

具体来说,我们选择Python语言框架MrJob。这是一个广泛使用的开源框架。

其他有益读物

●《Pig编程》:作者Alan Gates,全面介绍Pig Latin语言及Pig工具。强烈推荐此书。

●《Hadoop权威指南》:作者Tom White,必备书籍。不要试图一下子完全学会——Hadoop最强大的地方正是它最简单的地方——但是在你的应用程序上线之前常常需要参考这本书。

●《Hadoop管理手册》:作者Eric Sammer——最好有其他人替你看这本书,不过运行Hadoop集群的人,最终还是需要这本指南来配置和管理大型生产线集群。

读者反馈

请联系我们!如果有问题、建议或意见,请通过问题跟踪(issue tracker:http://bit.ly/bd4c_issues)分享。如果想直接联系我们,请发送邮件至flip@infochimps.com和russell.journey@gmail.com(作者)——欢迎抄送至meghan@oreilly.com(我们从未不耐烦的编辑)。还可以通过Twitter联系我们:

● Flip Kromer(@mrflip)

● Russell Jurney(@rjurney)

印刷约定

本书使用的印刷约定如下:

斜体字

表示新术语、URL、邮件地址、文件名及文件扩展名。

等宽字体

用于程序代码,以及在段落中表示变量名、函数名、数据库、数据类型、环境变量、语句及关键字等程序元素。

等宽粗体

表示由用户键入的命令或文本。

等宽斜体

表示应当替换成用户自定义值或上下文值的文本。这个图标表示技巧或建议。这个图标表示一般注解。这个图标表示警告或注意。

中文版书中切口以“”表示原书页码,便于读者与原英文版图书对照阅读,本书的索引中所列的页码为原英文版页码。

使用示例代码

补充材料(示例代码、练习等)的下载地址为http://github.com/bd4c/big_data_for_chimps-code。本书旨在帮助你完成工作。一般来说,如果书中提供了示例代码,可以在你的程序和文档中直接使用,而不需要联系我们获得使用许可,除非你需要大规模仿造(reproduce)这些代码。例如,使用本书的几个代码片段写个程序,不需要获得许可;而出售或分发O'Reilly图书附带光盘中的示例代码,则需要许可。引用本书及书中的示例代码回答某个问题,不需要许可;而在产品文档中大量使用书中的示例代码,则需要许可。

我们感激您注名出处,但不强制要求。注名出处通常包括书名、作者、出版社和ISBN。例如,“《大数据猩球:海量数据处理实践指南》,Philip Kromer和Russel Jurney,O'Reilly,2015,978-1-491-92394-8”。

如果你觉得你对示例代码的使用方式可能需要获得许可,请随时联系我们permissions@oreilly.com。®

Safari在线书库Safari在线图书(http://safaribooksonline.com)是应需而变的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发者、Web 设计师、商务人士和创意精英都可以将 Safari 在线图书作为他们的调研、解决问题、学习和认证的主要资料来源。

Safari在线图书对于组织团体、政府机构和个人提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sam、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGarw-Hill、Jones & Bartlett、Course Technology 及其他数十家出版社的上千种图书、培训视频和正式出版前的书稿。要了解更多关于 Safari Books Online 的信息,请访问我们的网站。

联系我们

关于本书的建议,可以与下面的出版社联系。

美国:

O'Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们将关于本书的勘误表、示例以及其他信息列在本书的网页上,地址是:http://bit.ly/d eveloping-web-components。

如要评论本书或咨询关于本书的技术问题,请发邮件到bookquestions@oreilly.com。

了解更多关于本书、课程、会议和新闻的信息,请访问我们的网站:http://www.oreilly.com。

我们的Facebook:http://facebook.com/oreilly

我们的Twitter:http://twitter.com/oreillymedia

我们的YouTube视频:http://www.youtube.com/oreillymedia第一部分 入门:理论和工具

第1~4章介绍Hadoop和MapReduce的基础知识,以及使用Hadoop进行大规模数据处理的相关工具。

首先,介绍Hadoop和MapReduce,然后深入讲解MapReduce的工作原理。接下来,我们介绍数据集,即棒球统计数据。最后介绍Apache Pig,后面我们使用这个工具处理数据。

第二部分我们将讨论处理数据时使用的分析模式。第1章 Hadoop基础

Hadoop是一头强大和复杂的野兽。开始使用这套系统的时候会很困惑,所以这一章我们专门讨论启动任务和管理数据必备的最小知识集。这里我们尽量使问题简单化。我们只介绍最基本的Hadoop模式、选项和配置,当然还有其他更多杂乱的、甚至危险的模式、选项和配置。优化主要来自于设计高效的工作流,更重要的是减少计算时间。

这一章讨论两件事:一是Hadoop的基本工作原理;二是在作业执行过程中,如何在集群中移动数据和计算的物理直觉。

掌握Hadoop的关键在于对Hadoop集群中的数据移动有一个直觉性的物理理解。将数据从一个机器转移到另一个机器——甚至从磁盘上的一个位置转移到另一个位置——是极其耗费成本的,绝大多数情况下,这决定了作业的成本。我们从原理上介绍Hadoop如何在计算节点之间管理数据和分配任务,从而使数据迁移成本最小;我们将通过比喻来讲故事,接着给出一个贯穿整个生命周期的示例作业。更重要的是,我们展示了如何读取作业的Hadoop仪表盘信息,以便理解作业的成本以及为什么需要这些成本。这一章的目的是对Hadoop分发任务和数据有个基本的理解,并且能够实际运行一个作业。随着后面运行的作业越来越多,你的直觉将得到强化。

Hadoop能做什么?为什么我们要学习Hadoop?Hadoop使得存储和处理大规模数据成为可能。的确,Apache Hadoop正处于大数据潮流之中。Hadoop分布式文件系统(HDFS)通过可承担得起的商业机器为超大规模数据(PB级甚至更大)提供廉价的存储能力。在Hadoop之前,还没有一个能够存储TB和PB级数据而且很容易访问处理的地方。Hadoop改变了这一切。

通过这本书,我们将教你如何操作Hadoop,不过首先你需要理解Hadoop文件系统和MapReduce共同构成的计算平台的基本知识。为此,我们首先介绍一下黑猩猩和大象公司的朋友们,通过他们的故事帮助你直观地理解Hadoop是如何提出并解决问题的。黑猩猩和大象创业

几年前,为人粗鲁的黑猩猩JT和一丝不苟的母象Nanette,这两个好朋友决定创业。黑猩猩只爱坐在键盘面前处理和生成文本。大象则在存储和检索信息方面具有惊人的能力,还可以搬运巨大量的货物。这些技能的结合打动了当地一家出版社,使他们签到了第一份合同,于是黑猩猩(Chimpanzee)和大象(Elephant)股份有限公司(简称C&E)就这么诞生了。

出版社的项目是将莎士比亚的著作翻译成人类已知的每一种语言,所以JT和Nanette设计了以下工作模式。他们建了很多小隔间,每个小隔间配有一张桌子供大象使用和几张桌子供黑猩猩使用,还有一个命令中心,JT和Nanette在那里协调工作。

对大规模系统来说,团队中的每一个成员都要承担一定的责任。黑猩猩的任务是读取一组段落,然后用一种新语言把相应的文本敲出来。他们的头儿JT负责将这些段落分配给黑猩猩们,管理那些旷工的和请假的员工,以及向客户汇报工作进展。图书馆员大象的任务是使卷保持整齐,这些卷存储着需要翻译的段落或已经翻译完成的结果。Nanette是图书馆长,她保存着一个卡片目录,记录了每一本书的位置,以及每一本书在各个卷中存储的特征信息。

员工每天上班的时候都要跟JT签到,JT将当天的翻译手册以及需要翻译的段落名称发放给大家。在工作当天,黑猩猩将工作进度汇报给JT;如果分配的段落都翻译完成,JT就指定下一个段落给他们翻译。

如果在工作时间去小隔间溜达,你会看到黑猩猩和大象之间的合作非常高效,翻译专家几乎没有浪费一秒钟。一旦JT告诉黑猩猩下一个需要翻译的段落,大象就会收到消息。黑猩猩在新卷上翻译,然后交还给相应的图书馆员搭档,并通知JT分配下一个段落。图书馆员将这个卷传真给其他小隔间的另外两个图书馆员,这样就保存了三个副本,这是Nanette的模式要求。

反过来,图书馆员告诉Nanette他们手上有哪份翻译的哪个副本,以便Nanette维护卡片目录。当客户请求一个已翻译段落时,Nanette就从三个副本里面读取,并确保它们是一致的。这样,每个黑猩猩的工作都可以进行比对以保证完整性,即使小隔间的通信断了,仍然可以获取文档。

事实上,各个黑猩猩之间的工作是相互独立的——不需要备忘、会议,也不需要从其他部门请求文档——这便是C&E公司第一份完美的合同。但是,JT和Nanette正在构思新点子,让上百万个黑[1]猩猩加入工作,这对于现代纸质办公来说可能是一个激进的过程。不久,JT和Nanette就有机会尝试一下了,遥远的北方有个客户有个非常非常大的问题要解决(17页“黑猩猩和大象拯救圣诞节”一节我们再继续讲故事)。Map-Only作业:逐个处理记录

你可能会猜到,黑猩猩和大象组织文件和工作流的方式,与Hadoop底层处理数据和计算的方式正好一致。现在,我们就通过一个例子详细说明这个过程。

树形结构上的袋(bag)表示事务型关系数据库系统。这通常就是Hadoop数据处理能够强化或替代的系统。作为“NoSQL”(Not Only SQL)运动的一部分,Hadoop作为一个通用工具,已经超越了关系型数据库,而且使用分布式系统更适合某些特定的问题。

Nanette就是Hadoop中的NameNode(http://bit.ly/namenode),负责管理HDFS。它存储文件系统的树形结构目录(即卡片目录),以及指向每个文件的数据节点的引用(即图书馆员)。注意,Nanette处理的数据是存储三份的。HDFS中的数据被复制三次,以确保可靠性。在一个足够大的系统中(比如一个包含上千个节点的PB级Hadoop集群),每天都有节点失效。这时,HDFS为那个失效节点上的所有文件自动创建新的副本。

JT是JobTracker(http://bit.ly/hadoop_jt),负责协调各个MapReduce任务的工作,从而形成一个紧密的系统。JobTracker负责启动和监控MapReduce作业的各个任务,运行MapReduce作业的节点就是存储该作业所需数据的节点,作业直接从节点读取数据。MapReduce作业分为map阶段,该阶段读取数据;以及reduce阶段,该阶段按键(key)聚合数据然后再处理。现在,我们介绍只有map阶段的作业(第2章再介绍reduce)。

注意,在YARN(Hadoop 2.0)中,术语叫法不一样。JobTracker叫资源管理器(ResourceManager),节点由节点管理器(NodeManager)管理。通过容器运行任意应用程序。在YARN中,MapReduce只是其中一种计算框架,而Hadoop是一个应用程序平台。是不是糊涂了?我们也是。YA R N的术语有些糟糕,所以我们还是使用Hadoop 1.0的术语。Pig Latin Map-Only作业

为了解释Hadoop是如何工作的,我们先来看一个最简单的例子。也许我们不像JT的黑猩猩那么聪明会多种语言,但我们还是可[2]以将文字翻译成一种称为Igpay Atinlay的语言。对于不熟悉的人来说,下面是将标准英语翻译成Igpay Atinlay的方法(http://bit.ly/pig_latin):

● 如果单词以一个或多个辅音字母开头,将这些字母移至单词末尾并加上“ay”。例如,“happy”就变成“appy-hay”,“chimp”变成“imp-chay”,“yes”变成“es-yay”。

● 如果单词以元音开头,则只需加上音节“way”。例如,“another”变成“another-way”,“elephant”变成“elephant-way”。

例1-1是我们的第一个Hadoop作业,该程序将纯文本文件翻译成Igpay Atinlay。这是一个简化到极致的Hadoop作业,只完成一件事情,就是对每条记录进行最底限的处理。这样便于学习如何启动作业,如何跟进作业进程,以及Hadoop将性能指标(例如运行时指标和数据迁移量)汇报给谁。而且,正因为这个程序简单,所以它成了最重要的一个运行示例。从输入和输出规模上来说,没有别的Hadoop作业比这个例子更合适。所以记住,这是一个重要的参照指标。

我们用Python编写这个例子。Python是数据科学领域的通用语言。可以从命令行运行这个例子处理文本文件,也可以在集群上处理PB级数据(只要有PB级文本需要处理,都应该使用集群)。

示例1-1:Igpay Atinay翻译器的伪代码

最好在数据子集本地执行作业,因为这样更快更容易。要在本地运行Python脚本,在终端输入以下命令行:

输出应该是这样的:

这就是本地执行的结果。下面我们看一下在真实Hadoop集群上运行是什么样子,这个时候大象要加入了。除了更快更容易以外,在数据子集本地执行作业还有一些别的原因。例如:抽取一个有意义的表的子集,也会强制你熟悉数据以及它们之间的关系。由于所有数据都在本地,你会形成这样的习惯——首先思考“用这些数据我能做些什么”,然后才考虑“怎么做才高效”。通常新手都会反过来考虑,但是经验告诉我们,为子集做前期投资而不是一上来就考虑效率问题,这样做几乎总是值得的。创建Docker Hadoop集群

我们准备了一个docker映像,用来创建Hadoop环境。在这个环境中,已经安装了Pig和Python,还有已经挂载到磁盘的示例数据。首先下载代码。如果不熟悉Git,请前往Git首页(http://git-scm.com/)并安装Git。然后,克隆Git示例代码库(https://github.com/bd4c/big_data_for_chimps-code),其中包含docker设置:

你会看到:

现在我们要安装VirtualBox(https://www.virtualbox.org/),从VirtualBox网站(http://bit.ly/dl_virtual box)下载。接下来,安装Boot2Docker,地址为https://docs.docker.com/installation/。从操作系统菜单运行Boot2Docker,会启动一个shell(OS X或Linux),如图1-1所示。图1-1 OS X上的Boot2Docker

运行Ruby脚本设置docker环境,需要Ruby 1.9.2或2.0以上版本。回到之前的命令窗口,在bd4c-code目录下,安装设置docker映像所需的Ruby库:

接下来,切换到cluster目录,再运行一次bundle install:

现在,在运行docker守护进程的VirtualBox虚拟机(VM)上运行docker命令。首先设置从localhost到docker VM的转发端口,在cluster目录下:

当docker VM出现故障的时候,需要在VirtualBox中做些调整。增加VM的RAM数量,至少为4GB。从操作系统的GUI运行VirtualBox,就会看到如图1-2所示的界面。图1-2 VirtualBox内的Boot2Docker

选择Boot2Docker VM,然后单击设置(Settings)按钮。如图1-3所示,选择系统标签页,调整RAM至不少于4096MB。单击确定(OK)按钮。

现在关闭VirtualBox,再备份Boot2Docker:

这条命令输出以下结果:图1-3 VirtualBox图形界面

现在,将以下行添加到~/.bashrc文件中(请用你的主目录替换):

然后,更新当前环境变量:

检查这些环境变量是否设置完成,以及docker客户端能否连接:

现在,我们已经做好创建docker映像的准备了。这可能需要很久,所以敲完命令行去煮杯咖啡吧。

完成之后,就会看到:

现在我们需要在Boot2Docker虚拟机上做一些设置。将终端切换到Boot2Docker窗口,或者重新启动一个shell来运行boot2docker ssh,然后运行以下命令:

现在,退出Boot2Docker shell。

回到cluster目录,启动cluster帮助,在container中设置主机名:

如果一切顺利,在Boot2Docker主机上运行cat/vat/lib/docker/hosts,就能看到很多信息。运行bundle exec rake ps,只显示host_filer的container信息。

接下来,设置示例数据。运行:

这个时候,运行bundle exec rake ps,会看到五个container全都处于停止状态。通过以下命令启动container:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载