入门hadoop的基础概念(1)

本博客参考《Hadoop权威指南》第三版的第一第二章节,本文主要记录本人步入大数据领域的学习过程中的基本概念。

  1. Hadoop提供了一个可靠的共享储存和分析系统:①HDFS(Hadoop的文件系统)实现数据的储存。②MapReduce实现数据的分析和处理。而这两者就是hadoop的核心价值。
  2. MapReduce是一个批量查询处理器,能在合理的时间范围处理针对整个数据集的动态查询。
  3. MapReduce尽量在计算节点上储存数据,以实现数据的本地快速访问。
  4. MapReduce是一种可用于数据处理的编程模型,Hadoop可以运行各种语言版本的MapReduce程序。MapReduce本质上是并行运行的,所以可以将大规模的数据分析任务分发给任何一个拥有足够多机器的数据中心。
  5. MapReduce任务过程分为两个阶段:map阶段和Reduce阶段。每个阶段都以键值对作为输入和输出,程序员还需要写两个函数:map函数和Reduce函数。map阶段的输入是NCDC原始数据,举一个很简单的例子,我们选择文本格式作为输入格式,将数据集的每一行作为文本输入,键是某一行起始位置的偏移量(我们可能对此并不感兴趣),而map函数的输出也是键值对的形式.map的输出经由MapReduce框架处理后,最后发送到Reduce函数,reduce函数再进行对应的处理.
  6. MapReduce作业(job)是客户端需要执行的一个工作单元:包括输入数据,MapReduce程序和配置信息.Hadoop将任务分成若干个小任务(task)来执行,它包括两类任务:Map任务和Reduce任务.
  7. 两类节点控制控制着作业的执行过程:一个jobtracker以及一系列的tasktracker.前者通过调度后者来协调所有运行在系统上的作业,后者在运行任务的同时将运行的进度报告给前者,前者由此记录每项作业任务的整体情况.
  8. MapReduce在作业(job)是客户端需要执行的一个工作单元:包括输入数据,MapReduce程序和配置信息.Hadoop将作业分成若干个小任务来执行,其中包括两类任务:map任务和reduce任务.两类节点控制作业的执行过程:一个jobtracker和一系列tasktracker,前者通过调度后者上运行的任务来协调所有运行在系统上的作业,后者在运行任务的同时将运行报告发送给jobtracker,jobtracker由此记录每项作业任务的整体进度情况.
  9. hadoop将MapReduce的输入数据划分为等长的小数据块,称为输入分片或简称为”分片”,hadoop为每一个分片构建一个map任务,并由该任务运行用户自定义的map函数从而处理分片中的每项记录.一个合理分片大小趋向于HDFS一个块的大小,默认是64MB.(好像hadoop2.x是128M,此时博主还是小白,不知道情况)
  10. 数据本地优化:hadoop在储存有输入数据的节点上运行map任务,可以获得最佳性能.
  11. map任务将其输出写入本地磁盘,而非HDFS,原因是map的输出是中间结果,只有通过Reduce任务处理后才会产生最终的输出结果,一旦作业完成,map的输出结果就可以删除.
  12. 但是reduce任务不具备数据本地化的优势,因为它的输入可能是多个mapper的输出,而reduce的输出通常储存在HDFS块,第一个复本储存在本地节点上,其他复本储存在其他机架节点中.
  13. 如果有许多的reduce任务,那么每一个map任务就会针对输出进行分区(partition),即为每一个reduce任务建一个分区,每一个分区有许多键(及其对应的值),每一个键对应的键/值对记录在同一个分区中.分区由用户定义的partition函数控制,通常会使用默认的partition通过哈希函数来分区.
  14. map任务和reduce任务之间的数据流称为shuffle,因为每一个reduce任务的输入都来自许多map任务.最后当数据可以完全并行时,即无需混洗,可能会出现没有reduce任务的情况,此时唯一的非本地节点数据传输是map任务将结果写入HDFS.

猜你喜欢

转载自blog.csdn.net/qq_37993487/article/details/79882056