
Tom White是最杰出的Hadoop专家之一。自2007年2月以来,Tom White一直是Apache Hadoop的提交者(committer),也是Apache软件基金会的成员。Tom是Cloudera的软件工程师,他是Cloudera的首批员工,对Apache和Cloudera做出了举足轻重的贡献。在此之前,他是一名独立的Hadoop顾问,帮助公司搭建、使用和扩展Hadoop。他是很多行业大会的专题演讲人,比如ApacheCon、OSCON和Strata。Tom在英国剑桥大学获得数学学士学位,在利兹大学获得科学哲学硕士学位。他目前与家人居住在威尔士。 译者简介 王海博士,解放军理工大学通信工程学院教授,博导,教研中心主任,长期从事无线自组网网络的设计与研发工作,主持国家自然科学基金、国家863计划课题等多项国 家级课题,近5年获军队科技进步二等奖1项,三等奖6项,作为第1发明人申请国家发明专利十余项,发表学术论文50余篇。 华东博士,现任南京医科大学计算机教研室教师,一直致力于计算机辅助教学的相关技术研究,陆续开发了人体解剖学网络自主学习考试平台、诊断学自主学习平台和面向执业医师考试的预约化考试平台等系统,并在各个学科得到广泛的使用,获得全国高等学校计算机课件评比一等奖和三等奖各一项。主编、副主编教材两部,获发明专利一项、软件著作权多项。 刘喻博士,长期从事软件开发、软件测试和软件工程化管理工作,目前任教于清华大学软件所。 吕粤海,长期从事军事通信网络技术研究与软件开发工作,先后通过华为光网络高级工程师认证、思科网络工程师认证。
本书结合理论和实践,由浅入深,全方位介绍了Hadoop 这一高性能的海量数据处理和分析平台。全书5部分24 章,第Ⅰ部分介绍Hadoop 基础知识,第Ⅱ部分介绍MapReduce,第Ⅲ部分介绍Hadoop 的运维,第Ⅳ部分介绍Hadoop 相关开源项目,第Ⅴ部分提供了三个案例,分别来自医疗卫生信息技术服务商塞纳(Cerner)、微软的人工智能项目ADAM(一种大规模分布式深度学习框架)和开源项目Cascading(一个新的针对MapReduce 的数据处理API)。本书是一本专业、全面的Hadoop 参考书和工具书,阐述了Hadoop 生态圈的新发展和应用,程序员可以从中探索海量数据集的存储和分析,管理员可以从中了解Hadoop 集群的安装和运维。
第Ⅰ部分 Hadoop基础知识第1章 初识Hadoop 31.1 数据!数据! 31.2 数据的存储与分析 51.3 查询所有数据 61.4 不仅仅是批处理 71.5 相较于其他系统的优势 81.5.1 关系型数据库管理系统 81.5.2 网格计算 101.5.3 志愿计算 111.6 Apache Hadoop发展简史 121.7 本书包含的内容 16第2章 关于MapReduce 192.1 气象数据集 192.2 使用Unix工具来分析数据 212.3 使用Hadoop来分析数据 222.3.1 map和reduce 232.3.2 Java MapReduce 242.4 横向扩展 312.4.1 数据流 312.4.2 biner函数 352.4.3 运行分布式的MapReduce作业 372.5 Hadoop Streaming 372.5.1 Ruby版本 382.5.2 Python版本 40第3章 Hadoop分布式文件系统 423.1 HDFS的设计 423.2 HDFS的概念 443.2.1 数据块 443.2.2 namenode和datanode 453.2.3 块缓存 463.2.4 联邦HDFS 473.2.5 HDFS的高可用性 473.3 命令行接口 503.4 Hadoop文件系统 523.5 Java接口 563.5.1 从Hadoop URL读取数据 563.5.2 通过FileSystem API读取数据 583.5.3 写入数据 613.5.4 目录 633.5.5 查询文件系统 633.5.6 删除数据 683.6 数据流 683.6.1 剖析文件读取 683.6.2 剖析文件写入 713.6.3 一致模型 743.7 通过distcp并行复制 76第4章 关于YARN 784.1 剖析YARN应用运行机制 794.1.1 资源请求 804.1.2 应用生命期 814.1.3 构建YARN应用 814.2 YARN与MapReduce 1相比 824.3 YARN中的调度 854.3.1 调度选项 854.3.2 容量调度器配置 874.3.3 公平调度器配置 894.3.5 延迟调度 934.3.5 主导资源公平性 944.4 延伸阅读 95第5章 Hadoop的I/O操作 965.1 数据完整性 965.1.1 HDFS的数据完整性 975.1.2 LocalFileSystem 985.1.3 ChecksumFileSystem 985.2 压缩 995.2.1 codec 1005.2.2 压缩和输入分片 1055.2.3 在MapReduce中使用压缩 1065.3 序列化 1095.3.1 Writable接口 1105.3.2 Writable类 1125.3.3 实现定制的Writable集合 1215.3.4 序列化框架 1255.4 基于文件的数据结构 1275.4.1 关于SequenceFile 1275.4.2 关于MapFile 1355.4.3 其他文件格式和面向列的格式 136第Ⅱ部分 关于MapReduce第6章 MapReduce应用开发 1416.1 用于配置的API 1426.1.1 资源合并 1436.1.2 变量扩展 1446.2 配置开发环境 1446.2.1 管理配置 1466.2.2 辅助类GenericOptionsParser,Tool和ToolRunner 1496.3 用MRUnit来写单元测试 1526.3.1 关于Mapper 1526.3.2 关于Reducer 1566.4 本地运行测试数据 1566.4.1 在本地作业运行器上运行作业 1566.4.2 测试驱动程序 1586.5 在集群上运行 1606.5.1 打包作业 1606.5.2 启动作业 1626.5.3 MapReduce的Web界面 1656.5.4 获取结果 1676.5.5 作业调试 1686.5.6 Hadoop日志 1716.5.7 远程调试 1736.6 作业调优 1746.7 MapReduce的工作流 1766.7.1 将问题分解成MapReduce作业 1776.7.2 关于JobControl 1786.7.3 关于Apache Oozie 179第7章 MapReduce的工作机制 1847.1 剖析MapReduce作业运行机制 1847.1.1 作业的提交 1857.1.2 作业的初始化 1867.1.3 任务的分配 1877.1.4 任务的执行 1887.1.5 进度和状态的更新 1897.1.6 作业的完成 1917.2 失败 1917.2.1 任务运行失败 1917.2.2 application master运行失败 1937.2.3 节点管理器运行失败 1937.2.4 资源管理器运行失败 1947.3 shuffle和排序 1957.3.1 map端 1957.3.2 reduce端 1977.3.3 配置调优 1997.4 任务的执行 2017.4.1 任务执行环境 2017.4.2 推测执行 2027.4.3 关于OutputCommitters 204第8章 MapReduce的类型与格式 2078.1 MapReduce的类型 2078.1.1 默认的MapReduce作业 2128.1.2 默认的Streaming作业 2168.2 输入格式 2188.2.1 输入分片与记录 2188.2.2 文本输入 2298.2.3 二进制输入 2338.2.4 多个输入 2348.2.5 数据库输入(和输出) 2358.3 输出格式 2368.3.1 文本输出 2368.3.2 二进制输出 2378.3.3 多个输出 2378.3.4 延迟输出 2428.3.5 数据库输出 242第9章 MapReduce的特性 2439.1 计数器 2439.1.1 内置计数器 2439.1.2 用户定义的Java计数器 2489.1.3 用户定义的Streaming计数器 2519.2 排序 2529.2.1 准备 2529.2.2 部分排序 2539.2.3 全排序 2559.2.4 辅助排序 2599.3 连接 2649.3.1 map端连接 2669.3.2 reduce端连接 2669.4 边数据分布 2709.4.1 利用JobConf来配置作业 2709.4.2 分布式缓存 2709.5 MapReduce库类 276第Ⅲ部分 Hadoop的操作第10章 构建Hadoop集群 27910.1 集群规范 28010.1.1 集群规模 28110.1.2 网络拓扑 28210.2 集群的构建和安装 28410.2.1 安装Java 28410.2.2 创建Unix 用户账号 28410.2.3 安装Hadoop 28410.2.4 SSH配置 28510.2.5 配置Hadoop 28610.2.6 格式化HDFS 文件系统 28610.2.7 启动和停止守护进程 28610.2.8 创建用户目录 28810.3 Hadoop配置 28810.3.1 配置管理 28910.3.2 环境设置 29010.3.3 Hadoop守护进程的关键属性 29310.3.4 Hadoop守护进程的地址和端口 30010.3.5 Hadoop的其他属性 30310.4 安全性 30510.4.1 Kerberos和Hadoop 30610.4.2 委托令牌 30810.4.3 其他安全性改进 30910.5 利用基准评测程序测试Hadoop集群 31110.5.1 Hadoop基准评测程序 31110.5.2 用户作业 313第11章 管理Hadoop 31411.1 HDFS 31411.1.1 永久性数据结构 31411.1.2 安全模式 32011.1.3 日志审计 32211.1.4 工具 32211.2 监控 32711.2.1 日志 32711.2.2 度量和JMX(Java管理扩展) 32811.3 维护 32911.3.1 日常管理过程 32911.3.2 委任和解除节点 33111.3.3 升级 334第Ⅳ部分 Hadoop相关开源项目第12章 关于Avro 34112.1 Avro数据类型和模式 34212.2 内存中的序列化和反序列化特定API 34712.3 Avro数据文件 34912.4 互操作性 35112.4.1 Python API 35112.4.2 Avro工具集 35212.5 模式解析 35212.6 排列顺序 35412.7 关于Avro MapReduce 35612.8 使用Avro MapReduce进行排序 35912.9 其他语言的Avro 362第13章 关于Parquet 36313.1 数据模型 36413.2 Parquet文件格式 36713.3 Parquet的配置 36813.4 Parquet文件的读/写 36913.4.1 Avro、Protocol Buffers和Thrift 37113.4.2 投影模式和读取模式 37313.5 Parquet MapReduce 374第14章 关于Flume 37714.1 安装Flume 37814.2 示例 37814.3 事务和可靠性 38014.4 HDFS Sink 38214.5 扇出 38514.5.1 交付保证 38614.5.2 复制和复用选择器 38714.6 通过代理层分发 38714.7 Sink组 39114.8 Flume与应用程序的集成 39514.9 组件编目 39514.10 延伸阅读 397第15章 关于Sqoop 39815.1 获取Sqoop 39815.2 Sqoop连接器 40015.3 一个导入的例子 40115.4 生成代码 40415.5 深入了解数据库导入 40515.5.1 导入控制 40715.5.2 导入和一致性 40815.5.3 增量导入 40815.5.4 直接模式导入 40815.6 使用导入的数据 40915.7 导入大对象 41215.8 执行导出 41415.9 深入了解导出功能 41615.9.1 导出与事务 41715.9.2 导出和SequenceFile 41815.10 延伸阅读 419第16章 关于Pig 42016.1 安装与运行Pig 42116.1.1 执行类型 42216.1.2 运行Pig程序 42316.1.3 Grunt 42416.1.4 Pig Latin编辑器 42416.2 示例 42516.3 与数据库进行比较 42816.4 PigLatin 42916.4.1 结构 43016.4.2 语句 43116.4.3 表达式 43616.4.4 类型 43716.4.5 模式 43816.4.6 函数 44316.4.7 宏 44516.5 用户自定义函数 44616.5.1 过滤UDF 44716.5.2 计算UDF 45016.5.3 加载UDF 45216.6 数据处理操作 45516.6.1 数据的加载和存储 45516.6.2 数据的过滤 45516.6.3 数据的分组与连接 45816.6.4 数据的排序 46316.6.5 数据的组合和切分 46516.7 Pig实战 46516.7.1 并行处理 46516.7.2 匿名关系 46616.7.3 参数代换 46716.8 延伸阅读 468第17章 关于Hive 46917.1 安装Hive 470Hive的shell环境 47117.2 示例 47217.3 运行Hive 47317.3.1 配置Hive 47317.3.2 Hive服务 47617.3.3 Metastore 47817.4 Hive与传统数据库相比 48017.4.1 读时模式vs.写时模式 48017.4.2 更新、事务和索引 48117.4.3 其他SQL—on—Hadoop技术 48217.5 HiveQL 48317.5.1 数据类型 48417.5.2 操作与函数 48717.6 表 48817.6.1 托管表和外部表 48817.6.2 分区和桶 49017.6.3 存储格式 49417.6.4 导入数据 49817.6.5 表的修改 50017.6.6 表的丢弃 50117.7 查询数据 50117.7.1 排序和聚集 50117.7.2 MapReduce脚本 50217.7.3 连接 50317.7.4 子查询 50617.7.5 视图 50717.8 用户定义函数 50817.8.1 写UDF 51017.8.2 写UDAF 51217.9 延伸阅读 516第18章 关于Crunch 51718.1 示例 51818.2 Crunch核心API 52118.2.1 基本操作 52218.2.2 类型 52718.2.3 源和目标 53018.2.4 函数 53218.2.5 物化 53518.3 管线执行 53718.3.1 运行管线 53818.3.2 停止管线 53918.3.3 查看Crunch计划 54018.3.4 迭代算法 54318.3.5 给管线设置检查点 54418.4 Crunch库 54518.5 延伸阅读 547第19章 关于Spark 54819.1 安装Spark 54919.2 示例 54919.2.1 Spark应用、作业、阶段和任务 55119.2.2 Scala独立应用 55219.2.3 Java示例 55319.2.4 Python示例 55419.3 弹性分布式数据集 55519.3.1 创建 55519.3.2 转换和动作 55719.3.3 持久化 56119.3.4 序列化 56319.4 共享变量 56419.4.1 广播变量 56419.4.2 累加器 56519.5 剖析Spark作业运行机制 56519.5.1 作业提交 56619.5.2 DAG的构建 56619.5.3 任务调度 56919.5.4 任务执行 57019.6 执行器和集群管理器 57019.7 延伸阅读 574第20章 关于HBase 57520.1 HBase基础 57520.2 概念 57620.2.1 数据模型的“旋风之旅” 57620.2.2 实现 57820.3 安装 58120.4 客户端 58420.4.1 Java 58420.4.2 MapReduce 58820.4.3 REST和Thrift 58920.5 创建在线查询应用 58920.5.1 模式设计 59020.5.2 加载数据 59120.5.3 在线查询 59520.6 HBase和RDBMS的比较 59820.6.1 成功的服务 59920.6.2 HBase 60020.7 Praxis 60120.7.1 HDFS 60120.7.2 用户界面 60220.7.3 度量 60220.7.4 计数器 60220.8 延伸阅读 602第21章 关于ZooKeeper 60421.1 安装和运行ZooKeeper 60521.2 示例 60721.2.1 ZooKeeper中的组成员关系 60821.2.2 创建组 60821.2.3 加入组 61121.2.4 列出组成员 61221.2.5 删除组 61421.3 ZooKeeper服务 61521.3.1 数据模型 61521.3.2 操作 61821.3.3 实现 62221.3.4 一致性 62421.3.5 会话 62621.3.6 状态 62821.4 使用ZooKeeper来构建应用 62921.4.1 配置服务 62921.4.2 可复原的ZooKeeper应用 63321.4.3 锁服务 63721.4.4 更多分布式数据结构和协议 63921.5 生产环境中的ZooKeeper 64021.5.1 可恢复性和性能 64121.5.2 配置 64221.6 延伸阅读 643第Ⅴ部分 案例学习第22章 医疗公司塞纳(Cerner)的可聚合数据 64722.1 从多CPU到语义集成 64722.2 进入Apache Crunch 64822.3 建立全貌 64922.4 集成健康医疗数据 65122.5 框架之上的可组合性 65422.6 下一步 655第23章 生物数据科学:用软件拯救生命 65723.1 DNA的结构 65923.2 遗传密码:将DNA字符转译为蛋白质 66022.3 将DNA想象成源代码 66123.4 人类基因组计划和参考基因组 66322.5 DNA测序和比对 66423.6 ADAM,一个可扩展的基因组分析平台 66623.7 使用Avro接口描述语言进行自然语言编程 66623.8 使用Parquet进行面向列的存取 66823.9 一个简单例子:用Spark和ADAM做k—mer计数 66923.10 从个性化广告到个性化医疗 67223.11 联系我们 673第24章 开源项目Cascading 67424.1 字段、元组和管道 67524.2 操作 67824.3 Taps,Schemes和Flows 68024.4 Cascading实践应用 68124.5 灵活性 68424.6 ShareThis中的Hadoop和Cascading 68524.7 总结 689附录A 安装Apache Hadoop 691附录B 关于CDH 697附录C 准备NCDC气象数据 699附录D 新版和旧版JavaMapReduce API 702
评论关闭。