`
侯上校
  • 浏览: 216922 次
  • 性别: 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 索引相关记录

    NULL 博文链接:https://sealbird.iteye.com/blog/1340283

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

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

    VMware7.1虚拟机+Ubuntu12.04搭建hadoop环境记录

    小白搭建hadoop完全分布式环境笔记,步骤详细,原创

    Hadoop实战中文版

    5.5 小结 5.6 更多资源 第6章 编程实践 6.1 开发MapReduce 程序 6.1.1 本地模式 6.1.2 伪分布模式 6.2 生产集群上的监视和调试 6.2.1 计数器 6.2.2 跳过坏记录 6.2.3 用IsolationRunner重新运行出错的任务...

    hadoop-2.2编译安装详解

    1.4 添加hosts记录 此步骤所有节点都要操作 vi /etc/hosts 192.168.80.90 Master.Hadoop 192.168.80.91 Slave1.Hadoop 192.168.80.92 Slave2.Hadoop 1.5 建立hadoop用户之间相互信任(互相无密码登陆)...

    Hadoop权威指南 第二版(中文版)

     本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...

    Hadoop学习时间轴

    Hadoop学习时间轴 MapReduce 记录处理等

    Hadoop 分布式集群搭建_部分1.docx

    Hadoop 分布式集群搭建 Hadoop由Apache基金会开发的分布式系统基础架构,是利用集群对大量数据进行分布式处理和存储的软件框架。用户可以轻松地在Hadoop集群上开发和运行处理海量数据的应用程序。Hadoop有高可靠,...

    hadoop-2.10.0jar.zip

    包含hadoop平台Java开发的所有所需jar包,例如activation-1.1.jar apacheds-i18n-2.0.0-M15.jar apacheds-kerberos-codec-2.0.0-M15.jar api-asn1-api-1.0.0-M20.jar api-util-1.0.0-M20.jar asm-3.2.jar avro-1.7.7...

    hadoop-管理

    dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了 元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于Safe...

    Hadoop集群部署实例

    例,任务跑完就自动释放掉服务器,本文记录下 Hadoop 集群的搭建过程,方便自己日后查看,也希望能帮到初学者,本文所有软 件都是通过 yum 安装,大家也可以下载相应的二进制文件进行安装,使用哪种方式安装,从属...

    非root权限下配置linux hadoop集群自动SSH记录

    linux hadoop集群简单几步完成SSH配置。 不可思议。真的很简单。

    Hadoop权威指南(中文版)2015上传.rar

    第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用...

    Ubuntu20.04配置Hadoop.txt

    本教程是根据个人在UBUNTU虚拟机上安装配置Hadoop2.7.3的实际操作步骤一步步记录下来的,大部分指令操作的目的都加了注释以方便理解。(本教程很详细,如果还是遇到问题可以直接咨询楼主,不会让你的积分百花的)

    Hadoop shell常用命令

    该文档记录了在linux的shell环境下执行的hadoop的相关操作命令,包括多hafs文件的相关操作

    使用docker部署hadoop集群的详细教程

    网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程。 目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群 准备: 首先要有一台内存8G以上的centos7机器,我用的是阿里云主机...

    ubuntu 下的Hadoop配置与运行

    记录了Ubuntu下的Hadoop的配置与运行 ,经典例子

    手动搭建hadoop高可用

    手动搭建hadoop集群(包括hadoop的Ha好可用),零基础教程

Global site tag (gtag.js) - Google Analytics