Hadoop 默认排序

Hadoop  默认排序

1       3

1       2

1       1

3       3

3       2

2       2

2       1

3       1

排序后:左右前面一列排序 后面一列不排序  要想第二列也排序  请看  Hadoop二次排序

1 3

1 2

1 1

2 2

2 1

3 3

3 2

3 1

代码为:

package com.hadoop.test.defaultsort;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

public class DefaultSortMapper extends Mapper<LongWritable, Text, LongWritable, LongWritable> {

@Override

protected void map(LongWritable key, Text value,

Context context)

throws IOException, InterruptedException {

String line = value.toString();

String[] arr = line.split("\t");

if(arr.length==2){

context.write(new LongWritable(Long.parseLong(arr[0])), new LongWritable(Long.parseLong(arr[1])));

}

}

}

package com.hadoop.test.defaultsort;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.mapreduce.Reducer;

public class Sortreducer extends Reducer<LongWritable, LongWritable, LongWritable, LongWritable> {

@Override

protected void reduce(LongWritable key, Iterable<LongWritable> values,Context context)

throws IOException, InterruptedException {

for (LongWritable value : values) {

context.write(key, value);

}

}

}

package com.hadoop.test.defaultsort;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**

* 默认key排序 安装升序排序

* @author 小明

*

*/

public class JobMain {

public static void main(String[] args) throws Exception{

Configuration configuration = new Configuration();

Job job = new Job(configuration, "default-sort");

job.setJarByClass(JobMain.class);

job.setMapperClass(DefaultSortMapper.class);

job.setMapOutputKeyClass(LongWritable.class);

job.setMapOutputValueClass(LongWritable.class);

job.setReducerClass(Sortreducer.class);

job.setOutputKeyClass(LongWritable.class);

job.setOutputValueClass(LongWritable.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

Path outputDir= new Path(args[1]);

FileSystem sys = FileSystem.get(configuration);

if(sys.exists(outputDir)){

sys.delete(outputDir, true);

}

FileOutputFormat.setOutputPath(job, outputDir);

job.waitForCompletion(true);

}

}

时间: 2025-01-14 11:18:05

Hadoop 默认排序的相关文章

9.2.1 hadoop mapreduce任务输出的默认排序

任务的默认排序 MapTask和ReduceTask都会默认对数据按照key进行排序,不管逻辑上是否需要.默认是按照字典顺序排序,且实现该排序的方法是快速排序.但是map和reduce任务只能保证单个任务内部输出有序,不能保证所有输出全局有序. MapTask,当环形缓冲区使用率到达一定阈值后进行一次快速排序,将这些有序数据溢写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行归并排序.ReduceTask,它从每个MapTask上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则溢写到磁

hadoop mapreduce排序原理

 hadoop  mapreduce排序原理 Hadoop 案例3----数据排序  简单问题  (入门级别) "数据排序"是许多实际任务执行时要完成的第一项工作, 比如学生成绩评比.数据建立索引等.这个实例和数据去重类似,都是先对原始数据进行初步处理,为进一步的数据操作打好基础.下面进入这个示例. 1.需求描述 对输入文件中数据进行排序.输入文件中的每行内容均为一个数字,即一个数据. 要求在输出中每行有两个间隔的数字,其中,第一个代表原始数据在原始数据集中的位次,第二个代表原始数据.

第五讲.字典,集合,数组排序(快速排序,冒泡,默认排序)(源代码)

1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //字典的使用 7 8 //创建字典对象 9 NSDictionary * a1 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"

map的默认排序和自定义排序

STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N). 一般而言,使用map的时候直接采取map<typename A, typename B>的形式即可,map的内部实现默认使用A类型变量的升序来排序map的值. 但是有时我们需要对map的值做特殊的排序(不经其他容器的辅助),这就需要在定义map变量时做些特殊的处理. STL中map的定义是: 1 template<class _Kty, 2 cla

SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题

原文:SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题 本文出处:http://www.cnblogs.com/wy123/p/7884986.html 周围又有人在讨论UNION和UNION ALL,对于UNION和UNION ALL,网上说的最多的就是性能问题(实在不想说出来这句话:UNION ALL比UNION快)其实根本不想炒UNION和UNION ALL这碗剩饭了,每次看到网上说用这个不用那个,列举的一条一条的那种文章,只要看到说U

一起学Hadoop——使用自定义Partition实现hadoop部分排序

排序在很多业务场景都要用到,今天本文介绍如何借助于自定义Partition类实现hadoop部分排序.本文还是使用java和python实现排序代码. 1.部分排序. 部分排序就是在每个文件中都是有序的,和其他文件没有关系,其实很多业务场景就需要到部分排序,而不需要全局排序.例如,有个水果电商网站,要对每个月的水果的销量进行排序,我们可以把reduce进程之后的文件分成12份,对应1到12月份.每个文件按照水果的销量从高到底排序,1月份的排序和其他月份的排序没有任何关系. 原始数据如下,有三个字

Order by 默认排序方式

--ORDER BY 默认排序方式为升序ASC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] ESC;--升序DESC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] DESC; 原文地址:https://www.cnblogs.com/tanjiyuan/p/11261289.html

Wordpress 修改 Page 页面默认排序

默认 Wordpress 的 Page 页面是按照 Title 升序排序的,如果创建的页面很多,使用起来会很不方面,所以可以通过将以下代码添加到 functions.php 中,实现将 Page 页面按照 Date 倒序 // 将 Page 页面默认排序修改为按照 Date 倒序 function set_page_order_in_admin( $wp_query ) { global $pagenow; if ( is_admin() && 'edit.php' == $pagenow

hadoop +streaming 排序总结

参考http://blog.csdn.net/baidu_zhongce/article/details/49210787 hadoop用于对key的排序和分桶的设置选项比较多,在公司中主要以KeyFieldBasePartitioner和KeyFieldBaseComparator被hadoop用户广泛使用. 基本概念: partition:分桶过程,用户输出的key经过partition分发到不同的reduce里,因而partitioner就是分桶器,一般使用平台默认的hash分桶,也可以用