编辑推荐

  

  《图灵程序设计丛书:Hadoop基础教程》揭开了Hadoop的神秘面纱,它着重讲解了如何应用Hadoop和相关技术搭建工作系统并完成任务。在读者明白这些内容之后,又介绍了如何使用云服务完成相同任务。《图灵程序设计丛书:Hadoop基础教程》从Hadoop的基本概念和初始设置入手,讲述了如何开发Hadoop程序,如何在数据规模增长的时候维持系统运行,《图灵程序设计丛书:Hadoop基础教程》涵盖了有效使用Hadoop处理实际问题所需用到的全部知识。

内容简介

  《图灵程序设计丛书:Hadoop基础教程》包括三个主要部分:第1~5章讲述了Hadoop的核心机制及Hadoop的工作模式;第6~7章涵盖了Hadoop更多可操作的内容;第8~11章介绍了Hadoop与其他产品和技术的组合使用。《图灵程序设计丛书:Hadoop基础教程》目的在于帮助读者了解什么是Hadoop,Hadoop是如何工作的,以及如何使用Hadoop从数据中提取有价值的信息,并用它解决大数据问题。

作者简介

  GarryTurkington,拥有14年行业经验,其大部分时间都专注于大型分布式系统的设计与实现。目前,他在ImproveDigital公司担任数据工程部副总裁和公司的首席架构师。他主要负责实现可以存储、处理并从公司海量数据中挖掘潜在价值的系统。在加入ImproveDigital公司之前,他曾在英国公司领导着几个软件开发团队,他们开发的系统用于处理为全世界所有对象创建的目录数据。在此之前,他还曾在英国和美国政府机关任职十年。
  他在北爱尔兰的贝尔法斯特女王大学获得了计算机学士和博士学位,并在美国斯蒂文斯理工学院获得系统工程的工程硕士学位。

  张治起,Hadoop技术爱好者和研究者,对Hadoop技术有非常深刻的认识和理解,热切关注Hadoop和相关大数据处理技术。有着丰富的实践经验,热衷于技术分享,致力于不断探索揭开Hadoop的神秘面纱,帮助更多初学者接触和理解Hadoop。

精彩书评

  ★GaryTurkington的《Hadoop基础教程》能够帮助读者很好地理解Hadoop,并学会如何使用Hadoop。
  ——读者

  ★《图灵程序设计丛书:Hadoop基础教程》讲解全面,解释清晰,对初学者来说是一个非常不错的选择。
  ——读者

目录

第1章绪论
1.1大数据处理
1.1.1数据的价值
1.1.2受众较少
1.1.3一种不同的方法
1.1.4Hadoop
1.2基于AmazonWebServices的云计算
1.2.1云太多了
1.2.2第三种方法
1.2.3不同类型的成本
1.2.4AWS:Amazon的弹性架构
1.2.5《图灵程序设计丛书:Hadoop基础教程》内容
1.3小结

第2章安装并运行Hadoop
2.1基于本地Ubuntu主机的Hadoop系统
2.2实践环节:检查是否已安装JDK
2.3实践环节:下载Hadoop
2.4实践环节:安装SSH
2.5实践环节:使用Hadoop计算圆周率
2.6实践环节:配置伪分布式模式
2.7实践环节:修改HDFS的根目录
2.8实践环节:格式化NameNode
2.9实践环节:启动Hadoop
2.10实践环节:使用HDFS
2.11实践环节:MapReduce的经典入门程序——字数统计
2.12使用弹性MapReduce
2.13实践环节:使用管理控制台在EMR运行WordCount
2.13.1使用EMR的其他方式
2.13.2AWS生态系统
2.14本地Hadoop与EMRHadoop的对比
2.15小结

