Hadoop初学-mapreduce

看完hadoop权威指南第一,二章,初步了解了hadoop的结构和相关生态,主要详细从第二章mapreduce学习开始,现总结备查。

什么是mapreduce?

读完后,就问自己什么是mapreduce,想自己理解归纳下。

mapreduce是一种分布式的并行计算编程模型。主要把计算分map和reduce两个阶段。

  1. map阶段是把原始输入数据分为多块输入到多个map函数中进行并行的逻辑处理和排序,然后输出中间结果;
  2. reduce阶段是以map阶段的多个输出汇聚后,作为reduce函数的输入,再由reduce函数进行汇总逻辑计算,然后输出最后结果。

两个阶段都是通过KEY/VALUE的方式作为输入和输出。一般map的输入可以是文件格式(如文件行号作为KEY,每行数据作为VALUE)。

hadoop的mapreduce工作模式

hadoop中的mapreduce是由job控制和执行的。一个job包括:输入数据,mapreduce程序和配置。

  • 准备输入数据到hadoop的HDFS(分布是文件系统,同时负责把原始输入数据分割个小块,也叫分片。),由namenode主节点控制分片逻辑和元数据,分别保存在多个datanode节点机上。
  • jobtracker(任务主控机,和HDFS的namenode一般在一台机器上)生成多个task,协调多个tasktracker来分别并行执行计算。通常在存储输入数据分片的每个datanode上运行计算(数据就近计算优化:data locality optimization)
  • 一般来说,hadoop为每个分片构建一个map任务,在jobtracker的协调下由tasktracker进行运算,然后把多map任务的输出排序后,通过网络发送给一个reduce任务节点(也是tasktracker,由jobtracker协调),合并数据后由reduce函数继续计算处理并输出最后结果。
  • 关于分片的大小:如果太小,片总数量多,管理和协调分片及计算的时间和构建map任务的时间想多较多;如果太大,并行计算的任务数太小,负载平衡的效果则受到影响。原始数据的分片在hadoop的HDFS中一般是64M,但是可以根据实际情况进行参数调整。
  • map的计算结果是中间结果一般保存在节点本地磁盘,因为中间结果是临时的,不需要写多份;reduce的最终结果保存在HDFS上。



 书中hadoop-HDFS的数据量


原始数据的输入有推和拉两种方式

  • 推一般是0.20版本前的JAVA-API提供的每次map函数只读取一行的处理方式(也可以使用实例变量保持每次读取的数据,然后在批量处理,实现拉方式);
  • 拉方式是0.20后的新API提供的UNIX标准流方式进行输入输出,这就和JAVA-IO的处理方式一样,由read来控制读取的数量多少和处理时机。

hadoop的流(streaming)

hadoop的mapreduce程序框架提供了UNIX标志流作为hadoop和应用程序间的接口,所以可以使用任何支持标志输入/输出流的语音进行mapreduce程序开发(基本大部分语音都支持,呵呵)。

本节无源代码,因为主要是理论,代码也是书上的示例,拷贝无意义。

猜你喜欢

转载自acooly.iteye.com/blog/1207737
今日推荐