Hadoop 基础知识2

第2周第1次作业

1、什么是Hadoop?

Hadoop是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了分布式文件系统HDFS和MapReduce计算模型,借助于Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的存储与处理分析。HDFS是针对谷歌文件系统GFS的开源实现,MapReduce是针对谷歌MapReduce的开源实现。Hadoop是基于Java语言开发的,具有很好的跨平台特性。

2、大数据生态系统主要包括哪些方面?

Hadoop 基础知识2

3、计算机集群的基本架构是怎样的?

4、简述分布式文件系统的结构?

(1)采用分块策略。文件被分成若干个块进行存储,块是数据读写的基本单元。

(2)采用主从式节点策略。主节点,也称名称节点,负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系。从节点,也称数据节点,负责数据的存储和读取,在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应数据节点;在读取时,客户端从名称节点获得数据节点和文件块的映射关系,然后就可以到相应位置访问文件块。数据节点也要根据名称节点的命令创建、删除数据块和冗余复制。

(3)采用多副本存储策略。文件块会被复制为多个副本,存储在不同的节点上,而且存储同一文件块的不同副本的各个节点会分布在不同的机架上。

第2周第2次作业

1、HDFS有哪些局限性?

(1)HDFS主要是面向大规模数据批量处理而设计的,采用流式数据读取(以数据块为单位,而不以磁盘块为单位),不适合用在需要较低延迟的应用场合。

(2)HDFS无法高效存储和处理大量小文件。

(3)HDFS采用了“一次写入、多次读取”的简单文件模型,不支持多用户写入及任意修改文件,只允许对文件执行追加操作,不能执行随机写操作。

2、HDFS名称节点的数据结构、启动过程是怎样的?

HDFS名称节点的数据结构:在HDFS中,名称节点负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即FsImage和EditLog。FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据(组成文件的块,但并不记录每个块与数据节点之间的映射关系,映射关系将存放在名称节点的内存中)。EditLog用于记录所有针对文件的创建、删除、重命名等操作。

HDFS名称节点的启动:名称节点在启动时,会将FsImage的内容加载到内存中,然后执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步。这个操作完成以后,就会创建一个新的FsImage文件和一个空的EditLog文件。名称节点启动成功并进入正常运行状态以后,HDFS中的更新操作都会被写到EditLog文件中,而不是直接写入FsImage。名称节点在启动时还会扫描所有数据节点,重构得到每个文件各个块所在的数据节点的位置信息。当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。(名称节点在启动过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。)(HDFS每次执行写操作之后,在向客户端发送成功代码之前,EditLog文件都需要同步更新。即文件变化→将变化情况写入EditLog文件→发送成功代码给客户端)

3、HDFS第二名称节点有什么作用?

首先,可以完成EditLog与FsImage的合并操作,减小EditLog文件大小,缩短名称节点重启时间。其次,第二名称节点会定期与名称节点通信,周期性地备份名称节点中的元数据信息,因此第二名称节点可以作为名称节点的“检查点”,但不能起到“热备份”的作用(HDFS并不支持把系统直接切换到第二名称节点)。

4、HDFS第二名称节点的工作过程是怎样的?

5、HDFS客户端可以通过什么方式来访问HDFS中的数据?

客户端可以通过类似Shell的命令行方式来访问HDFS中的数据,应用程序可以通过HDFS提供的Java API来访问HDFS文件系统。

第3周第2次作业

1、HDFS对数据进行冗余存储有什么好处?

(1)加快数据传输速度(2)容易检查数据错误(3)保证数据的可靠性

2、HDFS默认的数据存放策略是怎样的?

HDFS默认的冗余复制因子是3,每一个文件块会被同时保存到3个地方,其中,有两份副本放在同一个机架的不同机器上面,第三个副本放在不同机架的机器上面。一般而言,HDFS的副本放置策略如下:

(1)如果是在集群内发起写操作请求,则把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作请求,则从集群内部挑选一台磁盘不太满、CPU不太忙的数据节点,作为第一个副本的存放地。

(2)第二个副本会被放置在与第一个副本不同的机架的数据节点上。

(3)第三个副本会被放置在与第一个副本相同的机架的其他节点上。

(4)如果还有更多的副本,则继续从集群中随机选择数据节点进行存放。

3、HDFS的数据读取策略是怎样的?

HDFS提供了一个API可以确定一个数据节点所属的机架ID,HDFS内部客户端也可以调用API获取自己所属的机架ID。

客户端读取数据时,首先从名称节点获得数据块不同副本的存放位置列表,然后调用API来确定客户端和这些数据节点所属的机架ID。当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。

4、HDFS的数据复制策略是怎样的?

HDFS的数据复制采用了流水线复制的策略。要复制的文件首先会被写入本地,并被切分成若干块。每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端。客户端把数据首先写入列表中的第一个数据节点,同时把列表传给第一个数据节点。当第一个数据节点接收到4KB数据的时候,写入本地,并且向列表中的第二个数据节点发起连接请求,把自己已经接收到的4KB数据和列表传给第二个数据节点。当第二个数据节点接收到4KB数据的时候,写入本地,并且向列表中的第三个数据节点发起连接请求,依次类推,列表中的多个数据节点形成一条数据复制的流水线。最后,当文件写完的时候,数据复制也同时完成。

5、Hadoop采用什么机制来确保名称节点的安全?

Hadoop采用两种机制来确保名称节点的安全:第一,把名称节点上的元数据信息同步存储到其他文件系统(比如远程挂载的网络文件系统NFS)中。第二,运行一个第二名称节点。当名称节点发生宕机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。

6、如果HDFS的数据节点出错,名称节点将如何处理?

当数据节点出错时,会导致一些数据块的副本数量小于冗余因子。名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。

补充1、客户端读取HDFS文件的时候,是一次性把所有块读取出来,还是需要哪块读哪块?

需要哪块读哪块。

网络传输和磁盘错误等因素,都会造成数据错误。客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据。在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径(名称节点上的路径)的隐藏文件里面。当客户端读取文件的时候,会先读取该信息文件,然后读取相应数据,再利用该信息文件对每个读取的数据块进行校验。如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

补充2、HDFS采用流式数据读取,需要哪块读哪块,为什么还会有较高的延迟?

随机读取——读取本地文件,想读哪个数据点就读哪个数据点。

顺序流式读取——读取网络文件,先下载后读取数据,网络配置较低,实时性不高。

实时流式读取——读取网络文件,先下载后读取数据,网络配置较高,实时性强。