第3章理解MapReduce
3.1键值对
3.1.1具体含义
3.1.2为什么采用键/值数据
3.1.3MapReduce作为一系列键/值变换
3.2MapReduce的HadoopJavaAPI
3.3编写MapReduce程序
3.4实践环节:设置classpath
3.5实践环节:实现WordCount
3.6实践环节:构建JAR文件
3.7实践环节:在本地Hadoop集群运行WordCount
3.8实践环节:在EMR上运行WordCount
3.8.10.20之前版本的JavaMapReduceAPI
3.8.2Hadoop提供的mapper和reducer实现
3.9实践环节:WordCount的简易方法
3.10查看WordCount的运行全貌
3.10.1启动
3.10.2将输入分块
3.10.3任务分配
3.10.4任务启动
3.10.5不断监视JobTracker
3.10.6mapper的输入
3.10.7mapper的执行
3.10.8mapper的输出和reducer的输入
3.10.9分块
3.10.10可选分块函数
3.10.11reducer类的输入
3.10.12reducer类的执行
3.10.13reducer类的输出
3.10.14关机
3.10.15这就是MapReduce的全部
3.10.16也许缺了combiner
3.11实践环节:使用combiner编写WordCount
3.12实践环节:更正使用combiner的WordCount
3.13Hadoop专有数据类型
3.13.1Writable和Writable-Comparable接口
3.13.2wrapper类介绍
3.14实践环节:使用Writable包装类
3.15输入/输出
3.15.1文件、split和记录
3.15.2InputFormat和RecordReader
3.15.3Hadoop提供的InputFormat
3.15.4Hadoop提供的RecordReader
3.15.5OutputFormat和Record-Writer
3.15.6Hadoop提供的OutputFormat
3.15.7别忘了Sequencefiles
3.16小结

第4章开发MapReduce程序
4.1使用非Java语言操作Hadoop
4.1.1HadoopStreaming工作原理
4.1.2使用HadoopStreaming的原因
4.2实践环节:使用Streaming实现Word-Count
4.3分析大数据集
4.3.1获取UFO目击事件数据集
4.3.2了解数据集
4.4实践环节:统计汇总UFO数据
4.5实践环节:统计形状数据
4.6实践环节:找出目击事件的持续时间与UFO形状的关系
4.7实践环节:在命令行中执行形状/时间分析
4.8实践环节:使用ChainMapper进行字段验证/分析
4.9实践环节:使用DistributedCache改进地点输出
4.10计数器、状态和其他输出
4.11实践环节:创建计数器、任务状态和写入日志
4.12小结

第5章高级MapReduce技术
5.1初级、高级还是中级
5.2多数据源联结
5.2.1不适合执行联结操作的情况
5.2.2map端联结与reduce端联结的对比
5.2.3匹配账户与销售信息
5.3实践环节:使用MultipleInputs实现reduce端联结
5.3.1实现map端联结
5.3.2是否进行联结
5.4图算法
5.4.1Graph
5.4.2图和MapReduce
5.4.3图的表示方法
5.5实践环节:图的表示
5.6实践环节:创建源代码
5.7实践环节:第一次运行作业
5.8实践环节:第二次运行作业
5.9实践环节:第三次运行作业
5.10实践环节:第四次也是最后一次运行作业
5.10.1运行多个作业
5.10.2关于图的终极思考
5.11使用语言无关的数据结构
5.11.1候选技术
5.11.2Avro简介
5.12实践环节:获取并安装Avro
5.13实践环节:定义模式
5.14实践环节:使用Ruby创建Avro源数据
5.15实践环节:使用Java语言编程操作Avro数据
5.16实践环节:在MapReduce中统计UFO形状
5.17实践环节:使用Ruby检查输出数据
5.18实践环节:使用Java检查输出数据
5.19小结

第6章故障处理
6.1故障
6.1.1拥抱故障
6.1.2至少不怕出现故障
6.1.3严禁模仿
6.1.4故障类型
6.1.5Hadoop节点故障
6.2实践环节:杀死DataNode进程
6.3实践环节:复制因子的作用
6.4实践环节:故意造成数据块丢失
6.5实践环节:杀死TaskTracker进程
6.6实践环节:杀死JobTracker
6.7实践环节:杀死NameNode进程
6.8实践环节:引发任务故障
6.9数据原因造成的任务故障
6.10实践环节:使用skip模式处理异常数据
6.11小结

