Hadoop中的排序的设计

  1. 排序经常会用,但是怎么在大数据中,以Map,Reduce这种形式来进行实现了?

    首先你要明确目标对象,对谁进行排序,如果是自定义的对象,需要实现其CompareTo方法,因为这个是对象之间比较大小的方法。

    另外你需要设计排序策略,特殊情况,正常情况,编程的时候,应该先写特殊情况,最后写正常情况,这样的话,逻辑更加清晰。

  2. 如何设计呢?

    首先按照正常逻辑写好Map和Reduce程序,然后输出,最后得到的是一些文本,

    在写一个Map,Reduce程序在写,进行排序。思想也是一样的,偏移量为key,(刚学的时候,不知道什么是偏移量,后来才明白,是字段的偏移量,比如第一行,开始偏移量为1,第二行,偏移量就是11,为什么,因为,第一行有10个字符,占据了10位)

  3. 在所有的mapreduce程序当中k1,v1,k2,v2,k3,v3中的k1一点用都没有,至于其他的k2和v2,他们可以自己进行设计,这些都只是输出,可以是对象,也可以是数值,包括v3,也可以是NULLwriteable等等之类的。
时间: 2024-10-29 19:11:30

Hadoop中的排序的设计的相关文章

hadoop中OutputFormat 接口的设计与实现

OutputFormat 主要用于描述输出数据的格式,它能够将用户提供的 key/value 对写入特定格式的文件中. 本文将介绍 Hadoop 如何设计 OutputFormat 接口 , 以及一些常用的OutputFormat 实现. 1.旧版 API 的 OutputFormat 解析 如图所示, 在旧版 API 中,OutputFormat 是一个接口,它包含两个方法: RecordWriter<K, V> getRecordWriter(FileSystem ignored, Job

Hadoop实现全排序

1.1TB(或1分钟)排序的冠军 作为分布式数据处理的框架,集群的数据处理能力究竟有多快?或许1TB排序可以作为衡量的标准之一. 1TB排序,就是对1TB(1024GB,大约100亿行数据)的数据进行排序.2008年,Hadoop赢得1TB排序基准评估第一名,排序1TB数据耗时209秒.后来,1TB排序被1分钟排序所取代,1分钟排序指的是在一分钟内尽可能多的排序.2009年,在一个1406个节点组成的hadoop集群,在59秒里对500GB完成了排序:而在1460个节点的集群,排序1TB数据只花

Hadoop学习笔记—11.MapReduce中的排序和分组

一.写在之前的 1.1 回顾Map阶段四大步凑 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排序和分组,默认情况下,是按照key进行排序和分组. 1.2 实验场景数据文件 在一些特定的数据文件中,不一定都是类似于WordCount单次统计这种规范的数据,比如下面这类数据,它虽然只有两列,但是却有一定的实践意义. 3 3 3 2 3 1 2 2 2 1 1 1 (1)如果按照第一列升序排列,当

结合手机上网流量业务来说明Hadoop中的二次排序机制,分区机制

本篇博客将结合手机上网流量业务来详细介绍Hadoop的二次排序机制.分区机制,先介绍一下业务场景: 先介绍一下业务场景:统计每个用户的上行流量和,下行流量和,以及总流量和. 本次描述所用数据: 日志格式描述: 日志flowdata.txt中的具体数据: 首先我们先通过mapreduce程序实现上面的业务逻辑: 代码实现: package FlowSum; import java.io.DataInput; import java.io.DataOutput; import java.io.IOE

Hadoop中的Speculative Task调度策略

一:背景 Speculative Task,又叫推测式任务,是指在分布式集群环境下,因为程序bug,负载不均衡或者资源分布不均,造成同一个job多个task运行速度不不一致,有的task运行速度明显要慢于其他task(比如:一个job的某个task进度只有10%,而其他所有task已经运行完毕),则这些task拖慢了了作业的整体执行进度,为了避免这种情况发生,Hadoop会为该task启动Speculative task,让该Speculative task与原始task同时运行,哪个先运行完,

Hadoop中两表JOIN的处理方法(转)

1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧. 本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法. 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side join reduce side join是一种最简单的join方式,其主

Hadoop中Writable类之二

1.ASCII.Unicode.UFT-8 在看Text类型的时候,里面出现了上面三种编码,先看看这三种编码: ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646.ASCII是7位字符集,是美国标准信息交换代码的缩写,为美国英语通信所设计.它由128个字符组成,包括大小写字母.数字0-9.标点符号.非打印字符(换行副.制表符等4个)以及控制字符(退格.响铃等)组成.从定义,很明显,单字节编码,现

浅析 Hadoop 中的数据倾斜

转自:http://my.oschina.net/leejun2005/blog/100922 最近几次被问到关于数据倾斜的问题,这里找了些资料也结合一些自己的理解. 在并行计算中我们总希望分配的每一个task 都能以差不多的粒度来切分并且完成时间相差不大,但是集群中可能硬件不同,应用的类型不同和切分的数据大小不一致总会导致有部分任务极大的拖慢了整个任务的完成时间,硬件不同就不说了,应用的类型不同其中就比如page rank 或者data mining 里面一些计算,它的每条记录消耗的成本不太一

hadoop中Configuration类剖析

Configuration是hadoop中五大组件的公用类,所以放在了core下,org.apache.hadoop.conf.Configruration.这个类是作业的配置信息类,任何作用的配置信息必须通过Configuration传递,因为通过Configuration可以实现在多个mapper和多个reducer任务之间共享信息. 类图 说明:Configuration实现了Iterable和Writable两个接口,其中实现Iterable是为了迭代,迭代出Configuration对