logo
分类于: 其它

简介

Hadoop基础教程

Hadoop基础教程 0.0分

资源最后更新于 2020-03-20 17:46:38

作者:https://itpanda.net/book/380/download/376

译者:张治起

出版社:出版社人民邮电出版社

出版日期:2014-01

文件格式: epub, mobi, azw3

标签: 技术 计算机 入门 数据挖掘

简介· · · · · ·

本书揭开了hadoop的神秘面纱,它着重讲解了如何应用hadoop和相关技术搭建工作系统并完成任务。在读者明白这些内容之后,又介绍了如何使用云服务完成相同任务。从hadoop的基本概念和初始设置入手,讲述了如何开发hadoop程序,如何在数据规模增长的时候维持系统运行,涵盖了有效使用hadoop处理实际问题所需用到的全部知识。Garry Turkington(作者),拥有14年行业经验,其大部分时间都专注于大型分布式系统的设计与实现。目前,他在Improve Digital公司担任数据工程部副总裁和公司的首席架构师。他主要负责实现可以存储、处理并从公司海量数据中挖掘潜在价值的系统。在加入 Improve Digital公司之前,他曾在Amazon 英国公司领导着几个软件开发团队,他们开发的系统用于处理Amazon为全世界所有对象创建的目录数据。在此之前,他还曾在英国和美国政府机关任职十年。他在北爱尔兰的贝尔法斯特女王大学获得了计算机学士和博士学位,并在美国斯蒂文斯理工学院获得系统工程的工程硕士学位。张治起(译者),Hadoop技术爱好者和研究者,对Hadoop技术有非常深刻的认识和理解,热切关注Hadoop和相关大数据处理技术。有着丰富的实践经验,热衷于技术分享,致力于不断探索揭开Hadoop的神秘面纱,帮助更多初学者接触和理解Hadoop。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 前言
  2. 本书内容
  3. 准备工作
  4. 目标读者
  5. 约定
  6. 实践环节:标题
  7. 原理分析
  8. 随堂测验:标题
  9. 一展身手:标题
  10. 读者反馈
  11. 客户支持
  12. 下载示例代码
  13. 勘误表
  14. 关于盗版
  15. 问题
  16. 第1章 绪论
  17. 1.1 大数据处理
  18. 1.1.1 数据的价值
  19. 1.1.2 受众较少
  20. 1. 经典的数据处理系统
  21. 2. 制约因素
  22. 1.1.3  一种不同的方法
  23. 1. 条条大路通罗马:向外扩展
  24. 2. 不共享任何内容
  25. 3. 故障预期
  26. 4. 软件智能化,硬件傻瓜化
  27. 5. 移动处理程序,而非移动数据
  28. 6. 构建应用程序,而非基础架构
  29. 1.1.4 Hadoop
  30. 1. 感谢Google
  31. 2. 感谢Doug
  32. 3. 感谢Yahoo
  33. 4. Hadoop的组成部分
  34. 5. 公共构建模块
  35. 6. HDFS
  36. 7. MapReduce
  37. 8. 组合使用效果更佳
  38. 9. 公共架构
  39. 10. 优势与劣势
  40. 1.2 基于Amazon Web Services的云计算
  41. 1.2.1 云太多了
  42. 1.2.2 第三种方法
  43. 1.2.3 不同类型的成本
  44. 1.2.4 AWS:Amazon的弹性架构
  45. 1. 弹性计算云(EC2)
  46. 2. 简单存储服务(S3)
  47. 3. 弹性 MapReduce(EMR)
  48. 1.2.5 本书内容
  49. 双管齐下
  50. 1.3 小结
  51. 第2章 安装并运行Hadoop
  52. 2.1 基于本地Ubuntu主机的Hadoop系统
  53. 其他操作系统
  54. 2.2 实践环节:检查是否已安装JDK
  55. 原理分析
  56. 2.2.1 安装Hadoop
  57. 各版本的注意事项
  58. 2.3 实践环节:下载Hadoop
  59. 原理分析
  60. 2.4 实践环节:安装SSH
  61. 原理分析
  62. 2.4.1 配置并运行Hadoop
  63. 2.5 实践环节:使用Hadoop计算圆周率
  64. 原理分析
  65. 3种模式
  66. 2.6 实践环节:配置伪分布式模式
  67. 原理分析
  68. 配置根目录并格式化文件系统
  69. 2.7 实践环节:修改HDFS的根目录
  70. 原理分析
  71. 2.8 实践环节:格式化NameNode
  72. 原理分析
  73. 启动并使用Hadoop
  74. 2.9 实践环节:启动Hadoop
  75. 原理分析
  76. 2.10 实践环节:使用HDFS
  77. 原理分析
  78. 2.11 实践环节:MapReduce的经典入门程序——字数统计
  79. 原理分析
  80. 一展身手:在更大规模的文本上进行字数统计
  81. 通过浏览器查看Hadoop活动
  82. HDFS网络用户接口
  83. 2.12 使用弹性MapReduce
  84. 创建Amazon Web Services账号
  85. 1. 创建AWS账号
  86. 2. 注册必需的服务
  87. 2.13 实践环节:使用管理控制台在EMR运行WordCount
  88. 原理分析
  89. 一展身手:其余EMR示例程序
  90. 2.13.1 使用EMR的其他方式
  91. 1. AWS证书
  92. 2. EMR命令行工具
  93. 2.13.2 AWS生态系统
  94. 2.14 本地Hadoop与EMR Hadoop的对比
  95. 2.15 小结
  96. 第3章 理解MapReduce
  97. 3.1 键值对
  98. 3.1.1 具体含义
  99. 3.1.2 为什么采用键/值数据
  100. 一些实际应用
  101. 3.1.3 MapReduce作为一系列键/值变换
  102. 随堂测验:键值对
  103. 3.2 MapReduce的Hadoop Java API
  104. 0.20 MapReduce Java API
  105. 1. Mapper类
  106. 2. Reducer类
  107. 3. Driver类
  108. 3.3 编写MapReduce程序
  109. 3.4 实践环节:设置classpath
  110. 原理分析
  111. 3.5 实践环节:实现WordCount
  112. 原理分析
  113. 3.6 实践环节:构建JAR文件
  114. 原理分析
  115. 3.7 实践环节:在本地Hadoop集群运行WordCount
  116. 原理分析
  117. 3.8 实践环节:在EMR上运行WordCount
  118. 原理分析
  119. 3.8.1 0.20之前版本的Java MapReduce API
  120. 3.8.2 Hadoop提供的mapper和reducer实现
  121. 3.9 实践环节:WordCount的简易方法
  122. 原理分析
  123. 3.10 查看WordCount的运行全貌
  124. 3.10.1 启动
  125. 3.10.2 将输入分块
  126. 3.10.3 任务分配
  127. 3.10.4 任务启动
  128. 3.10.5 不断监视JobTracker
  129. 3.10.6 mapper的输入
  130. 3.10.7 mapper的执行
  131. 3.10.8 mapper的输出和reducer的输入
  132. 3.10.9 分块
  133. 3.10.10 可选分块函数
  134. 3.10.11 reducer类的输入
  135. 3.10.12 reducer类的执行
  136. 3.10.13 reducer类的输出
  137. 3.10.14 关机
  138. 3.10.15 这就是MapReduce的全部
  139. 3.10.16 也许缺了combiner
  140. 为什么要有combiner
  141. 3.11 实践环节:使用combiner编写WordCount
  142. 原理分析
  143. 使用reducer作为combiner的条件
  144. 3.12 实践环节:更正使用combiner的WordCount
  145. 原理分析
  146. 复用助您一臂之力
  147. 随堂测验:MapReduce的结构
  148. 3.13 Hadoop专有数据类型
  149. 3.13.1 Writable和WritableComparable接口
  150. 3.13.2 wrapper类介绍
  151. 1. 原始包装类
  152. 2. 数组包装类
  153. 3. Map包装类
  154. 3.14 实践环节:使用Writable包装类
  155. 原理分析
  156. 1. 其他包装类
  157. 一展身手:练习Writables类
  158. 2. 编写自定义类
  159. 3.15 输入/输出
  160. 3.15.1 文件、split和记录
  161. 3.15.2 InputFormat和RecordReader
  162. 3.15.3 Hadoop提供的InputFormat
  163. 3.15.4 Hadoop提供的RecordReader
  164. 3.15.5 OutputFormat和RecordWriter
  165. 3.15.6 Hadoop提供的OutputFormat
  166. 3.15.7 别忘了Sequence files
  167. 3.16 小结
  168. 第4章 开发MapReduce程序
  169. 4.1 使用非Java语言操作Hadoop
  170. 4.1.1 Hadoop Streaming工作原理
  171. 4.1.2 使用Hadoop Streaming的原因
  172. 4.2 实践环节:使用Streaming实现WordCount
  173. 原理分析
  174. 在作业中使用Streaming的区别
  175. 4.3 分析大数据集
  176. 4.3.1 获取UFO目击事件数据集
  177. 4.3.2 了解数据集
  178. 4.4 实践环节:统计汇总UFO数据
  179. 原理分析
  180. 调查UFO形状
  181. 4.5 实践环节:统计形状数据
  182. 原理分析
  183. 4.6 实践环节:找出目击事件的持续时间与UFO形状的关系
  184. 原理分析
  185. 在Hadoop外部使用Streaming脚本
  186. 4.7 实践环节:在命令行中执行形状/时间分析
  187. 原理分析
  188. 使用Java分析形状和地点
  189. 4.8 实践环节:使用ChainMapper进行字段验证/分析
  190. 原理分析
  191. 一展身手
  192. 1. 缩写太多
  193. 2. 使用分布式缓存
  194. 4.9 实践环节:使用Distributed Cache改进地点输出
  195. 原理分析
  196. 4.10 计数器、状态和其他输出
  197. 4.11 实践环节:创建计数器、任务状态和写入日志
  198. 原理分析
  199. 信息太多
  200. 4.12 小结
  201. 第5章 高级MapReduce技术
  202. 5.1 初级、高级还是中级
  203. 5.2 多数据源联结
  204. 5.2.1 不适合执行联结操作的情况
  205. 5.2.2 map端联结与reduce端联结的对比
  206. 5.2.3 匹配账户与销售信息
  207. 5.3 实践环节:使用MultipleInputs实现reduce端联结
  208. 原理分析
  209. DataJoinMapper和TaggedMapperOutput
  210. 5.3.1 实现map端联结
  211. 1. 使用Distributed Cache
  212. 一展身手:实现map端联结
  213. 2. 裁剪数据以适合缓存大小
  214. 3. 使用代表数据而非原始数据
  215. 4. 使用多个mapper
  216. 5.3.2 是否进行联结
  217. 5.4 图算法
  218. 5.4.1 Graph 101
  219. 5.4.2 图和MapReduce
  220. 5.4.3 图的表示方法
  221. 5.5 实践环节:图的表示
  222. 原理分析
  223. 算法综述
  224. 1. mapper
  225. 2. reducer
  226. 3. 迭代应用
  227. 5.6 实践环节:创建源代码
  228. 原理分析
  229. 5.7 实践环节:第一次运行作业
  230. 原理分析
  231. 5.8 实践环节:第二次运行作业
  232. 原理分析
  233. 5.9 实践环节:第三次运行作业
  234. 原理分析
  235. 5.10 实践环节:第四次也是最后一次运行作业
  236. 原理分析
  237. 5.10.1 运行多个作业
  238. 5.10.2 关于图的终极思考
  239. 5.11 使用语言无关的数据结构
  240. 5.11.1 候选技术
  241. 5.11.2 Avro简介
  242. 5.12 实践环节:获取并安装Avro
  243. 原理分析
  244. Avro及其模式
  245. 5.13 实践环节:定义模式
  246. 原理分析
  247. 5.14 实践环节:使用Ruby创建Avro源数据
  248. 原理分析
  249. 5.15 实践环节:使用Java语言编程操作Avro数据
  250. 原理分析
  251. 在MapReduce中使用Avro
  252. 5.16 实践环节:在MapReduce中统计UFO形状
  253. 原理分析
  254. 5.17 实践环节:使用Ruby检查输出数据
  255. 原理分析
  256. 5.18 实践环节:使用Java检查输出数据
  257. 原理分析
  258. 一展身手:Avro对图的支持
  259. 继续研究Avro
  260. 5.19 小结
  261. 第6章 故障处理
  262. 6.1 故障
  263. 6.1.1 拥抱故障
  264. 6.1.2 至少不怕出现故障
  265. 6.1.3 严禁模仿
  266. 6.1.4 故障类型
  267. 6.1.5 Hadoop节点故障
  268. 1. dfsadmin 命令
  269. 2. 集群设置、测试文件和数据块大小
  270. 3. Elastic MapReduce的容错机制
  271. 6.2 实践环节:杀死DataNode进程
  272. 原理分析
  273. NameNode和DataNode之间的通信
  274. 一展身手:深入研究NameNode的日志
  275. 6.3 实践环节:复制因子的作用
  276. 原理分析
  277. 6.4 实践环节:故意造成数据块丢失
  278. 原理分析
  279. 1. 数据丢失的可能性
  280. 2. 数据块损坏
  281. 6.5 实践环节:杀死TaskTracker进程
  282. 原理分析
  283. 1. DataNode故障和TaskTracker故障对比
  284. 2. 永久故障
  285. 杀死集群主节点
  286. 6.6 实践环节:杀死JobTracker
  287. 原理分析
  288. 启动替代JobTracker
  289. 一展身手:在新主机上运行JobTracker
  290. 6.7 实践环节:杀死NameNode进程
  291. 原理分析
  292. 1. 启动替代NameNode
  293. 2. 详解NameNode
  294. 3. 文件系统、文件、数据块和节点
  295. 4. 集群中最重要的数据:fsimage
  296. 5. DataNode的启动
  297. 6. 安全模式
  298. 7. SecondaryNameNode
  299. 8. 如何处理NameNode进程的致命故障
  300. 9. BackupNode/CheckpointNode和NameNode HA
  301. 10. 硬件故障
  302. 11. 主机故障
  303. 12. 主机错误
  304. 13. 关联故障的风险
  305. 由软件造成的任务失败
  306. 缓慢运行的任务引发的故障
  307. 6.8 实践环节:引发任务故障
  308. 原理分析
  309. 一展身手:编写代码访问HDFS
  310. 1. Hadoop对运行缓慢的任务的处理方式
  311. 2. 预测执行
  312. 3. Hadoop对失败任务的处理方法
  313. 一展身手:引发任务失败
  314. 6.9 数据原因造成的任务故障
  315. 1. 通过编写代码处理异常数据
  316. 2. 使用Hadoop的skip模式
  317. 6.10 实践环节:使用skip模式处理异常数据
  318. 原理分析
  319. 是否开启skip模式
  320. 6.11 小结
  321. 第7章 系统运行与维护
  322. 7.1 关于EMR的说明
  323. 7.2 Hadoop配置属性
  324. 默认值
  325. 7.3 实践环节:浏览默认属性
  326. 原理分析
  327. 7.3.1 附加的属性元素
  328. 7.3.2 默认存储位置
  329. 7.3.3 设置Hadoop属性的几种方式
  330. 7.4 集群设置
  331. 7.4.1 为集群配备多少台主机
  332. 1. 计算节点的可用空间
  333. 2. 主节点的位置
  334. 3. 硬件选型
  335. 4. 处理器/内存/硬盘空间比
  336. 5. 基于EMR进行原型设计
  337. 7.4.2 特殊节点的需求
  338. 7.4.3 不同类型的存储系统
  339. 1. 通用存储与企业级存储的对比
  340. 2. 独立硬盘与RAID的对比
  341. 3. 综合考虑
  342. 4. 网络存储系统
  343. 7.4.4 Hadoop的网络配置
  344. 1. 数据块放置策略
  345. 2. 机柜认知
  346. 报告自身所在机柜的脚本
  347. 7.5 实践环节:查看默认的机柜配置
  348. 原理分析
  349. 7.6 实践环节:报告每台主机所在机柜
  350. 原理分析
  351. 究竟什么是商用硬件
  352. 随堂测验:创建集群
  353. 7.7 集群访问控制
  354. Hadoop安全模型
  355. 7.8 实践环节:展示Hadoop的默认安全机制
  356. 原理分析
  357. 1. 用户身份
  358. 超级用户
  359. 2. 更细粒度的访问控制
  360. 通过物理访问控制解决安全模型问题
  361. 7.9 管理NameNode
  362. 为fsimage配置多个存储位置
  363. 7.10 实践环节:为fsimage文件新增一个存储路径
  364. 原理分析
  365. fsimage副本的写入位置
  366. 迁移到另一台NameNode主机
  367. 在灾难来袭之前做好准备
  368. 7.11 实践环节:迁移到新的NameNode主机
  369. 原理分析
  370. 1. 不要高兴得太早
  371. 2. 如何完成JobTracker迁移过程
  372. 一展身手:把NameNode迁移到一台新主机
  373. 7.12 管理HDFS
  374. 7.12.1 数据写入位置
  375. 7.12.2 使用平衡器
  376. 运行平衡器的时机
  377. 7.13 MapReduce管理
  378. 7.13.1 通过命令行管理作业
  379. 一展身手:通过命令行管理作业
  380. 7.13.2 作业优先级和作业调度
  381. 7.14 实践环节:修改作业优先级并结束作业运行
  382. 原理分析
  383. 另一种调度器
  384. 1. 计算能力调度器
  385. 2. 公平调度器
  386. 3. 启用替代调度器
  387. 4. 何时使用替代调度器
  388. 7.15 扩展集群规模
  389. 7.15.1 提升本地Hadoop集群的计算能力
  390. 一展身手:加入新节点并运行平衡器
  391. 7.15.2 提升EMR作业流的计算能力
  392. 扩展正在运行的作业流
  393. 7.16 小结
  394. 第8章 Hive:数据的关系视图
  395. 8.1 Hive概述
  396. 8.1.1 为什么使用Hive
  397. 8.1.2 感谢Facebook
  398. 8.2 设置Hive
  399. 8.2.1 准备工作
  400. 8.2.2 下载Hive
  401. 8.3 实践环节:安装Hive
  402. 原理分析
  403. 8.4 使用Hive
  404. 8.5 实践环节:创建UFO数据表
  405. 原理分析
  406. 8.6 实践环节:在表中插入数据
  407. 原理分析
  408. 验证数据
  409. 8.7 实践环节:验证表
  410. 原理分析
  411. 8.8 实践环节:用正确的列分隔符重定义表
  412. 原理分析
  413. Hive表是个逻辑概念
  414. 8.9 实践环节:基于现有文件创建表
  415. 原理分析
  416. 8.10 实践环节:执行联结操作
  417. 原理分析
  418. 一展身手:使用正则表达式改进联结
  419. Hive和SQL视图
  420. 8.11 实践环节:使用视图
  421. 原理分析
  422. 处理Hive中的畸形数据
  423. 一展身手:实现上述方案
  424. 8.12 实践环节:导出查询结果
  425. 原理分析
  426. 表分区
  427. 8.13 实践环节:制作UFO目击事件分区表
  428. 原理分析
  429. 8.13.1 分桶、归并和排序
  430. 8.13.2 用户自定义函数
  431. 8.14 实践环节:新增用户自定义函数
  432. 原理分析
  433. 8.14.1 是否进行预处理
  434. 8.14.2 Hive和Pig的对比
  435. 8.14.3 未提到的内容
  436. 8.15 基于Amazon Web Services的Hive
  437. 8.16 实践环节:在EMR上分析UFO数据
  438. 原理分析
  439. 8.16.1 在开发过程中使用交互式作业流
  440. 一展身手:使用交互式的EMR集群
  441. 8.16.2 与其他AWS产品的集成
  442. 8.17 小结
  443. 第9章 与关系数据库协同工作
  444. 9.1 常见数据路径
  445. 9.1.1 Hadoop用于存储档案
  446. 9.1.2 使用Hadoop进行数据预处理
  447. 9.1.3 使用Hadoop作为数据输入工具
  448. 9.1.4 数据循环
  449. 9.2 配置MySQL
  450. 9.3 实践环节:安装并设置MySQL
  451. 原理分析
  452. 小心翼翼的原因
  453. 9.4 实践环节:配置MySQL允许远程连接
  454. 原理分析
  455. 禁止尝试的一些操作
  456. 9.5 实践环节:建立员工数据库
  457. 原理分析
  458. 留意数据文件的访问权限
  459. 9.6 把数据导入Hadoop
  460. 9.6.1 使用MySQL工具手工导入
  461. 一展身手:把员工数据表的内容导出至HDFS
  462. 9.6.2 在mapper中访问数据库
  463. 9.6.3 更好的方法:使用Sqoop
  464. 9.7 实践环节:下载并配置Sqoop
  465. 原理分析
  466. 1. Sqoop和Hadoop的版本
  467. 2. Sqoop和HDFS
  468. 9.8 实践环节:把MySQL的数据导入HDFS
  469. 原理分析
  470. Sqoop的体系结构
  471. 使用Sqoop把数据导入Hive
  472. 9.9 实践环节:把MySQL数据导出到Hive
  473. 原理分析
  474. 9.10 实践环节:有选择性的导入数据
  475. 原理分析
  476. 数据类型的问题
  477. 9.11 实践环节:使用数据类型映射
  478. 原理分析
  479. 9.12 实践环节:通过原始查询导入数据
  480. 原理分析
  481. 一展身手
  482. 1. Sqoop和Hive数据分块
  483. 2. 字段分隔符和文本行分隔符
  484. 9.13 从Hadoop导出数据
  485. 9.13.1 在reducer中把数据写入关系数据库
  486. 9.13.2 利用reducer输出SQL数据文件
  487. 9.13.3 仍是最好的方法
  488. 9.14 实践环节:把Hadoop数据导入MySQL
  489. 原理分析
  490. 1. Sqoop导入和导出的区别
  491. 2. 插入和更新的对比
  492. 一展身手
  493. 3. Sqoop和Hive导出
  494. 9.15 实践环节:把Hive数据导入MySQL
  495. 原理分析
  496. 9.16 实践环节:改进mapper并重新运行数据导出命令
  497. 原理分析
  498. Sqoop的其他功能
  499. 9.17 在AWS上使用Sqoop
  500. 使用RDS
  501. 9.18 小结
  502. 第10章 使用Flume收集数据
  503. 10.1 关于AWS的说明
  504. 10.2 无处不在的数据
  505. 10.2.1 数据类别
  506. 10.2.2 把网络流量导入Hadoop
  507. 10.3 实践环节:把网络服务器数据导入Hadoop
  508. 原理分析
  509. 一展身手
  510. 10.3.1 把文件导入Hadoop
  511. 10.3.2 潜在的问题
  512. 1. 把网络数据保留在网络上
  513. 2. 对Hadoop的依赖
  514. 3. 可靠性
  515. 4. 多此一举
  516. 5. 一种通用的框架
  517. 10.4 Apache Flume简介
  518. 关于版本的说明
  519. 10.5 实践环节:安装并配置Flume
  520. 原理分析
  521. 使用Flume采集网络数据
  522. 10.6 实践环节:把网络流量存入日志文件
  523. 原理分析
  524. 10.7 实践环节:把日志输出到控制台
  525. 原理分析
  526. 把网络数据写入日志文件
  527. 10.8 实践环节:把命令的执行结果写入平面文件
  528. 原理分析
  529. 日志信宿与文件信宿
  530. 10.9 实践环节:把远程文件数据写入本地平面文件
  531. 原理分析
  532. 10.9.1 信源、信宿和信道
  533. 1. 信源
  534. 2. 信宿
  535. 3. 信道
  536. 4. 定制信源、信道和信宿
  537. 10.9.2 Flume配置文件
  538. 一展身手
  539. 10.9.3 一切都以事件为核心
  540. 10.10 实践环节:把网络数据写入HDFS
  541. 原理分析
  542. 10.11 实践环节:加入时间戳
  543. 原理分析
  544. 使用Sqoop还是使用Flume
  545. 10.12 实践环节:多层Flume网络
  546. 原理分析
  547. 10.13 实践环节:把事件写入多个信宿
  548. 原理分析
  549. 10.13.1 选择器的类型
  550. 10.13.2 信宿故障处理
  551. 一展身手:信宿故障处理
  552. 10.13.3 使用简单元件搭建复杂系统
  553. 一展身手:使用简单元件搭建复杂系统
  554. 10.14 更高的视角
  555. 10.14.1 数据的生命周期
  556. 10.14.2 集结数据
  557. 10.14.3 调度
  558. 10.15 小结
  559. 第11章 展望未来
  560. 11.1 全书回顾
  561. 11.2 即将到来的Hadoop变革
  562. 11.3 其他版本的Hadoop软件包
  563. 为什么会有其他版本
  564. 1. 打包
  565. 2. 免费的和商用的扩展
  566. 3. 如何选择合适的产品
  567. 11.4 其他Apache项目
  568. 11.4.1 HBase
  569. 11.4.2 Oozie
  570. 11.4.3 Whir
  571. 11.4.4 Mahout
  572. 11.4.5 MRUnit
  573. 11.5 其他程序设计模式
  574. 11.5.1 Pig
  575. 11.5.2 Cascading
  576. 11.6 AWS资源
  577. 11.6.1 在EMR上使用HBase
  578. 11.6.2 SimpleDB
  579. 11.6.3 DynamoDB
  580. 11.7 获取信息的渠道
  581. 11.7.1 源代码
  582. 11.7.2 邮件列表和论坛
  583. 11.7.3 LinkedIn群组
  584. 11.7.4 Hadoop用户群
  585. 11.7.5 会议
  586. 11.8 小结
  587. 随堂测验答案
  588. 第3章 理解MapReduce
  589. 第7章 系统运行与维护