第7章系统运行与维护
7.1关于EMR的说明
7.2Hadoop配置属性
7.3实践环节:浏览默认属性
7.3.1附加的属性元素
7.3.2默认存储位置
7.3.3设置Hadoop属性的几种方式
7.4集群设置
7.4.1为集群配备多少台主机
7.4.2特殊节点的需求
7.4.3不同类型的存储系统
7.4.4Hadoop的网络配置
7.5实践环节:查看默认的机柜配置
7.6实践环节:报告每台主机所在机柜
7.7集群访问控制
7.8实践环节:展示Hadoop的默认安全机制
7.9管理NameNode
7.10实践环节:为fsimage文件新增一个存储路径
7.11实践环节:迁移到新的NameNode主机
7.12管理HDFS
7.12.1数据写入位置
7.12.2使用平衡器
7.13MapReduce管理
7.13.1通过命令行管理作业
7.13.2作业优先级和作业调度
7.14实践环节:修改作业优先级并结束作业运行
7.15扩展集群规模
7.15.1提升本地Hadoop集群的计算能力
7.15.2提升EMR作业流的计算能力
7.16小结

第8章Hive:数据的关系视图
8.1Hive概述
8.1.1为什么使用Hive
8.1.2感谢Facebook
8.2设置Hive
8.2.1准备工作
8.2.2下载Hive
8.3实践环节:安装Hive
8.4使用Hive
8.5实践环节:创建UFO数据表
8.6实践环节:在表中插入数据
8.7实践环节:验证表
8.8实践环节:用正确的列分隔符重定义表
8.9实践环节:基于现有文件创建表
8.10实践环节:执行联结操作
8.11实践环节:使用视图
8.12实践环节:导出查询结果
8.13实践环节:制作UFO目击事件分区表
8.13.1分桶、归并和排序
8.13.2用户自定义函数
8.14实践环节:新增用户自定义函数
8.14.1是否进行预处理
8.14.2Hive和Pig的对比
8.14.3未提到的内容
8.15基于AmazonWebServices的Hive
8.16实践环节:在EMR上分析UFO数据
8.16.1在开发过程中使用交互式作业流
8.16.2与其他AWS产品的集成
8.17小结

第9章与关系数据库协同工作
9.1常见数据路径
9.1.1Hadoop用于存储档案
9.1.2使用Hadoop进行数据预处理
9.1.3使用Hadoop作为数据输入工具
9.1.4数据循环
9.2配置MySQL
9.3实践环节:安装并设置MySQL
9.4实践环节:配置MySQL允许远程连接
9.5实践环节:建立员工数据库
9.6把数据导入Hadoop
9.6.1使用MySQL工具手工导入
9.6.2在mapper中访问数据库
9.6.3更好的方法:使用Sqoop
9.7实践环节:下载并配置Sqoop
9.8实践环节:把MySQL的数据导入HDFS
9.9实践环节:把MySQL数据导出到Hive
9.10实践环节:有选择性的导入数据
9.11实践环节:使用数据类型映射
9.12实践环节:通过原始查询导入数据
9.13从Hadoop导出数据
9.13.1在reducer中把数据写入关系数据库
9.13.2利用reducer输出SQL数据文件
9.13.3仍是最好的方法
9.14实践环节:把Hadoop数据导入MySQL
9.15实践环节:把Hive数据导入MySQL
9.16实践环节:改进mapper并重新运行数据导出命令
9.17在AWS上使用Sqoop
9.18小结

第10章使用Flume收集数据
10.1关于AWS的说明
10.2无处不在的数据
10.2.1数据类别
10.2.2把网络流量导入Hadoop
10.3实践环节:把网络服务器数据导入Hadoop
10.3.1把文件导入Hadoop
10.3.2潜在的问题
10.4ApacheFlume简介
10.5实践环节:安装并配置Flume
10.6实践环节:把网络流量存入日志文件
10.7实践环节:把日志输出到控制台
10.8实践环节:把命令的执行结果写入平面文件
10.9实践环节:把远程文件数据写入本地平面文件
10.9.1信源、信宿和信道
10.9.2Flume配置文件
10.9.3一切都以事件为核心
10.10实践环节:把网络数据写入HDFS
10.11实践环节:加入时间戳
10.12实践环节:多层Flume网络
10.13实践环节:把事件写入多个信宿
10.13.1选择器的类型
10.13.2信宿故障处理
10.13.3使用简单元件搭建复杂系统
10.14更高的视角
10.14.1数据的生命周期
10.14.2集结数据
10.14.3调度
10.15小结

