发表于2024-12-23
本书结合理论和实践,由浅入深,全方位介绍了Hadoop 这一高性能的海量数据处理和分析平台。全书5部分24 章,第Ⅰ部分介绍Hadoop 基础知识,第Ⅱ部分介绍MapReduce,第Ⅲ部分介绍Hadoop 的运维,第Ⅳ部分介绍Hadoop 相关开源项目,第Ⅴ部分提供了三个案例,分别来自医疗卫生信息技术服务商塞纳(Cerner)、微软的人工智能项目ADAM(一种大规模分布式深度学习框架)和开源项目Cascading(一个新的针对MapReduce 的数据处理API)。本书是一本专业、全面的Hadoop 参考书和工具书,阐述了Hadoop 生态圈的新发展和应用,程序员可以从中探索海量数据集的存储和分析,管理员可以从中了解Hadoop 集群的安装和运维。
本书结合理论和实践,由浅入深,全方位介绍了Hadoop这一高性能的海量数据处理和分析平台。全书5部分24章,第Ⅰ部分介绍Hadoop基础知识,主题涉及Hadoop、MapReduce、Hadoop分布式文件系统、YARN、Hadoop的I/O操作。第Ⅱ部分介绍MapReduce,主题包括MapReduce应用开发;MapReduce的工作机制、MapReduce的类型与格式、MapReduce的特性。第Ⅲ部分介绍Hadoop的运维,主题涉及构建Hadoop集群、管理Hadoop。第Ⅳ部分介绍Hadoop相关开源项目,主题涉及Avro、Parquet、Flume、Sqoop、Pig、Hive、Crunch、Spark、HBase、ZooKeeper。第Ⅴ部分提供了三个案例,分别来自医疗卫生信息技术服务商塞纳(Cerner)、微软的人工智能项目ADAM(一种大规模分布式深度学习框架)和开源项目Cascading(一个新的针对MapReduce的数据处理API)。
本书是一本专业、全面的Hadoop参考书和工具书,阐述了Hadoop生态圈的新发展和应用,程序员可以从中探索海量数据集的存储和分析,管理员可以从中了解Hadoop集群的安装和运维。
作者简介
TomWhite是杰出的Hadoop专家之一。自2007年2月以来,TomWhite一直是ApacheHadoop的提交者(committer),也是Apache软件基金会的成员。Tom是Cloudera的软件工程师,他是Cloudera的首批员工,对Apache和Cloudera做出了举足轻重的贡献。在此之前,他是一名独立的Hadoop顾问,帮助公司搭建、使用和扩展Hadoop。他是很多行业大会的专题演讲人,比如ApacheCon、OSCON和Strata。Tom在英国剑桥大学获得数学学士学位,在利兹大学获得科学哲学硕士学位。他目前与家人居住在威尔士。
译者简介
王海博士,解放军理工大学通信工程学院教授,博导,教研中心主任,长期从事无线自组网网络的设计与研发工作,主持国家自然科学基金、国家863计划课题等多项课题,近5年获军队科技进步二等奖1项,三等奖6项,作为di一发明人申请国家发明专利十余项,发表学术论文50余篇。
华东博士,现任南京医科大学计算机教研室教师,一直致力于计算机辅助教学的相关技术研究,陆续开发了人体解剖学网络自主学习考试平台、诊断学自主学习平台和面向执业医师考试的预约化考试平台等系统,并在各个学科得到广泛的使用,获得全国高等学校计算机课件评比一等奖和三等奖各一项。主编、副主编教材两部,获发明专利一项、软件著作权多项。
刘喻博士,长期从事软件开发、软件测试和软件工程化管理工作,目前任教于清华大学软件所。
吕粤海,长期从事军事通信网络技术研究与软件开发工作,先后通过华为光网络高级工程师认证、思科网络工程师认证。
第Ⅰ部分Hadoop基础知识
第1章初识Hadoop3
1.1数据!数据!3
1.2数据的存储与分析5
1.3查询所有数据6
1.4不仅仅是批处理7
1.5相较于其他系统的优势8
1.6ApacheHadoop发展简史12
1.7本书包含的内容16
第2章关于MapReduce19
2.1气象数据集19
2.2使用Unix工具来分析数据21
2.3使用Hadoop来分析数据22
2.4横向扩展31
2.5HadoopStreaming37
第3章Hadoop分布式文件系统42
3.1HDFS的设计42
3.2HDFS的概念44
3.3命令行接口50
3.4Hadoop文件系统52
3.5Java接口56
3.6数据流68
3.7通过distcp并行复制76
第4章关于YARN78
4.1剖析YARN应用运行机制79
4.2YARN与MapReduce1相比82
4.3YARN中的调度85
4.4延伸阅读95
第5章Hadoop的I/O操作96
5.1数据完整性96
5.2压缩99
5.3序列化109
5.4基于文件的数据结构127
第Ⅱ部分关于MapReduce
第6章MapReduce应用开发141
6.1用于配置的API142
6.2配置开发环境144
6.3用MRUnit来写单元测试152
6.4本地运行测试数据156
6.5在集群上运行160
6.6作业调优174
6.7MapReduce的工作流176
第7章MapReduce的工作机制184
7.1剖析MapReduce作业运行
机制184
7.2失败191
7.3shuffle和排序195
7.4任务的执行201
第8章MapReduce的
类型与格式207
8.1MapReduce的类型207
8.2输入格式218
8.3输出格式236
第9章MapReduce的特性243
9.1计数器243
9.2排序252
9.3连接264
9.4边数据分布270
9.5MapReduce库类276
第Ⅲ部分Hadoop的操作
第10章构建Hadoop集群279
10.1集群规范280
10.2集群的构建和安装284
10.3Hadoop配置288
10.4安全性305
10.5利用基准评测程序测试
Hadoop集群311
第11章管理Hadoop314
11.1HDFS314
11.2监控327
11.3维护329
第Ⅳ部分Hadoop相关开源项目
第12章关于Avro341
12.1Avro数据类型和模式342
12.2内存中的序列化和
反序列化特定API347
12.3Avro数据文件349
12.4互操作性351
12.5模式解析352
12.6排列顺序354
12.7关于AvroMapReduce356
12.8使用AvroMapReduce
进行排序359
12.9其他语言的Avro362
第13章关于Parquet363
13.1数据模型364
13.2Parquet文件格式367
13.3Parquet的配置368
13.4Parquet文件的读/写369
13.5ParquetMapReduce374
第14章关于Flume377
14.1安装Flume378
14.2示例378
14.3事务和可靠性380
14.4HDFSSink382
14.5扇出385
14.6通过代理层分发387
14.7Sink组391
14.8Flume与应用程序的集成395
14.9组件编目395
14.10延伸阅读397
第15章关于Sqoop398
15.1获取Sqoop398
15.2Sqoop连接器400
15.3一个导入的例子401
15.4生成代码404
15.5深入了解数据库导入405
15.6使用导入的数据409
15.7导入大对象412
15.8执行导出414
15.9深入了解导出功能416
15.10延伸阅读419
第16章关于Pig420
16.1安装与运行Pig421
16.2示例425
16.3与数据库进行比较428
16.4PigLatin429
16.5用户自定义函数446
16.6数据处理操作455
16.7Pig实战465
16.8延伸阅读468
第17章关于Hive469
17.1安装Hive470
17.2示例472
17.3运行Hive473
17.4Hive与传统数据库相比480
17.5HiveQL483
17.6表488
17.7查询数据501
17.8用户定义函数508
17.9延伸阅读516
第18章关于Crunch517
18.1示例518
18.2Crunch核心API521
18.3管线执行537
18.4Crunch库545
18.5延伸阅读547
第19章关于Spark548
19.1安装Spark549
19.2示例549
19.3弹性分布式数据集555
19.4共享变量564
19.5剖析Spark作业运行机制565
19.6执行器和集群管理器570
19.7延伸阅读574
第20章关于HBase575
20.1HBase基础575
20.2概念576
20.3安装581
20.4客户端584
20.5创建在线查询应用589
20.6HBase和RDBMS的比较598
20.7Praxis601
20.8延伸阅读602
第21章关于ZooKeeper604
21.1安装和运行ZooKeeper605
21.2示例607
21.3ZooKeeper服务615
21.4使用ZooKeeper来构建
应用629
21.5生产环境中的ZooKeeper640
21.6延伸阅读643
第Ⅴ部分案例学习
第22章医疗公司塞纳(Cerner)
的可聚合数据647
22.1从多CPU到语义集成647
22.2进入ApacheCrunch648
22.3建立全貌649
22.4集成健康医疗数据651
22.5框架之上的可组合性654
22.6下一步655
第23章生物数据科学:
用软件拯救生命657
23.1DNA的结构659
23.2遗传密码:将DNA字符
转译为蛋白质660
22.3将DNA想象成源代码661
23.4人类基因组计划和参考
基因组663
22.5DNA测序和比对664
23.6ADAM,一个可扩展的
基因组分析平台666
23.7使用Avro接口描述语言进行
自然语言编程666
23.8使用Parquet进行面向列的
存取668
23.9一个简单例子:用Spark和
ADAM做k-mer计数669
23.10从个性化广告到个性化
医疗672
23.11联系我们673
第24章开源项目Cascading674
24.1字段、元组和管道675
24.2操作678
24.3Taps,Schemes和Flows680
24.4Cascading实践应用681
24.5灵活性684
24.6ShareThis中的Hadoop和
Cascading685
24.7总结689
附录A安装ApacheHadoop691
附录B关于CDH697
附录C准备NCDC气象数据699
附录D新版和旧版Java
MapReduceAPI702
第3章Hadoop分布式文件系统
当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(partition)并存储到若干台单独的计算机上。管理网络中跨多台计算机存储的文件系统称为分布式文件系统(distributedfilesystem)。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。例如,使文件系统能够容忍节点故障且不丢失任何数据,就是一个极大的挑战。
Hadoop自带一个称为HDFS的分布式文件系统,即HadoopDistributedFilesystem。在非正式文档或旧文档以及配置文件中,有时也简称为DFS,它们是一回事儿。HDFS是Hadoop的旗舰级文件系统,也是本章的重点,但实际上Hadoop是一个综合性的文件系统抽象,因此接下来我们将了解将Hadoop与其他存储系统集成的途径,例如本地文件系统和AmazonS3系统。
3.1HDFS的设计
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。①让我们仔细看看下面的描述。
*超大文件“超大文件”在这里指具有几百MB、几百GB甚至几百TB大小的文件。目前已经有存储PB级数据的Hadoop集群了。②
*流式数据访问HDFS的构建思路是这样的:一次写入、多次读取是最高效的访问模式。数据集通常由数据源生成或从数据源复制而来,接着长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分数据甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
*商用硬件Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件(在各种零售店都能买到的普通硬件③)的集群上的,因此至少对于庞大的集群来说,节点故障的几率还是非常高的。HDFS遇到上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。
同样,那些不适合在HDFS上运行的应用也值得研究。目前HDFS对某些应用领域并不适合,不过以后可能会有所改进。
*低时间延迟的数据访问要求低时间延迟数据访问的应用,例如几十毫秒范围,不适合在HDFS上运行。记住,HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价。目前,对于低延迟的访问需求,HBase(参见第20章)是更好的选择。
*大量的小文件由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节。因此,举例来说,如果有一百万个文件,且每个文件占一个数据块,那至少需要300MB的内存。尽管存储上百万个文件是可行的,但是存储数十亿个文件就超出了当前硬件的能力。④
*多用户写入,任意修改文件HDFS中的文件写入只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据。它不支持多个写入者的操作,也不支持在文件的任意位置进行修改。可能以后会支持这些操作,但它们相对比较低效。
3.2HDFS的概念
3.2.1数据块
每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的整数倍。文件系统块一般为几千字节,而磁盘块一般为512字节。这些信息(文件系统块大小)对于需要读/写文件的文件系统用户来说是透明的。尽管如此,系统仍然提供了一些工具(如df和fsck)来维护文件系统,由它们对文件系统中的块进行操作。
HDFS同样也有块(block)的概念,但是大得多,默认为128MB。与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。但与面向单一磁盘的文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间(例如,当一个1MB的文件存储在一个128MB的块中时,文件只使用1MB的磁盘空间,而不是128MB)。如果没有特殊指出,本书中提到的“块”特指HDFS中的块。
HDFS中的块为什么这么大?
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的大文件的时间取决于磁盘传输速率。
我们来做一个速算,如果寻址时间约为10ms,传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小实际为128MB,但是很多情况下HDFS安装时使用更大的块。以后随着新一代磁盘驱动器传输速率的提升,块的大小会被设置得更大。
但是这个参数也不会设置得过大。MapReduce中的map任务通常一次只处理一个块中的数据,因此如果任务数太少(少于集群中的节点数量),作业的运行速度就会比较慢。
对分布式文件系统中的块进行抽象会带来很多好处。第一个最明显的好处是,一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。事实上,尽管不常见,但对于整个HDFS集群而言,也可以仅存储一个文件,该文件的块占满集群中所有的磁盘。
第二个好处是,使用抽象块而非整个文件作为存储单元,大大简化了存储子系统的设计。简化是所有系统的目标,但是这对于故障种类繁多的分布式系统来说尤为重要。将存储子系统的处理对象设置为块,可简化存储管理(由于块的大小是固定的,因此计算单个磁盘能存储多少个块就相对容易)。同时也消除了对元数据的顾虑(块只是要存储的大块数据,而文件的元数据,如权限信息,并不需要与块一同存储,这样一来,其他系统就可以单独管理这些元数据)。
不仅如此,块还非常适合用于数据备份进而提供数据容错能力和提高可用性。将每个块复制到少数几个物理上相互独立的机器上(默认为3个),可以确保在块、磁盘或机器发生故障后数据不会丢失。如果发现一个块不可用,系统会从其他地方读取另一个复本,而这个过程对用户是透明的。一个因损坏或机器故障而丢失的块可以从其他候选地点复制到另一台可以正常运行的机器上,以保证复本的数量回到正常水平(参见5.1节对数据完整性的讨论,进一步了解如何应对数据损坏)。同样,有些应用程序可能选择为一些 Hadoop权威指南:大数据的存储与分析(第4版) 下载 mobi epub pdf txt 电子书 格式
Hadoop权威指南:大数据的存储与分析(第4版) 下载 mobi pdf epub txt 电子书 格式 2024
Hadoop权威指南:大数据的存储与分析(第4版) 下载 mobi epub pdf 电子书有一本书缺货,所以到家晚了点,不过质量看着还不错,慢慢看吧。
评分很好很好好贵啊我怕我说过话跬步路口考虑考虑了具体
评分六一买的忘记评价了
评分书不错,内容很棒,印刷很好,关于hadoop讲的很详细。值得购买。
评分还没看,挺大一本的,不知道内容怎么样
评分想学习大数据相关的书籍,学习中,希望坚持下去.
评分一作:
评分这本书是做活动买的,很实惠,慢慢看,值得购买。
评分想学习大数据相关的书籍,学习中,希望坚持下去.
Hadoop权威指南:大数据的存储与分析(第4版) mobi epub pdf txt 电子书 格式下载 2024