`
侯上校
  • 浏览: 223483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hadoop记录

 
阅读更多
MapReduce的特征
1. 每个分片输入的文件可以比较大。默认64M



Map1结果与Map2结果重叠现象?(传统的分布式计算无法解决)
方案:Map2与Map2原封不动的把数据传到Reduce; 问题:结果Map啥事没干,Reduce最终累死, 分而治之成为了空谈。
最终方案:使用partition把相同key的结果分配到同一个reduce上执行

输入文件把切分成多个块, 每个块的默认大小是64M, 每一个块就是一个maptask任务
map任务工作过程:
Map从HDFS上获取数据块(Datanode上每个map任务都会有一个内存缓冲区(默认100M),用来存储它输出的结果「有它的原因:减少对磁盘的读写频率」)
如果map结果很大使缓冲区默认100M满了后将缓冲区中数据spill到磁盘上(spill过程), 默认是80%时就spill(可以设置), spill过程中map还产生结果; spill过程
对数据进行sort; spill出来的单独文件(又叫溢写文件);如果有大数据量的话,就生成多个溢写文件,又要将这些文件合并起来(merge过程「可以通过参数设置每次merge多少个文件」); 问题:如果merge只是只是合并过程,像WordCount例子,第一个溢写文件中key:name value:4, 第二个溢写文件key:name value:3 的话,merge后还会出现此key值的,所以如果之前设置了combiner,就会使用combiner将相同的key的value进行合并; 最终的这个输出文件也是存储在本地磁盘中。

reduce任务工作过程:
reduce是将map的输出作为reduce的输入,只要有一个map任务执行完就会有reduce任务开始执行。实际运行过程中,map与reduce运行过程很可能不是在同一个datanode上,那它们是通过什么来联系的呢?reduce是通过http向JobTracker发请求看那些map执行完了,然后从map所在的TaskTracker远程获取map的输出文件,注意:并不是获取整个map的输出文件, 而是获取reduce能处理的了的数据; 在这个下载过程中,也会做归并排序,因为不同的map很有可能含有相同的key值; 对于reduce来说它的文件来源可能来自多个map,这个下载过程可以是并行的,不过这个并行数据可以设置的,默认是5,即使reduce 所需要的数据是从很多个map上的(若是大于设置的并行度),也只能一次并行的从设置的这么多个Map上下载所需数据;copy获取到的数据也是放到内存当中,


问题:处理10亿条数据,只求最大值, 这样的话在网上传输占了很大的带宽/专利计算中最终会把数据聚集到reduce端,加重reduce负担

Combiner:就是把了减少map与reduce间数据传输而设置的; 
注意:combine的输入和reduce的完全一致,输出和map的完全一致;一个combiner只是处理一个结点的输出,不像reduce享受shuffle后的数据;“迷你reduce”

注意几点:
1.与map和reduce不同,combiner没有默认的实现
2.并不是所有的任务都适合使用combiner,比如 求最大值,求和可以, 求中值不行, 平均值也应该不行;
 词频统计map输出(hello, 1), (hello, 1)经过combiner后(hello, 2)压缩后再送到reduce

 

Hadoop将输入数据切分成若干个输入分片(inputsplit), 并将每个split交给一个MapTask处理,MapTask不断地从对应的split中解析出一个个key/value, 并调用map()函数处理,处理完之后根据ReduceTask个数将结果分成若干个分片写到本地磁盘。同时每个ReduceTask从每个MapTask上读取属于自己的那个partition, 然后使用基于排序的方法将key相同的数据聚焦在一起,调用reduce()函数处理,并将结果输出到文件中。
以上缺少三个基本的组件:1.指定输入文件格式(InputFormat)  2.map()函数产生的每个key/value对 发给哪个ReduceTask函数处理(Partitioner)   3.指定输出文件格式(OutputFormat)

编程实例:
1.Top K问题  需要统计最近最热门的key个查询词
  分解成两个MapReduce作业:分别完成统计词频 和 找出词频最高的前K个
  第一个作业是典型的WordCount问题,
    hello 1
    world 9
    name 3
    tom 5
    john 23 
    对于第二个作业,首先map()函数中输出前key个频率最高的词,然后由reduce()函数汇总每个Map任务得到的前K个查询词,并输出频率最高的前K个查询词
        map输入 9 world 
        reduce收到所有9的单词,1.直接换了kv位置输出 2.通过TreeMap把前k放到集合中,
		public class MyInt implements Comparable<MyInt>{
    		private Integer value;
   		 public MyInt(Integer value){
      		  this.value = value;
   		 }
   		 public int getValue() {
       		 return value;
  		  }
  		  public void setValue(int value) {
  		      this.value = value;
   		 }
  		  @Override
   		 public int compareTo(MyInt o) {
   		     return value.compareTo(o.getValue());
   		 }
		}
 		// 用TreeMap存储可以利用它的排序功能		
		// 这里用 MyInt 因为TreeMap是对key排序,且不能唯一,而词频可能相同,要以词频为Key就必需对它封装
		private static TreeMap<MyInt, String> tm = new TreeMap<MyInt, String>(
				new Comparator<MyInt>()
				{
					/**
					 * 默认是从小到大的顺序排的,现在修改为从大到小
					 * 
					 * @param o1
					 * @param o2
					 * @return
					 */
					@Override
					public int compare(MyInt o1, MyInt o2)
					{
						return o2.compareTo(o1);
					}

				});
		private static MultipleOutputs<Text, IntWritable> mos = null;
		protected void reduce(IntWritable key, Iterable<Text> values,
				Context context) throws IOException, InterruptedException
		{
			for (Text text : values)
			{
				context.write(text, key);
				tm.put(new MyInt(key.get()), text.toString());

				// TreeMap以对内部数据进行了排序,最后一个必定是最小的
				if (tm.size() > k)
				{
					tm.remove(tm.lastKey());
				}

			}
		}
		protected void cleanup(Context context) throws IOException,
				InterruptedException
		{
			String path = context.getConfiguration().get("topKout");
			mos = new MultipleOutputs<Text, IntWritable>(context);
			Set<Entry<MyInt, String>> set = tm.entrySet();
			for (Entry<MyInt, String> entry : set)
			{
				mos.write("topKMOS", new Text(entry.getValue()),
						new IntWritable(entry.getKey().getValue()), path);
			}
			mos.close();
		}

 

分享到:
评论

相关推荐

    基于Hadoop的海量交易记录查询系统研究

    本文通过对 Hadoop 的深入分析和研究,根据交易记录查询系统的需求,设计并实现了 基于 Hadoop 的海量交易记录查询系统。首先对 Hadoop 及其相关技术做了研究,着重介绍了 Hadoop 云计算框架中的 HDFS 分布式文件...

    hadoop 索引相关记录

    标题中的“hadoop 索引相关记录”指的是在Hadoop MapReduce框架中与数据索引相关的技术。Hadoop是一个开源分布式计算框架,主要用于处理和存储大规模数据集。MapReduce是其核心计算模型,它将大数据处理任务分解为两...

    hadoop作业记录档案

    "hadoop作业记录档案"可能指的是在Hadoop生态系统中执行的各种作业(jobs)的详细日志和记录,这些记录对于理解作业的运行状态、诊断问题以及优化性能至关重要。 Hadoop的核心组件包括HDFS(Hadoop Distributed ...

    基于hadoop的电信客服数据分析+文档

    在这个基于Hadoop的电信客服数据分析项目中,我们重点探讨如何利用Hadoop生态系统来解析和分析电信行业的客户通话记录,从而获取有价值的洞察。 首先,Hadoop是Apache基金会开发的一个分布式计算框架,其核心包括...

    Hadoop 分析统计学生考试成绩1

    * hadoop.log:日志记录文件 * database.sql:建立数据库的脚本 * input:格式化后的 Hadoop 的输入文件 * output:输出文件 * raw:存放原始数据的文件夹 三、代码文件说明 主要的项目代码文件包括: * src/main...

    大数据之路选择Hadoop还是MaxCompute?Hadoop开源与MaxCompute对比材料

    - **数据访问审计**:记录所有数据访问行为,方便追踪和审计。 - **风险控制**:通过自动化工具识别潜在的安全风险。 ##### 7.3 Hadoop vs MaxCompute安全 对比两者的安全机制,MaxCompute在云服务的基础上提供了...

    hadoop2lib.tar.gz

    例如,Hadoop Common,它是所有Hadoop模块的基础,提供了一些通用的工具和服务,如网络通信、日志记录、配置管理等。Hadoop2lib还可能包含Hadoop MapReduce库,这是实现MapReduce任务的关键,它提供了编写和执行...

    基于hadoop的web访问记录分析

    在这个项目“基于Hadoop的Web访问记录分析”中,我们将探讨如何利用Hadoop来分析Web服务器的日志文件,提取出有价值的信息。 首先,我们要了解Hadoop的核心组件:HDFS(Hadoop Distributed File System)和...

    Hadoop云计算2.0笔记第一课Hadoop介绍

    Map 任务负责解析每条数据记录,传递给用户编写的 map(),将 map() 输出数据写入本地磁盘。Reduce 任务负责从 Map Task 上远程读取输入数据,对数据排序,将数据按照分组传递给用户编写的 reduce() 逻辑。 7. ...

    hadoop 实战 dev_03

    标题中的知识点:Hadoop实战dev_03 内容概述:本次分享是关于Hadoop实战的第三部分,专注于Hadoop系统的应用开发实例。 知识点详细说明: 1. Hadoop系统:Hadoop是一个能够存储和处理大量数据的分布式系统框架,是...

    hadoop依赖包

    1. **hadoop-common**: 这个模块提供了Hadoop的基础功能,包括网络通信、配置管理、日志记录、安全性和通用工具等。 2. **hadoop-hdfs**: 它包含了HDFS的所有源代码,使得数据可以在分布式环境中进行存储和访问。...

    使用hadoop实现WordCount实验报告.docx

    实验报告的目的是详细记录使用Hadoop在Windows环境下实现WordCount应用的过程,包括环境配置、WordCount程序的实现以及实验结果分析。本实验旨在理解Hadoop分布式计算的基本原理,并熟悉Hadoop集群的搭建与管理。 #...

    基于hadoop的词频统计.docx

    NameNode 负责管理文件系统的元数据,包括 FsImage 和 EditLog,其中 FsImage 存储文件系统的状态,EditLog 记录所有对文件系统的修改操作。Secondary NameNode 作为辅助角色,定期创建检查点,合并 EditLog 和 ...

    hadoop学习记录笔记

    Hadoop是由Apache基金会开发的一个开源框架,旨在处理和存储海量数据。它提供了分布式存储和处理大规模数据集的能力,成为大数据领域的基石。Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型...

    hadoop2.6.0源码和eclipse插件

    5. **Utilities**:提供了各种辅助工具,如文件系统操作、序列化、日志记录等。 为了便于在Eclipse中开发和调试Hadoop项目,压缩包还提供了`hadoop-eclipse-plugin-2.6.0.jar`,这是一个Eclipse插件。安装这个插件...

    配置Eclipse连接Hadoop

    - "单机测试 Hadoop.txt"可能是记录此类测试过程的文档,可以参照其中的步骤来检查配置是否正确。 5. **编写和调试Hadoop应用**: - 使用Eclipse创建Java项目,导入Hadoop的相关库,如`hadoop-core.jar`和`hadoop...

    Hadoop学习时间轴

    根据提供的信息,我们可以详细地解析出关于Hadoop学习时间轴中的关键知识点,这些知识点主要集中在Hadoop的基础架构、MapReduce工作原理以及Hive在实际应用中的优化等方面。 ### Hadoop学习时间轴概述 Hadoop是一...

Global site tag (gtag.js) - Google Analytics