- 浏览: 143375 次
- 性别:
- 来自: 上海
-
最新评论
-
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 1157http://www.buywine168.com/index ... -
在Ubuntu下编译安装Thrift(支持php和c++)
2011-06-22 14:16 1676原文地址:http://www.coder4.com/arch ... -
HBase Thrift 0.5.0 + PHP 5 安裝設定
2011-06-22 14:13 1887原文地址: http://blog.kfchph.com ... -
Hadoop+hbase+thrift H.H.T环境部署
2011-06-21 12:58 1115原文地址:http://blog.sina.com.cn/s/ ... -
php操作hbase例子
2011-06-21 10:59 23431 $GLOBALS['THRIFT_ROOT'] = '/h ... -
HBase技术介绍
2011-06-21 10:54 1102原文地址:http://www.searc ... -
详细讲解Hadoop中的一个简单数据库HBase
2011-06-08 17:29 952原文地址:http://databas ... -
hive sql语法解读
2011-06-08 16:52 1371版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 ... -
Hive 的启动方式
2011-06-08 16:49 2521Hive 的启动方式 hive 命令行 ... -
Hive环境搭建与入门
2011-06-08 16:47 1541原文地址:http://www.jiacheo.org ... -
Hbase入门6 -白话MySQL(RDBMS)与HBase之间
2011-06-08 15:38 1580作者: H.E. | 您可以转载, ... -
Apache Hive入门3–Hive与HBase的整合
2011-06-08 10:03 1583作者: H.E. | 您可以转载, ... -
Apache Hive入门2
2011-06-08 10:00 1364我的偏见: 对于互联 ... -
Apache Hive入门1
2011-06-08 09:59 2561作者: H.E. | 您可以转载, ... -
hbase分布安装部署
2011-06-07 22:37 18221、 hbase安装部署#cd /hadoop# ... -
使用HBase的一个典型例子,涉及了HBase中很多概念
2011-06-07 15:38 1610一个使用HBase的例子,如下。 import java ... -
HBase入门篇4–存储
2011-06-06 21:22 1602作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇3
2011-06-06 21:21 1866作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇2-Java操作HBase例子
2011-06-06 21:18 2417作者: H.E. | 您可以转载, 但必须以超链接形式标明文章 ... -
HBase入门篇
2011-06-06 21:17 2412作者: H.E. | 您可以转载, ...
相关推荐
在深入学习Hadoop Map-Reduce之前,确保Hadoop已安装、配置且运行正常。对于初次使用者,推荐参考Hadoop快速入门指南;对于大型分布式集群环境,则需查阅Hadoop集群设置文档,以确保系统能够高效稳定地运行Map-...
“Hadoop学习总结之三:Map-Reduce入门.doc”介绍了MapReduce编程模型,它是Hadoop处理数据的主要计算框架。Map阶段将输入数据分割成键值对,通过映射函数进行初步处理;Reduce阶段则将Map的输出聚合,通过化简函数...
**Map-Reduce入门** Map-Reduce是Hadoop的另一核心组件,用于大规模数据集的并行计算。它分为两个主要阶段:Map阶段和Reduce阶段。 1. **Map阶段**:在这个阶段,输入数据被分割成多个小片(split),然后分配给...
1. **Hadoop学习总结之三:Map-Reduce入门.doc**:这是一份关于MapReduce的入门文档,MapReduce是Hadoop的核心计算模型,它将大型数据集划分为小块,并在分布式集群上并行处理。 2. **Hadoop学习总结之一:HDFS简介...
6. Hadoop数据输入与输出:学习如何使用InputFormat和OutputFormat进行数据读取和写入,以及自定义InputFormat和OutputFormat的方法。 7. Hadoop作业提交与监控:了解如何使用Hadoop命令行工具提交作业,以及如何...
### Hadoop 学习总结 #### 一、HDFS简介 **1.1 数据块(Block)** HDFS(Hadoop Distributed File System)是Hadoop的核心组件之一,它主要用于存储大规模的数据集。HDFS默认的基本存储单位是64MB的数据块。与...
### Hadoop入门学习文档知识点梳理 #### 一、大数据概论 ##### 1.1 大数据概念 - **定义**:大数据是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。 - **特点**: - **Volume(大量)...
### 高级软件人才培训专家-Hadoop课程资料-3-第三章 - MapReduce & YARN入门 #### 知识点一:分布式计算概述 - **定义**:分布式计算是一种计算模型,它通过网络将任务分配到多台计算机上并行处理,以提高计算效率...
- 通过`Window -> Preferences -> Hadoop Map/Reduce`配置Hadoop路径。 - 选择`Hadoop installation directory`,点击`Browse`,选中Hadoop安装目录。 - 在Eclipse中显示MapReduce工具栏。 - **创建Map/Reduce...
### 配置MapReduce开发环境详解 #### 一、引言 MapReduce是Apache Hadoop框架的核心组件之一,主要用于处理大规模数据集的...希望本文能够帮助您快速入门MapReduce开发,并为进一步学习大数据处理技术打下坚实的基础。
### Hadoop 2快速入门指南知识点详解 #### 一、背景与概念 1. **Apache Hadoop定义**:Hadoop是一种开源软件框架,用于分布式存储和处理大型数据集。它能够在集群环境中运行,并且能够自动处理节点故障问题,提供...
《Hadoop2.2.0安装配置及实例教程入门宝典》 在大数据处理领域,Hadoop是一个不可或缺的工具,其分布式存储和计算能力为企业级数据处理提供了强大的支持。本教程将带你逐步走进Hadoop的世界,从零开始,教你如何在...
### Hadoop入门指南知识点概述 #### 一、Hadoop简介 - **定义**: Hadoop是一个开源软件框架,用于分布式存储和处理大型数据集。 - **核心组件**: - **HDFS (Hadoop Distributed File System)**: 分布式文件系统,...
2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System(NDFS)分别被纳入到 Hadoop 项目中,Hadoop 就此正式诞生,标志着大数据时代来临。 Hadoop 三大发行版本:Apache、Cloudera、Hortonworks。Apache ...
- MapReduce 模型:理解Map和Reduce两个主要阶段,以及Shuffle和Sort的过程。 - JobTracker与TaskTracker(旧版)/ResourceManager与NodeManager(YARN):了解任务调度和执行的逻辑。 - 自定义Mapper和Reducer:...
Hadoop Map-reduce Job Scheduler Resources Hadoop, Why? 数据太多了,需要能存储、快速分析Pb级数据集的系统 单机的存储、IO、内存、CPU有限,需要可扩展的集群 使用门槛低,数据分析是个庞杂的问题,MPI太复杂 ...
每个案例都详细列出了实践步骤,包括如何编写 Map 和 Reduce 函数、如何配置 Hadoop 环境、如何运行 MapReduce 任务等。 #### 六、总结 Hadoop MapReduce 是一种非常强大的分布式数据处理工具,它通过简单的编程...
通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...
hadoop入门例子实践 wordCount: MAP阶段:使用StringTokenizer 将一行String分离成不同的单词,输出, 例如 REDUCE阶段:<KEY> 例子如下<WORD>> 将VALUE的值进行相加,输出结果 remove duplication MAP阶段: MAP...