目录 I
初识Hadoop 1
1.1  数据!数据 1
1.2  数据的存储和分析 3
1.3  相较于其他系统 4
1.4  Hadoop发展简史 9
1.5  Apache Hadoop项目 12
MapReduce简介 15
2.1  一个气象数据集 15
2.2  使用Unix Tools来分析数据 17
2.3  使用Hadoop进行数据分析 19
2.4  分布化 30
2.5  Hadoop流 35
2.6  Hadoop管道 40
Hadoop分布式文件系统 44
3.1  HDFS的设计 44
3.2  HDFS的概念 45
3.3  命令行接口 48
3.4  Hadoop文件系统 50
3.5  Java接口 54
3.6  数据流 68
3.7  通过distcp进行并行复制 75
3.8  Hadoop归档文件 77
Hadoop的I/O 80
4.1  数据完整性 80
4.2  压缩 83
4.3  序列化 92
4.4  基于文件的数据结构 111
MapReduce应用开发 125
5.1  API的配置 126
5.2  配置开发环境 128
5.3  编写单元测试 134
5.4  本地运行测试数据 138
5.5  在集上运行 144
5.6  作业调优 159
5.7  MapReduce的工作流 162
MapReduce的工作原理 166
6.1  运行MapReduce作业 166
6.2  失败 172
6.3  作业的调度 174
6.4  shuffle和排序 175
6.6  任务的执行 181
MapReduce的类型与格式 188
7.1  MapReduce类型 188
7.3  输出格式 217
MapReduce 特性 227
8.1  计数器 227
8.2  排序 235
8.3  联接 252
8.4  次要数据的分布 258
8.5  MapReduce的类库 263
Hadoop集的安装 264
9.1  集说明 264
9.2  集的建立和安装 268
9.3  SSH配置 270
9.4  Hadoop配置 271
9.5  安装之后 286
9.6  Hadoop集基准测试 286
9.7  云计算中的Hadoop 290
Hadoop的管理 293
10.1  HDFS 293
10.2  监控 306
10.3  维护 313
Pig简介 321
11.1  安装和运行Pig 322
11.2  实例 325
11.3  与数据库比较 329
11.4  Pig Latin 330
11.5  用户定义函数 343
11.6  数据处理操作符 353
11.7  Pig实践提示与技巧 363
Hbase简介 366
12.1  HBase基础 366
12.2  概念 367
12.3  安装 371
12.4  客户端 374
12.5  示例 377
12.6  HBase与RDBMS的比较 385
12.7  实践 390
ZooKeeper简介 394
13.1  ZooKeeper的安装和运行 395
13.2  范例 396
13.3  ZooKeeper服务 405
13.4  使用ZooKeeper建立应用程序 417
13.5  工业界中的ZooKeeper 428
案例研究 431
14.1  Hadoop在Last.fm的应用 431
14.2  Hadoop和Hive在Facebook的应用 441
14.3  Hadoop在Nutch搜索引擎 451
14.4  Hadoop用于Rackspace的日志处理 466
14.5  Cascading项目 474
14.6  Apache Hadoop的1 TB排序 488
Apache Hadoop的安装 491
Cloudera的Hadoop分发包 497
预备NCDC气象资料 502
第1章 初识Hadoop
古时候,人们用牛来拉重物,当一头牛拉不动一根圆木的时候,他们不曾想过培育个头更大的牛。同样,我们也不需要尝试更大的计算机,而是应该开发更多的计算系统。
--格蕾斯·霍珀
1.1  数据!数据
我们生活在数据时代!很难估计全球存储的电子数据总量是多少,但是据IDC估计2006年"数字全球"项目(digital universe)的数据总量为0.18 ZB,并且预测到2011年这个数字将达到1.8 ZB,为2006年的10倍 。1 ZB相当于10的21次方字节的数据,或者相当于1000 EB,1 000 000 PB,或者大家更熟悉的10亿TB的数据!这相当于世界上每个人一个磁盘驱动器的数量级。
这一数据洪流有许多来源。考虑下文: 
纽约证券交易所每天产生1 TB的交易数据。
hbase应用案例
著名社交网站Facebook的主机存储着约100亿张照片,占据PB级存储空间。
Ancestry,一个家谱网站,存储着2.5 PB数据。
互联网档案馆(The Internet Archive)存储着约2 PB数据,并以每月至少20 TB的速度增长。
瑞士日内瓦附近的大型强子对撞机每年产生约15 PB的数据。
此外还有大量数据。但是你可能会想它对自己有何影响。大部分数据被锁定在最大的网页内容里面(如搜索引擎)或者是金融和科学机构,对不对?是不是所谓的"大数据"的出现会影响到较小的组织或个人?
我认为是这样的。以照片为例,我妻子的祖父是一个狂热的摄影爱好者,并且他成人之后,几乎一直都在拍照片。他的所有照片(中等格式、幻灯片和35 mm胶片),在扫描成高解析度照片时,占了大约10 GB的空间。相比之下,我家去年一年用数码相机拍摄的照片就占用了5 GB的空间。我家产生照片数据的速度是我妻子祖父的35倍!并且,随着拍摄更多的照片变得越来越容易,这个速度还在增加中。
更常见的情况是,个人数据的产生量正在快速地增长。微软研究院的MyLifeBits项目(research.microsoft/en-us/projects/mylifebits/default.aspx)显示,在不久的将来,个人信息档案将可能成为普遍现象。MyLifeBits是这样的一个实验:一个人与外界的联系(电话、邮件和文件)被抓取和存储供以后访问。收集的数据包括每分钟拍摄的照片等,导致整个数据量达到每月1 GB的大小。当存储成本下降到使其可以存储连续的音频和视频时,服务于未来MyLifeBits项目的数据量将是现在的许多倍。
个人数据的增长的确是大势所趋,但更重要的是,计算机所产生的数据可能比人所产生的数据更大。机器日志、RFID读取器、传感器网络、车载GPS和零售交易数据等,这些都会促使"数据之山越来越高"。
公开发布的数据量也在逐年增加。作为组织或企业,再也不能只管理自己的数据,未来的成功在很大程度上取决于它是否能从其他组织的数据中提取出价值。
这方面的先锋(如亚马逊网络服务器、或者)的公共数据集,它们的存在就在于促进"信息共享",任何人都可以共享并自由(或以AWS平台的形式,或以适度的价格)下载和分析这些数据。不同来源的信息混合处理后会带来意外的效果和至今难以想像的应用。
以Astrometry项目为例,这是一个研究Flickr网站上天体爱好者中新照片的项目。它分析每一张上传的照片,并确定它是天空的哪一部分,或者是否是有趣的天体,如恒星或者星系。虽然这只是一个带实验性质的新服务,但是它显示了数据(这里特指摄影照片)的可用性并且被用来进行某些活动(图像分析),而这些活动很多时候并不是数据创建者预先能够想像到的。
有句话是这么说的:"算法再好,通常也难敌更多的数据。"意思是说对于某些问题(譬如基于既往偏好生成的电影和音乐推荐),不论你的算法有多么猛,它们总是会在更多的数据面前无能为力(更不用说没有优化过的算法了)。
现在,我们有一个好消息和一个坏消息。好消息是有海量数据!坏消息是我们正在为存储和分析这些数据而奋斗不息。
1.2  数据的存储和分析
问题很简单:多年来硬盘存储容量快速增加的同时,访问速度-- 数据从硬盘读取的速度-- 却未能与时俱进。1990年,一个普通的硬盘驱动器可存储1370 MB的数据并拥有4.4 MB/s的传输速度 ,所以,只需五分钟的时间就可以读取整个磁盘的数据。20年过去了,1 TB级别的磁盘驱动器是很正常的,但是数据传输的速度却在100 MB/s左右。所以它需要花两个半小时以上的时间读取整个驱动器的数据。
从一个驱动器上读取所有的数据需要很长的时间,写甚至更慢。一个很简单的减少读取时间的办法是同时从多个磁盘上读取数据。试想一下,我们拥有100个磁盘,每个存储百分之一的数据。如果它们并行运行,那么不到两分钟我们就可以读完所有的数据。
只使用一个磁盘的百分之一似乎很浪费。但是我们可以存储100个数据集,每个1 TB,并让它们共享磁盘的访问。我们可以想像,此类系统的用户会很高兴看到共享访问可以缩短分析时间,并且,从统计角度来看,他们的分析工作会分散到不同的时间点,所以互相之间不会有太多干扰。
尽管如此,现在更可行的是从多个磁盘并行读写数据。
第一个需要解决的问题是硬件故障。一旦开始使用多个硬件设施,其中一个会出故障的概率是非常高的。避免数据丢失的常见做法是复制:通过系统保存数据的冗余副本,在故障发生时,可以使用数据的另一份副本。这就是冗余磁盘阵列的工作方式。Hadoop的文件系统HDFS(Hadoop Distributed Filesystem)也是一个例子,虽然它采取的是另一种稍有不同的方法,详见后文描述。
第二个问题是大部分分析任务需要通过某种方式把数据合并起来,即从一个磁盘读取的数据可能需要和另外99个磁盘中读取的数据合并起来才能使用。各种不同的分布式系统能够组合多个来源的数据,但是如何保证正确性是一个非常难的挑战。MapReduce提供了一个编程模型,其抽象出上述磁盘读写的问题,将其转换为计算一个由成对键/值组成的数据集。这种模
型的具体细节将在后面的章节讨论。但是目前讨论的重点是,这个计算由两部分组成:Map和Reduce。这两者的接口就是"整合"之地。就像HDFS一样,MapReduce是内建可靠性这个功能的。
简而言之,Hadoop提供了一个稳定的共享存储和分析系统。存储由HDFS实现,分析由MapReduce实现。纵然Hadoop还有其他功能,但这些功能是它的核心所在。
1.3  相较于其他系统

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。