- 浏览: 139121 次
- 性别:
- 来自: 上海
最新评论
-
xueyinv86:
你这个增强版的wordcount是在哪个版本的hadoop上跑 ...
MapReduce入门程序WordCount增强版 -
chenjianjx:
很不错的收集!
几篇关于Hadoop+Hive数据仓库的入门文章 -
canedy:
import org.apache.hadoop.hbase. ...
使用HBase的一个典型例子,涉及了HBase中很多概念 -
天籁の圁:
你的图全部挂了啊
基于Eclipse的Hadoop应用开发环境的配置 -
landyer:
happinesss 写道你是做java开发的吗我是杂货铺,什 ...
MongoDB1.8安装、分布式自动分片(Auto-Sharding)配置备忘
原文地址:http://www.cnblogs.com/end/archive/2011/04/26/2029492.html
假设我们需要处理一批有关天气的数据,其格式如下: 0067011990999991950051507+0000+ 0043011990999991950051512+0022+ 0043011990999991950051518-0011+ 0043012650999991949032412+0111+ 0043012650999991949032418+0078+ 0067011990999991937051507+0001+ 0043011990999991937051512-0002+ 0043011990999991945051518+0001+ 0043012650999991945032412+0002+ 0043012650999991945032418+0078+ 现在需要统计出每年的最高温度。 Map-Reduce主要包括两个步骤:Map和Reduce 每一步都有key-value对作为输入和输出: 对于上面的例子,在map过程,输入的key-value对如下: (0, 0067011990999991950051507+0000+) (33, 0043011990999991950051512+0022+) (66, 0043011990999991950051518-0011+) (99, 0043012650999991949032412+0111+) (132, 0043012650999991949032418+0078+) (165, 0067011990999991937051507+0001+) (198, 0043011990999991937051512-0002+) (231, 0043011990999991945051518+0001+) (264, 0043012650999991945032412+0002+) (297, 0043012650999991945032418+0078+) 在map过程中,通过对每一行字符串的解析,得到年-温度的key-value对作为输出: (1950, 0) (1950, 22) (1950, -11) (1949, 111) (1949, 78) (1937, 1) (1937, -2) (1945, 1) (1945, 2) (1945, 78) 在reduce过程,将map过程中的输出,按照相同的key将value放到同一个列表中作为reduce的输入 (1950, [0, 22, –11]) (1949, [111, 78]) (1937, [1, -2]) (1945, [1, 2, 78]) 在reduce过程中,在列表中选择出最大的温度,将年-最大温度的key-value作为输出: (1950, 22) (1949, 111) (1937, 1) (1945, 78) 其逻辑过程可用如下图表示: 编写Map-Reduce程序,一般需要实现两个函数:mapper中的map函数和reducer中的reduce函数。 一般遵循以下格式: public interface Mapper<K1, V1, K2, V2> extends JobConfigurable, Closeable { void map(K1 key, V1 value, OutputCollector<K2, V2> output, Reporter reporter) throws IOException; } public interface Reducer<K2, V2, K3, V3> extends JobConfigurable, Closeable { void reduce(K2 key, Iterator<V2> values, OutputCollector<K3, V3> output, Reporter reporter) throws IOException; } 对于上面的例子,则实现的mapper如下: public class MaxTemperatureMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { @Override public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); String year = line.substring(15, 19); int airTemperature; if (line.charAt(25) == '+') { airTemperature = Integer.parseInt(line.substring(26, 30)); } else { airTemperature = Integer.parseInt(line.substring(25, 30)); } output.collect(new Text(year), new IntWritable(airTemperature)); } } 实现的reducer如下: public class MaxTemperatureReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int maxValue = Integer.MIN_VALUE; while (values.hasNext()) { maxValue = Math.max(maxValue, values.next().get()); } output.collect(key, new IntWritable(maxValue)); } } 欲运行上面实现的Mapper和Reduce,则需要生成一个Map-Reduce得任务(Job),其基本包括以下三部分: 欲配置JobConf,需要大致了解Hadoop运行job的基本原理: public interface Partitioner<K2, V2> extends JobConfigurable { int getPartition(K2 key, V2 value, int numPartitions); } 下图大概描述了Map-Reduce的Job运行的基本原理: 下面我们讨论JobConf,其有很多的项可以进行配置: 当然不用所有的都设置,由上面的例子,可以编写Map-Reduce程序如下: public class MaxTemperature { public static void main(String[] args) throws IOException { if (args.length != 2) { System.err.println("Usage: MaxTemperature <input path> <output path>"); System.exit(-1); } JobConf conf = new JobConf(MaxTemperature.class); conf.setJobName("Max temperature"); FileInputFormat.addInputPath(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); conf.setMapperClass(MaxTemperatureMapper.class); conf.setReducerClass(MaxTemperatureReducer.class); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); JobClient.runJob(conf); } } Map-Reduce的处理过程主要涉及以下四个部分: JobClient.runJob()创建一个新的JobClient实例,调用其submitJob()函数。 提交任务后,runJob每隔一秒钟轮询一次job的进度,将进度返回到命令行,直到任务运行完毕。 当JobTracker收到submitJob调用的时候,将此任务放到一个队列中,job调度器将从队列中获取任务并初始化任务。 初始化首先创建一个对象来封装job运行的tasks, status以及progress。 在创建task之前,job调度器首先从共享文件系统中获得JobClient计算出的input splits。 其为每个input split创建一个map task。 每个task被分配一个ID。 TaskTracker周期性的向JobTracker发送heartbeat。 在heartbeat中,TaskTracker告知JobTracker其已经准备运行一个新的task,JobTracker将分配给其一个task。 在JobTracker为TaskTracker选择一个task之前,JobTracker必须首先按照优先级选择一个Job,在最高优先级的Job中选择一个task。 TaskTracker有固定数量的位置来运行map task或者reduce task。 默认的调度器对待map task优先于reduce task 当选择reduce task的时候,JobTracker并不在多个task之间进行选择,而是直接取下一个,因为reduce task没有数据本地化的概念。 TaskTracker被分配了一个task,下面便要运行此task。 首先,TaskTracker将此job的jar从共享文件系统中拷贝到TaskTracker的文件系统中。 TaskTracker从distributed cache中将job运行所需要的文件拷贝到本地磁盘。 其次,其为每个task创建一个本地的工作目录,将jar解压缩到文件目录中。 其三,其创建一个TaskRunner来运行task。 TaskRunner创建一个新的JVM来运行task。 被创建的child JVM和TaskTracker通信来报告运行进度。 MapRunnable从input split中读取一个个的record,然后依次调用Mapper的map函数,将结果输出。 map的输出并不是直接写入硬盘,而是将其写入缓存memory buffer。 当buffer中数据的到达一定的大小,一个背景线程将数据开始写入硬盘。 在写入硬盘之前,内存中的数据通过partitioner分成多个partition。 在同一个partition中,背景线程会将数据按照key在内存中排序。 每次从内存向硬盘flush数据,都生成一个新的spill文件。 当此task结束之前,所有的spill文件被合并为一个整的被partition的而且排好序的文件。 reducer可以通过http协议请求map的输出文件,tracker.http.threads可以设置http服务线程数。 当map task结束后,其通知TaskTracker,TaskTracker通知JobTracker。 对于一个job,JobTracker知道TaskTracer和map输出的对应关系。 reducer中一个线程周期性的向JobTracker请求map输出的位置,直到其取得了所有的map输出。 reduce task需要其对应的partition的所有的map输出。 reduce task中的copy过程即当每个map task结束的时候就开始拷贝输出,因为不同的map task完成时间不同。 reduce task中有多个copy线程,可以并行拷贝map输出。 当很多map输出拷贝到reduce task后,一个背景线程将其合并为一个大的排好序的文件。 当所有的map输出都拷贝到reduce task后,进入sort过程,将所有的map输出合并为大的排好序的文件。 最后进入reduce过程,调用reducer的reduce函数,处理排好序的输出的每个key,最后的结果写入HDFS。 当JobTracker获得最后一个task的运行成功的报告后,将job得状态改为成功。 当JobClient从JobTracker轮询的时候,发现此job已经成功结束,则向用户打印消息,从runJob函数中返回。1、Map-Reduce的逻辑过程
2、编写Map-Reduce程序
3、Map-Reduce数据流(data flow)
3.1、任务提交
3.2、任务初始化
3.3、任务分配
3.4、任务执行
3.4.1、Map的过程
3.4.2、Reduce的过程
3.5、任务结束
发表评论
-
thrift安装资料集合
2011-06-22 14:19 1100http://www.buywine168.com/index ... -
在Ubuntu下编译安装Thrift(支持php和c++)
2011-06-22 14:16 1602原文地址:http://www.coder4.com/arch ... -
HBase Thrift 0.5.0 + PHP 5 安裝設定
2011-06-22 14:13 1828原文地址: http://blog.kfchph.com ... -
Hadoop+hbase+thrift H.H.T环境部署
2011-06-21 12:58 1065原文地址:http://blog.sina.com.cn/s/ ... -
php操作hbase例子
2011-06-21 10:59 22981 $GLOBALS['THRIFT_ROOT'] = '/h ... -
HBase技术介绍
2011-06-21 10:54 1053原文地址:http://www.searc ... -
详细讲解Hadoop中的一个简单数据库HBase
2011-06-08 17:29 917原文地址:http://databas ... -
hive sql语法解读
2011-06-08 16:52 1318版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 ... -
Hive 的启动方式
2011-06-08 16:49 2459Hive 的启动方式 hive 命令行 ... -
Hive环境搭建与入门
2011-06-08 16:47 1485原文地址:http://www.jiacheo.org ... -
Hbase入门6 -白话MySQL(RDBMS)与HBase之间
2011-06-08 15:38 1537作者: H.E. | 您可以转载, ... -
Apache Hive入门3–Hive与HBase的整合
2011-06-08 10:03 1534作者: H.E. | 您可以转载, ... -
Apache Hive入门2
2011-06-08 10:00 1297我的偏见: 对于互联 ... -
Apache Hive入门1
2011-06-08 09:59 2502作者: H.E. | 您可以转载, ... -
hbase分布安装部署
2011-06-07 22:37 17751、 hbase安装部署#cd /hadoop# ... -
使用HBase的一个典型例子,涉及了HBase中很多概念
2011-06-07 15:38 1542一个使用HBase的例子,如下。 import java ... -
HBase入门篇4–存储
2011-06-06 21:22 1571作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇3
2011-06-06 21:21 1818作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇2-Java操作HBase例子
2011-06-06 21:18 2374作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇
2011-06-06 21:17 2350作者: H.E. | 您可以转载, ...
相关推荐
Hadoop学习总结之三:Map-Reduce入门
hadoop学习总结,包含HDFS简介,HDFS读写过程解析、Map-Reduce入门、Map-Reduce的过程解析、Hadoop的运行痕迹
Hadoop Map-reduce Job Scheduler Resources Hadoop, Why? 数据太多了,需要能存储、快速分析Pb级数据集的系统 单机的存储、IO、内存、CPU有限,需要可扩展的集群 使用门槛低,数据分析是个庞杂的问题,MPI太复杂 ...
hadoop入门例子实践 wordCount: MAP阶段:使用StringTokenizer 将一行String分离成不同的单词,输出, 例如 REDUCE阶段:<KEY> 例子如下<WORD>> 将VALUE的值进行相加,输出结果 remove duplication MAP阶段: MAP...
目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等,同样也介绍了Hive,HBase详细安装应用! 目前国内应用和研究...
hadoop map reduce 的中文简易教程,能轻松帮助普通用户不需了解太多hadoop底层知识就能实现分布式编程,很好的入门教程。
hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计
hadoop 中文手册 Hadoop文档 下面的文档是一些概念介绍和操作教程,可帮助你开始使用Hadoop。如果遇到了问题,你可以向邮件列表求助或者浏览一下存档...Hadoop Map-Reduce教程 Hadoop本地库 API参考 维基 常见问题
该文档帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和 Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等。
大数据入门程序,便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等
Hadoop, Apache开源的分布式框架。源自Google GFS,BigTable,MapReduce...JobTracker,hadoop的Map/Reduce调度器,负责与TackTracker通信分配计算任务并跟踪任务进度。 TaskTracker,启动和管理Map和Reduce子任务的节点。
本文档为Apache官方Hadoop 1.1.0中文文档 文档目录: 1.概述 2.快速入门 3.集群搭建 ...11.Map-Reduce教程 12.Hadoop本地库 13.Streaming 14.Hadoop Archives 15.Hadoop On Demand 另附带 Hadoop API
近百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,...064 源代码跟踪查看Map Task和Reduce Task数目的个数 065 回顾MapReduce执行过程以及MapReduce核心 066 Hadoop MapReduce框架数据类型讲解 067
4.7.2 .........................................................................20 Map-reduce的运行状态界面 4.7.3 ..........................................................................................
由于文件过大,上传限制,存的是资源百度云盘链接。介绍map,reduce的基本原理,从资源分配的角度深入的讲解hadoop的MR。讲解详细,通俗易懂,好资源,所以拿出来分享
hadoop基础知识,认识hadoop,可作为入门知识,包括map/reduce 和hdfs讲解
MapReduce 借鉴了函数式语言中的思想,用 Map 和 Reduce 两个函数提供了 高层的并行编程抽象模型。 Map: 对一组数据元素进行某种重复式的处理; Reduce: 对 Map 的中间结果进行某种进一步的结果整理。 MapReduce...
Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数 据集操作类型,编程模型比Hadoop MapReduce更灵活。 Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制,因此 ...
Pig 将这些数据流程序编译成(序列)map-reduce 或 Apache Tez 作业,并使用 Hadoop 执行它们。 也可以以“本地”模式(没有 Hadoop 集群)执行 Pig Latin 程序,在这种情况下,所有处理都在单个本地 JVM 中进行。...
了解map和reduce工作原理,以及排序,分组,分区设置,有详细的注释,方便查看学习,适合入门初学者练手