hadoop权威指南笔记(一)

2019-07-12  本文已影响0人  多彩海洋

最近开始读<< Hadoop:the definitive guide>>,于是打算写点读书笔记,书电子版见网盘,密码v66s。

原书推荐的读书顺序如下图:


1.png

这里我们就按从第一章到最后一章的顺序读吧.

Chapter 2: MapReduce

mapreduce思想
MR的思想非常简单,如下图所示:

2.png

mapreduce程序的实现
MapReduce一般用Java实现,故我们需要注意以下的地方:

Map输出的KV对的数据类型必须和reduce接受的输入类型一致。
输入可以用addInputPath定义,参数可以是一个文件,一个目录,或者一个文件匹配模式。
输出用setOutputPath定义,参数必须是一个不存在的目录。
我们需要用setOutputKey和setOutputValue来设定reduce的输出类型。如果map的输出类型和reduce输出类型一样,则不需要再设置,否则用setMapOutputKey等
最后waitForCompletion()返回job是否执行成功,并且接受一个boolean参数,如果为真则打印进程执行信息,否则不打印。
mapreduce的数据流

我们需要注意的以下几点:

如下图:

3.png

map task将它的输出写在本地磁盘,而不是HDFS,因为这些数据都是暂时的,只需要作为输入提供给reduce,并不是最终结果。

此外还需要说明一点,在一些情况下,我们可以实现一个combiner函数,这个函数工作在每一个map之后,将map函数的输出先聚合好,再将其输出到reduce中。这样可以将map输出的中间结果规模减小,减少和reduce通信的规模。

Chapter 3: The Hadoop Distributed Filesystem

HDFS的设计和基本概念
HDFS被设计用于下面三个目的:

HDFS中块之所以这么大主要有两个原因:

名字节点(namenode)和数据节点(datanode)

由于没有namenode, hdfs就不知道文件的组织结构,因此hadoop1.0中对namenode提供了两个容错机制:

4.png 5.png

这里简单展示一下hadoop的节点距离和3副本备份策略:


6.png 7.png

实际上hadoop先把第一个副本存在client所在的那个namenode(如果是外部的client则随机选取一个),然后把第二和第三个副本存在其他机架上的两个不同的node中。至于更多的副本则随机存储。

我们还需要介绍一下一致性模型(coherency model),即文件在读写时的数据可见性。HDFS中,所有block只有在写完后才对用户可见,如果它正在写则是用户不可见的。因此HDFS提供了两个函数来帮助用户:

hflush(): 保证之前写入的数据都对用户可见。
hsync(): 不仅仅保证可见,还将其写入持久性介质(如硬盘)。
最后我们在提一个hdfs指令:
hadoop distcp < dir1 > < dir2 >
这是hdsf并行地拷贝文件,往往在大规模数据迁移时很有用。

上一篇 下一篇

猜你喜欢

热点阅读