第11章展望未来
11.1《图灵程序设计丛书:Hadoop基础教程》回顾
11.2即将到来的Hadoop变革
11.3其他版本的Hadoop软件包
11.4其他Apache项目
11.4.1HBase
11.4.2Oozie
11.4.3Whir
11.4.4Mahout
11.4.5MRUnit
11.5其他程序设计模式
11.5.1Pig
11.5.2Cascading
11.6AWS资源
11.6.1在EMR上使用HBase
11.6.2SimpleDB
11.6.3DynamoDB
11.7获取信息的渠道
11.7.1源代码
11.7.2邮件列表和论坛
11.7.3LinkedIn群组
11.7.4Hadoop用户群
11.7.5会议
11.8小结
随堂测验答案

前言/序言

  《图灵程序设计丛书:Hadoop基础教程》目的在于帮助读者理解Hadoop,并用它解决大数据问题。能使用Hadoop这样的数据处理技术进行工作是令人激动的。对大规模数据集进行复杂分析的能力,曾一度被大公司和政府机构所垄断,而现在通过免费的OSS(opensourcesoftware,开源软件)即可获得这种能力。
  该领域看上去有些复杂,并且变化节奏很快,所以理解这方面的基本知识让人望而生畏。这就是《图灵程序设计丛书:Hadoop基础教程》诞生的意义所在,它帮助读者了解什么是Hadoop,Hadoop是如何工作的,以及如何使用Hadoop从数据中提取有价值的信息。
  除了解释Hadoop的核心机制,《图灵程序设计丛书:Hadoop基础教程》也会用几章内容来学习其他相关技术,这些技术要么用到了Hadoop,要么需要与Hadoop配套使用。我们的目标是,让读者不仅理解Hadoop是什么,还要理解如何在更宽泛的技术设施中使用Hadoop。
  《图灵程序设计丛书:Hadoop基础教程》中提到的另一种技术是云计算的应用,尤其是AWS(AmazonWebServices,亚马逊网络服务)产品。《图灵程序设计丛书:Hadoop基础教程》中,我们将展示如何使用这些服务来承载Hadoop工作负载。这就意味着,读者无需购买任何物理硬件,就能处理大规模数据。
  《图灵程序设计丛书:Hadoop基础教程》内容
  《图灵程序设计丛书:Hadoop基础教程》包括3个主要部分:第1~5章讲述了Hadoop的核心机制及Hadoop的工作模式;第6~7章涵盖了Hadoop更多可操作的内容;第8~11章介绍了Hadoop与其他产品和技术的组合使用。每章内容具体如下。
  第1章“绪论”。简要介绍了产生Hadoop和云计算的背景。如今看来,这些技术是如此重要。
  第2章“安装并运行Hadoop”。指导读者完成本地Hadoop集群的安装,并运行一些示例作业。为了进行对比,在托管于亚马逊服务的Hadoop上执行同样的任务。
  第3章“理解MapReduce”。深入研究Hadoop运行原理,揭示了MapReduce作业的执行方式,并展示了如何使用JavaAPI编写MapReduce应用程序。
  第4章“开发MapReduce程序”。通过对一个中等规模数据集案例的学习研究,演示如何着手处理和分析新数据源。
  第5章“高级MapReduce技术”。介绍一些更复杂的应用MapRedece解决问题的方法,Hadoop似乎并不直接适用于这些问题。
  第6章“故障处理”。详细检查Hadoop备受赞誉的高可用性和容错能力,通过强制结束进程和故意使用错误数据等方式故意制造破坏,以检验Hadoop在上述情况下的表现。
  第7章“系统运行与维护”。从更具操作性的角度讲解Hadoop,这对于Hadoop集群的管理人员非常有用。本章在介绍一些最佳做法的同时,也描述了如何预防最糟糕的操作性灾难,因此系统管理员可以高枕无忧了。
  第8章“Hive:数据的关系视图”。介绍ApacheHive,它允许使用类似SQL的语法对Hadoop数据进行查询。
  第9章“与关系数据库协同工作”。探讨Hadoop如何与现有数据库融合,特别是如何将数据从一个数据库移到另一个数据库。
  第10章“使用Flume收集数据”。介绍如何使用ApacheFlume从多个数据源收集数据,并传送至Hadoop这样的目的地。
  第11章“展望未来”。以更广泛的Hadoop生态系统概述结束《图灵程序设计丛书:Hadoop基础教程》,重点突出其他产品和技术的潜在价值。此外,还提供了一些如何参与Hadoop社区并获得帮助的方法。
  准备工作
  《图灵程序设计丛书:Hadoop基础教程》每章内容分别介绍该章用到的Hadoop相关软件包。但是,无论哪章内容都要用到运行Hadoop集群的硬件设施。
  在最简单的情况下,一台基于Linux的主机可作为运行几乎《图灵程序设计丛书:Hadoop基础教程》所有示例的平台。任何可运行Linux命令行的先进操作系统都可满足需求,文中假设读者使用的是Ubuntu的最新发布版。
  后面几章中的一些例子确实需要在多台机器上运行,所以读者需要拥有至少4台主机的访问权限。虚拟机也是可以的。虽然对于产品来讲,它们并非理想选择,但完全能够满足学习和研究的需要。
  《图灵程序设计丛书:Hadoop基础教程》中,我们还将研究AWS,读者可以在EC2实例上运行所有示例。《图灵程序设计丛书:Hadoop基础教程》中,我们将更多地着眼于AWS针对Hadoop的具体用途。任何人都可以使用AWS服务,但需要一张信用卡进行注册!
  目标读者
  我们认为,《图灵程序设计丛书:Hadoop基础教程》读者想要学习更多关于Hadoop的实践知识。《图灵程序设计丛书:Hadoop基础教程》的主要受众是,有软件开发经验却没有接触过Hadoop或类似大数据技术的人员。
  对于那些想知道如何编写MapReduce应用的开发者,假设他们能轻松地编写Java程序并熟悉Unix命令行接口。《图灵程序设计丛书:Hadoop基础教程》还包含几个Ruby程序示例,但这些通常只是说明语言的独立性,并不要求读者成为一位Ruby专家。
  对于架构师和系统管理员而言,《图灵程序设计丛书:Hadoop基础教程》也具有重大价值。它解释了Hadoop的工作原理,Hadoop在更广阔的系统架构中所处的位置,以及如何管理Hadoop集群。这类受众对一些复杂技术可能缺乏直接兴趣,如第4章和第5章。
  约定
  《图灵程序设计丛书:Hadoop基础教程》中,有几个经常出现的标题。
  为了明确说明如何完成一个程序或任务,《图灵程序设计丛书:Hadoop基础教程》使用下面的格式详细描述操作步骤。
  实践环节:标题
  (1)操作1
  (2)操作2
  (3)操作3
  通常,需要一些额外的解释帮助读者理解这些指令,因此紧随其后的是下面的原理分析。
  原理分析
  这部分内容对任务运行原理或刚完成的指令进行解释说明。
  《图灵程序设计丛书:Hadoop基础教程》还包含一些其他的学习辅助标记,包括:
  随堂测验:标题
  这是一些简短的多选题,目的在于帮助读者测试对相关内容的理解是否正确。
  一展身手:标题
  这部分内容设置一些实际问题,并为读者提供一些验证所学内容的方法。
  《图灵程序设计丛书:Hadoop基础教程》使用多种文字风格来区分不同种类的信息。下面是一些例子还有对其意义的解释。
  代码块设置如下:你也许注意到,我们使用Unix命令rm而不是DOSdel命令移除Drush目录。
  #*FineTuning
  #
  key_buffer=16M
  key_buffer_size=32M
  max_allowed_packet=16M
  thread_stack=512K
  thread_cache_size=8
  max_connections=300
  如果代码块的特定部分需要特别关注,相应行或内容会加粗显示。
  #*FineTuning
  #
  key_buffer=16M
  key_buffer_size=32M
  max_allowed_packet=16M
  thread_stack=512K
  thread_cache_size=8
  max_connections=300
  命令行的输入或输出会以如下形式显示。
  cd/ProgramData/Propeople
  rm-rDrush
  gitclone--branchmasterhttp://git.drupal.org/project/drush.git
  新词或者重要的词会以黑体字显示。以菜单或对话框为例,读者在屏幕上看到的内容如下所示“在SelectDestinationLocation(选择目的地址)页面,点击Next(下一步)按钮接受默认输出地址。”
  警告或重要提示会出现在这样的方框里。
  小窍门和技巧会以这样的形式出现。

其他推荐