- 浏览: 600101 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Hadoop之shuffle
我们知道每个reduce task输入的key都是按照key排序的。
但是每个map的输出只是简单的key-value而非key-valuelist,所以洗牌的工作就是将map输出转化为reducer的输入的过程。
在map结束之后shuffle要做的事情:
map的输出不是简单的写入本地文件,而是更多的利用内存缓存和预排序工作,以提高效率。
io.sort.mb 用于控制 map 输出时候的内存大小,默认100Mb。
当map所使用的buffer达到一定比例的时候,会启动一个线程来将内存中数据写入磁盘。此时map过程不会暂停直到内存消耗完位置。这个线程会先将内存中的数据按照reducer的数据切分成多块,可能是按照reducer大小hash,然后对于每个块里面的数据按照key进行sort排序,此时假如定义了一个combiner函数,那么排序的结果就是combiner的输入。每当数据缓存大小达到了限制,一个新的spill文件就会被创建。所以,当map所有的数据都被处理了之后,就需要对多个spill文件进行合并操作。
combiner的作用是为了压缩mapper的输出结果,另外combiner函数需要满足n次combiner之后,输出结果都保持一致。当然,合并成一个文件的时候hadoop默认不会压缩数据,但是可以通过设置参数指定某个压缩类对数据进行压缩。
在reducer开始之前shuffle要做的事情分为两步copy和sort 阶段:
copy phrase
每个reducer task新建几个thread用于将mapper的输出并行copy过来,copy时机是当一个mapper完成之后就可以进行。
但是reducer是如何知晓某个mapper是否完成了任务呢,mapper完成之后会给tasktracker发送一个状态更新,然后tasktraker会将该信息发送给jobtrack。然后reducer中的一个线程负责询问jobtracker 每个map的输出位置。而每个mapper上的输出数据需要等到整个job完成之后,jobtracker会通知删除。
sort phrase
将多个map输出合并成一个输入。
example:50个map输出 分5轮进行文件合并,每次将10个文件合并成一个。
最后5个文件可能直接进入reducer阶段。
关于Task中所谓的Speculative Execution是指当一个job的所有task都在running的时候,当某个task的进度比平均进度慢时才会启动一个和当前Task一模一样的任务,当其中一个task完成之后另外一个会被中止,所以Speculative Task(推测式任务)不是重复Task而是对Task执行时候的一种优化策略。
转自:http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/29/3036557.html
我们知道每个reduce task输入的key都是按照key排序的。
但是每个map的输出只是简单的key-value而非key-valuelist,所以洗牌的工作就是将map输出转化为reducer的输入的过程。
在map结束之后shuffle要做的事情:
map的输出不是简单的写入本地文件,而是更多的利用内存缓存和预排序工作,以提高效率。
io.sort.mb 用于控制 map 输出时候的内存大小,默认100Mb。
当map所使用的buffer达到一定比例的时候,会启动一个线程来将内存中数据写入磁盘。此时map过程不会暂停直到内存消耗完位置。这个线程会先将内存中的数据按照reducer的数据切分成多块,可能是按照reducer大小hash,然后对于每个块里面的数据按照key进行sort排序,此时假如定义了一个combiner函数,那么排序的结果就是combiner的输入。每当数据缓存大小达到了限制,一个新的spill文件就会被创建。所以,当map所有的数据都被处理了之后,就需要对多个spill文件进行合并操作。
combiner的作用是为了压缩mapper的输出结果,另外combiner函数需要满足n次combiner之后,输出结果都保持一致。当然,合并成一个文件的时候hadoop默认不会压缩数据,但是可以通过设置参数指定某个压缩类对数据进行压缩。
在reducer开始之前shuffle要做的事情分为两步copy和sort 阶段:
copy phrase
每个reducer task新建几个thread用于将mapper的输出并行copy过来,copy时机是当一个mapper完成之后就可以进行。
但是reducer是如何知晓某个mapper是否完成了任务呢,mapper完成之后会给tasktracker发送一个状态更新,然后tasktraker会将该信息发送给jobtrack。然后reducer中的一个线程负责询问jobtracker 每个map的输出位置。而每个mapper上的输出数据需要等到整个job完成之后,jobtracker会通知删除。
sort phrase
将多个map输出合并成一个输入。
example:50个map输出 分5轮进行文件合并,每次将10个文件合并成一个。
最后5个文件可能直接进入reducer阶段。
关于Task中所谓的Speculative Execution是指当一个job的所有task都在running的时候,当某个task的进度比平均进度慢时才会启动一个和当前Task一模一样的任务,当其中一个task完成之后另外一个会被中止,所以Speculative Task(推测式任务)不是重复Task而是对Task执行时候的一种优化策略。
转自:http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/29/3036557.html
发表评论
文章已被作者锁定,不允许评论。
-
Hadoop namenode的fsimage与editlog详解
2017-05-19 10:04 1190Namenode主要维护两个文件,一个是fsimage,一个是 ... -
Hadoop HBase建表时预分区(region)的方法学习
2017-05-15 11:18 1195如果知道Hbase数据表的key的分布情况,就可以在建表的时候 ... -
Hadoop HBase行健(rowkey)设计原则学习
2017-05-15 10:34 1127Hbase是三维有序存储的,通过rowkey(行键),colu ... -
Hadoop HBase中split原理学习
2017-05-12 13:38 2281在Hbase中split是一个很重 ... -
Hadoop HBase中Compaction原理学习
2017-05-12 10:34 1000HBase Compaction策略 RegionServer ... -
Hadoop HBase性能优化学习
2017-05-12 09:15 689一、调整参数 入门级的调优可以从调整参数开始。投入小,回报快 ... -
Hadoop 分布式文件系统学习
2017-05-10 15:34 507一. 分布式文件系统 分布式文件系统,在整个分布式系统体系中处 ... -
Hadoop MapReduce处理wordcount代码分析
2017-04-28 14:25 595package org.apache.hadoop.exa ... -
Hadoop YARN完全分布式配置学习
2017-04-26 10:27 578版本及配置简介 Java: J ... -
Hadoop YARN各个组件和流程的学习
2017-04-24 19:04 651一、基本组成结构 * 集 ... -
Hadoop YARN(Yet Another Resource Negotiator)详细解析
2017-04-24 18:30 1162带有 MapReduce 的 Apache Had ... -
Hive 注意事项与扩展特性
2017-04-06 19:31 7531. 使用HIVE注意点 字符集 Hadoop和Hive都 ... -
Hive 元数据和QL基本操作学习整理
2017-04-06 14:36 1035Hive元数据库 Hive将元数据存储在RDBMS 中,一般常 ... -
Hive 文件压缩存储格式(STORED AS)
2017-04-06 09:35 2324Hive文件存储格式包括以下几类: 1.TEXTFILE ... -
Hive SQL自带函数总结
2017-04-05 19:25 1144字符串长度函数:length ... -
Hive 连接查询操作(不支持IN查询)
2017-04-05 19:16 730CREATE EXTERNAL TABLE IF NOT ... -
Hive优化学习(join ,group by,in)
2017-04-05 18:48 1819一、join优化 Join ... -
Hive 基础知识学习(语法)
2017-04-05 15:51 904一.Hive 简介 Hive是基于 Hadoop 分布式文件 ... -
Hive 架构与基本语法(OLAP)
2017-04-05 15:16 1254Hive 是什么 Hive是建立在Hadoop上的数据仓库基础 ... -
Hadoop MapReduce操作Hbase范例学习(TableMapReduceUtil)
2017-03-24 15:37 1217Hbase里的数据量一般都 ...
相关推荐
Mapper是MapReduce的第一阶段,它的主要任务是对输入数据进行处理,将其转化为键值对(key-value pairs)形式。在给定的描述中,提到输入数据是从HDFS导入并通过Sqoop的,通常这些数据是以行格式存储,字段之间用...
本文将深入探讨Map JOIN和Reduce JOIN两种在Hadoop中实现JOIN的方法,并通过代码示例来阐述它们的工作原理。 1. Map JOIN: Map JOIN在Hadoop中主要应用于小表与大表的连接。小表的数据可以完全加载到内存中,而大...
MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的次数。在这个案例中,我们将深入探讨如何在 ...
该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **应用场景**:适用于大数据分析、搜索引擎索引构建、日志文件分析等场景。 #### 二、MapReduce 工作原理 1...
每个Map任务处理一个数据块,将其转化为中间键值对。Reduce阶段则负责聚合Map阶段产生的中间结果,根据相同的键进行归并,最终生成最终结果。 在书中,作者可能详细介绍了MapReduce的工作原理,包括JobTracker和...
6. **Shuffle与Sort**:Map的输出经过排序后传递给Reducer,这个过程称为Shuffle。Shuffle过程中,数据会被分区并按key排序,以便Reducer能正确处理。 7. **故障恢复机制**:Hadoop设计有强大的容错机制,当...
在大数据处理领域,Hadoop MapReduce 是一个至关重要的框架,用于分布式处理海量数据。通过优化 MapReduce Job 的配置和设计,可以显著提升处理效率。以下是一些关键知识点,旨在帮助你提升 Hadoop MapReduce Job 的...
Map 函数接收输入数据块,并将其转换为一系列键值对。这一阶段的主要任务是对输入数据进行预处理,包括分割、过滤等操作。 ##### Reduce 阶段 Reduce 函数接收来自 Map 函数产生的键值对,并对其进行汇总、排序、...
2. 自定义InputFormat和OutputFormat:展示如何根据数据格式定制输入输出格式,以适应不同的数据源和需求。 3. 键值对处理:通过自定义Partitioner、Comparator和Reducer,实现更复杂的键值对排序和分区逻辑。 4. ...
Map阶段的源码中,我们能看到InputFormat类负责切分输入数据,生成RecordReader对象,该对象读取数据并转化为键值对。Mapper类处理这些键值对,生成新的中间键值对。Map任务的输出会被分区和排序,然后通过网络传输...
Driver类会初始化Job对象,设置输入输出路径,配置Mapper和Reducer类,以及其他的参数设置。最后,通过Job的submit()方法提交作业到Hadoop集群。 在Hadoop生态系统中,MapReduce可以与其他组件如HDFS(Hadoop ...
Mapper接收输入记录,进行处理(如词频统计),并将结果输出为键值对(, value>)。 2. **Reduce阶段**:Reducer从所有Mapper中收集相同键的值,将它们组合并处理,最终生成新的键值对作为输出。这一步骤通常用于...
首先,Mapper是Hadoop MapReduce的第一阶段,它负责将输入数据转化为键值对。Mapper类的核心方法是map(),这个方法接收一个键值对,经过业务逻辑处理后,生成新的键值对。Mapper的运行环境由RecordReader提供输入,...
在Windows平台上进行Hadoop的Map/Reduce开发可能会比在Linux环境下多一些挑战,但通过详细的步骤和理解Map/Reduce的工作机制,开发者可以有效地克服这些困难。以下是对标题和描述中涉及知识点的详细说明: **Hadoop...
3. 输入输出格式:了解Hadoop如何处理输入文件和生成输出文件,包括RecordReader和RecordWriter接口。 4. 分布式缓存:如果需要,可以学习如何使用Hadoop的分布式缓存来共享文件或jar包。 5. Java编程:因为Hadoop ...
Reducer函数则直接将输入的key输出为输出的key,value部分设置为空。 通过上述案例,初学者可以了解到MapReduce如何处理并行化计算,以及如何编写Map和Reduce函数来实现数据处理的具体需求。这个案例也展示了如何将...
- Shuffle与Sort:Mapper的输出被排序并分组,为Reducer准备输入。 - Reduce阶段:Reducer处理来自Mapper的键值对,执行聚合或汇总操作,产生最终结果。 2. **Hadoop 应用开发** 开发Hadoop应用通常涉及编写...
作业配置包含输入输出路径、任务参数等信息。客户端提交作业给JobTracker,JobTracker负责分发软件、配置并监控任务执行。 10. **应用案例**: MapReduce在许多领域都有广泛应用,如搜索引擎的PageRank计算、日志...
1. **输入**:输入数据通常是以块(Block)的形式存储在HDFS(Hadoop Distributed File System)上,每个块大小默认为128MB。 2. **Mapper**:Map函数将输入块中的每一行文本作为键值对(, Text>,行号与整行内容)...