Hadoop知识点总结

1. 什么是Hadoop

大数据处理的分布式系统

2. Hadoop****生态圈

三大核心:

HDFS集群:分布式文件存储系统

YARN集群:运算资源调度

MapReduce分布式计算模型

3. 讲一下MapReduce

Map Reduce把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果Reduce

为海量数据提供计算/抽象成为map和reduce两阶段,屏蔽了分布式计算框架细节

Map对数据集独立元素定制操作,生成键值对的中间结果;

Reduce对中间结果键相同的值进行规约,得到最终结果

4. SparkMapreduce的区别

Spark从Mapreduce发展而来,继承了其分布式并行计算的优点,改进了下述缺陷:

a.Spark把中间计算结果存放在内存中,能够实现数据高效共享,迭代运算效率高。Mapreduce中的计算中间结果是保存在磁盘上的,这样必然影响整体运行速度。

b.Spark容错性高。Spark支持DAG图的分布式并行计算,RDD数据集部分丢失,可根据血统来对它们进行重建;同时还有checkpoint容错机制;

c.Spark更加通用。hadoop只提供了map和reduce两种操作,Spark还提供了更多操作,比如map,filter,flatmap,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort,partitionby等转换操作及collect,reduce,lookup和save等行动操作

5. 使用Hadoop需要启动哪些进程

Master节点:

NameNode:管理文件系统

DataNode:文件系统的工作节点

Secondary NameNode:用来监控HDFS的辅助后台程序,存储NameNode的快照,是其备胎

JobTracker:连接应用程序与Hadoop,监控所有task

TaskTracker:从节点上管理各自的Task

Slave****节点:

DataNode:从节点上管理文件

TaskTracker:从节点上管理task

6. HDFS****读写机制

读操作:

1、客户端启动通过调用文件系统对象的 open() 方法读取请求;它是DistributedFileSystem 类型的对象。

2、此对象使用 RPC 连接到 namenode 并获取的元数据信息,如该文件的块的位置。 请注意,这些地址是文件的前几个块。

3、响应该元数据请求,具有该块副本的 DataNodes 地址被返回。

4、一旦接收到 DataNodes的地址,FSDataInputStream类型的一个对象被返回到客户端。 FSDataInputStream包含DFSInputStream这需要处理交互DataNode和NameNode。在上图所示的步骤4,客户端调用 read() 方法,这将导致DFSInputStream 建立与第一个 DataNode 文件的第一个块连接。

5、以数据流的形式读取数据,其中客户端多次调用 “read() ” 方法。 read() 操作这个过程一直持续,直到它到达块结束位置。

6、一旦到块的结尾,DFSInputStream 关闭连接,移动定位到下一个DataNode 的下一个块。

7、一旦客户端已读取完成后,它会调用 close()方法。

写操作:

1、客户端通过调用 DistributedFileSystem对象的create() 方法创建一个新的文件,并开始写操作 - 在上面的图中的步骤1;

2、DistributedFileSystem对象使用 RPC 调用连接到 NameNode,并启动新的文件创建。但是,此文件创建操作不与文件任何块相关联。NameNode 的责任是验证文件(其正被创建的)不存在,并且客户端具有正确权限来创建新文件。如果文件已经存在,或者客户端不具有足够的权限来创建一个新的文件,则抛出 IOException 到客户端。否则操作成功,并且该文件新的记录是由 NameNode 创建;

3、一旦 NameNode 创建一条新的记录,返回FSDataOutputStream 类型的一个对象到客户端。客户端使用它来写入数据到 HDFS。数据写入方法被调用(图中的步骤3)。

4、FSDataOutputStream包含DFSOutputStream对象,它使用 DataNodes 和 NameNode 通信后查找。当客户机继续写入数据,DFSOutputStream 继续创建这个数据包。这些数据包连接排队到一个队列被称为 DataQueue;

5、还有一个名为 DataStreamer 组件,用于消耗DataQueue。DataStreamer 也要求 NameNode 分配新的块,拣选 DataNodes 用于复制;

6、 现在,复制过程始于使用 DataNodes 创建一个管道。 在我们的例子中,选择了复制水平3,因此有3 个 DataNodes 管道;

7、所述 DataStreamer 注入包分成到第一个 DataNode 的管道中。

8、在每个 DataNode 的管道中存储数据包接收并同样转发在第二个 DataNode 的管道中。

9、 另一个队列,“Ack Queue”是由 DFSOutputStream 保持存储,它们是 DataNodes 等待确认的数据包。

10、 一旦确认在队列中的分组从所有 DataNodes 已接收在管道,它从 'Ack Queue' 删除。在任何 DataNode 发生故障时,从队列中的包重新用于操作。

11、在客户端的数据写入完成后,它会调用close()方法(第9步图中),调用close()结果进入到清理缓存剩余数据包到管道之后等待确认。

12、一旦收到最终确认,NameNode 连接告诉它该文件的写操作完成。

7. Hadoop序列化和反序列化

序列化就是把内存中的对象,转换成字节序列以便于存储(持久化)和网络传输。

反序列化就是将收到字节序列或者是硬盘的持久化数据,转换成内存中的对象。

Hadoop的序列化机制:Writable

特点:数据紧凑 对象可重用 可扩展性

8. MapReduce和Spark的shuffle对比

Shuffle是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据。

从Map端输出到Reduce端输入的过程广义的称为shuffle,处理其间的中间结果

Shuffle****过程本质上都是将Map端获得的数据使用分区器进行划分,并将数据发送给对应的Reducer 的过程。

Shuffle涉及到磁盘读写和网络传输,因此性能高低影响整个程序的运行效率。

Mapreduce

Map端的spill操作,reduce端的copy/merge/reduce操作

Spark

在mapredue基础上对排序/合并逻辑做了一些优化

普通机制的Hash Shuffle,通过复用buffer来优化产生小文件的数量的合并机制。

异同:

整体功能上没有大差别。

流程上两者差别不小。 Hadoop MapReduce 是 sort-based,进入 combine和 reduce的 records必须先 sort。这样的好处在于 combine/reduce可以处理大规模的数据,因为其输入数据可以通过外排得到。以前 Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行合并,不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey的操作。在Spark 1.2之后,sort-based变为默认的Shuffle实现。

流程实现上两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几个阶段:map, spill, merge, shuffle, sort, reduce等。每个阶段各司其职,可以按照过程式的编程思想来逐一实现每个阶段的功能。在 Spark 中,没有这样功能明确的阶段,只有不同的 stage 和一系列的 transformation,所以 spill, merge, aggregate 等操作需要蕴含在 transformation中。

你可能感兴趣的:(Hadoop知识点总结)