hadoop MapReduce 笔记

来源:互联网 发布:java中排序算法 编辑:程序博客网 时间:2024/06/07 12:34

hadoop简介

诞生背景:

Q1.硬盘存储容量快速增长;而访问速度增长缓慢。

A1.并行读取磁盘


Q2.并行读取的问题:高概率硬件故障、数据合并

A2.HDFS(hadoop distributed filesystem)、MapReduce


Hadoop提供了一个共享存储和分析的系统。存储是由HDFS实现,分析由MapReduce实现。


Hadoop子项目:

  • MapReduce:分布式数据处理模式和执行环境
  • HDFS:分布式文件系统
  • Pig
  • HBase:分布式、列存储数据库。使用HDFS作为底层存储,支持MapReduce批量数据计算和点查询
  • ZooKeeper
  • Hive:分布式数据仓库。管理HDFS中存储的数据。提供基于SQL的查询语言


HDFS在MR任务处理过程中提供了文件操作和存储等支持,MR在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成分布式集群的主要任务。


从MR视角来看:

MR框架是由一个单独运行在主节点上的Jobtracker和运行在每个集群从节点上的Tasktracker共同组成,主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上

MapReduce框架:


JobTracker可以运行于集群中的任意一台计算机上。TaskTracker负责执行任务,它必须运行在DataNode上,DataNode既是数据存储节点,也是计算节点。

当一个Job被提交时,JobTracker接受到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

Tasktracker运行任务的同时,将进度报告送到Jobtracker。Jobtracker记录每个任务的进度情况。
如果TaskTracker出了故障,JobTracker会把任务转交给另一个空闲的TaskTracker重新运行。

MR编程框架


Hadoop上的并行应用程序开发是基于MR编程框架。


MR工作过程包括两个阶段:map阶段、reduce阶段;相应有具体定义的map函数、reduce函数


shuffle过程包括combine和partition

MR编程模型原理:

  • 利用一个输入的key-value对集合来产生一个输出的key-value对集合。
  • MR库通过Map和Reduce两个函数来实现这个框架。
  • 用户自定义的map函数接受一个输入的key-value对,然后产生一个中间的key-value对的集合。MR把所有具有相同的key值的value结合在一起,然后传递个reduce函数。Reduce函数接受key和相关的value结合,reduce函数合并这些value值,形成一个较小的value集合。

分片(split)

Hadoop将输入数据划分成等长的小数据发送给MapReduce,称为“分片”


为每个分片创建一个map任务,来运行用户自定义的map函数,分析每个分片


许多的分片意味着处理每个分片的时间与处理整个数据的时间相比是微不足道的。但是若过分片过小,管理分片和创建map任务的总时间将会影响这行的总时间


理想的分片大小往往是一个HDFS的大小(默认64MB),减少网络传输的消耗
因此,map的数据输入和执行都在一个节点时,Hadoop的性能最佳

细节

map的输出写在本地而不是HDFS,是因为作为中间输出被用于reduce产生最终输出,在作业结束后就可以删除了。
如果某个节点上的map任务在输出给reduce之前失败了,可以再另一个节点上重新运行

reduce的输出一般在HDFS中

shuffle指的是map到reduce之间的过程,包括combine、partition

在reduce之前,可以先对中间数据进行数据合并(Combine),即将中间有相同的key的<key,value>对合并。Combine的过程与reduce的过程类似,但Combine是作为map任务的一部分,在执行完map函数后仅接着执行。Combine能减少中间结果key-value对的数目,从而降低网络流量。

reduce任务的数目是要具体指定的。如果有多个reducer,map任务会对输出进行分区,为每个reduce任务创建一个partition(分区)




0 0
原创粉丝点击