`
cakin24
  • 浏览: 1328561 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

利用MapReduce进行排序

阅读更多
一 排序原理


 
 
二 测试样例
输入
file1:
2
32
654
32
15
756
65223
file2:
5956
22
650
92
file3:
26
54
6
输出:
1 12
2 6
3 15
4 22
5 26
6 32
7 32
8 54
9 92
10 650
11 654
12 756
13 5956
14 65223
 
三 代码
Sort.java
import java.io.IOException;
 
import java.util.StringTokenizer;
 
import org.apache.hadoop.conf.Configuration;
 
import org.apache.hadoop.fs.Path;
 
import org.apache.hadoop.io.IntWritable;
 
import org.apache.hadoop.io.Text;
 
import org.apache.hadoop.mapreduce.Job;
 
import org.apache.hadoop.mapreduce.Mapper;
 
import org.apache.hadoop.mapreduce.Reducer;
 
import org.apache.hadoop.mapreduce.Partitioner;
 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
import org.apache.hadoop.util.GenericOptionsParser;
 
public class Sort {
 
public static class Map extends
Mapper<Object, Text, IntWritable, IntWritable> {
 
private static IntWritable data = new IntWritable();
 
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
 
data.set(Integer.parseInt(line));
 
context.write(data, new IntWritable(1));
 
}
 
}
 
public static class Reduce extends
Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {
 
private static IntWritable linenum = new IntWritable(1);
 
public void reduce(IntWritable key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
 
for (IntWritable val : values) {
 
context.write(linenum, key);
 
linenum = new IntWritable(linenum.get() + 1);
}
 
}
}
 
public static class Partition extends Partitioner<IntWritable, IntWritable> {
 
@Override
public int getPartition(IntWritable key, IntWritable value,
int numPartitions) {
int MaxNumber = 65223;
int bound = MaxNumber / numPartitions + 1;
int keynumber = key.get();
for (int i = 0; i < numPartitions; i++) {
if (keynumber < bound * i && keynumber >= bound * (i - 1))
return i - 1;
}
return 0;
}
}
 
/**
* @param args
*/
 
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage WordCount <int> <out>");
System.exit(2);
}
Job job = new Job(conf, "Sort");
job.setJarByClass(Sort.class);
job.setMapperClass(Map.class);
job.setPartitionerClass(Partition.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
 
}
  • 大小: 183.7 KB
分享到:
评论

相关推荐

    利用采样器实现mapreduce任务输出全排序

    利用采样器实现mapreduce任务输出全排序大数据-MapReduce

    hadoop实现计数器

    hadoop实现计数器,利用mapreduce进行排序,同时可以实时跟踪整个过程以及每个节点的参与情况

    基于MapReduce的学生平均成绩统计

    利用MapReduce实现了求学生成绩的最大值,最小值,及成绩分布。结合我的博客“MapReduce之学生平均成绩”看,效果更好。

    MapReduce的小应用

    利用MapReduce框架实现了关于音乐播放网站的两个简单问题。主要解决了多个Map多个Reduce的连接问题,二次排序问题,关于Key降序排序的问题。

    Mapreduce实验报告.doc

    如果同一个key的中间文件多而小可以考虑用cmobine函数在本地进行合并。 当所有的split都被分析完成之后,reduce worker开始工作,每个reduce根据master的安排和信息指示利用机群的内部文件 系统读取map worker本地...

    云计算中的MapReduce技术

    ),分析了MapReduce的基本原理,并以字数统计为例,详细介绍了作业提交、映射任务分配、映射任务执行、归约任务分配、排序、归约任务执行、作业完成等7大MapReduce计算流程,最后描述了MapReduce在云计算中的重要作用。

    论文研究-基于Hadoop的多关键字排序方法研究.pdf

    在单机环境下按多关键字对大数据排序需要较长的执行时间,为了提高按多关键字对大数据排序的效率,根据Hadoop的MapReduce模型,给出了两种基于Hadoop的多关键字排序方法。方法一在Reduce函数中使用链式基数排序算法...

    论文研究-基于Hive的海量搜索日志分析系统研究.pdf

    利用HQL语言以及Hadoop分布式文件系统(HDFS)和MapReduce编程模式对海量搜索日志进行分析处理, 对用户搜索行为进行了分析研究。对用户搜索行为中的查询热点主题、用户点击数和URL排名、查询会话的分析结果对于搜索...

    MRCUDA:基于GPU的MapReduce加速框架

    为了充分利用GPU并行性,在Group阶段设计并实现了一种双音排序算法,其性能优于一般的GPU排序算法。 最后,通过五种典型的应用测试,证明了MRCUDA计算平台可以减少代码规模,达到理想的运行加速比。

    CompositeInputFormat:了解 MapReduce 中的数据连接

    复合输入格式了解 MapReduce 中的数据连接摘要:该项目演示了如何使用 CompositeInputFomat 实现 Map side join。 为什么要花时间学习如何连接数据,而使用在更高抽象级别工作的工具(如 Hive 或 Pig)可以更好地...

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

     Nutch系统利用Hadoop进行数据处理的精选实例  总结  Rackspace的日志处理  简史  选择Hadoop  收集和存储  日志的MapReduce模型  关于Cascading  字段、元组和管道  操作  Tap类,Scheme对象和Flow对象 ...

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

    Nutch系统利用Hadoop进行数据处理的精选实例 总结 Rackspace的日志处理 简史 选择Hadoop 收集和存储 日志的MapReduce模型 关于Cascading 字段、元组和管道 操作 Tap类,Scheme对象和Flow对象 Cascading实战 灵活性 ...

    基于分布式数据库的图像检索系统

    利用HBase提供的MapReduce接口,让'dbinfo'的所有条目与query计算tf-idf相似度,根据tf-idf值从小到大排序,结果取排在前面的若干数据。 流程:query =&gt; sift特征点检测及描述符提取 =&gt; vocabulary对特征点进行编码...

    hadoop 1.2.1 api 最新chm 伪中文版

    框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。 整个框架负责任务的调度和监控,以及重新执行已经失败的任务。 通常,hadoop Map/Reduce框架和分布式...

    大数据面试题(2).docx

    利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件(记为)。 s、对这10个文件进行归并排序(内排序与外排序相结合)。 方案2: 一般query的...

    发挥医疗大数据的价值.pdf

    医院大数据分析平台的构建 医院信息应用系统在日常医疗和管理中积累了 大量历史数据,但各部门人员在日常数据录入和维 护中,只是通过统计和排序对数据进行简单的功能 操作,获得一些表面、浅显、价值不高的结果,...

    Hive拉拉扯扯的order by,sort by,distribute by, cluster by

    Hive对用户提供的同样是SQL,但底层实现却和传统数据库有天壤区别,底层实现默默情况下是利用了Hadoop的计算框架MapReduce,当然也支持使用Spark, Tez。鉴于此,Hive有一些自己特定,比如order by的实现需要把所有...

    大数据开发笔试.docx

    在数据spill到磁盘的过程中会有一些额外的处理,调用partition函数、combine函数(如果设置)、对数据进行排序(按key排序)。如果发生多次磁盘的溢出写,会在磁盘上形成几个溢出写文件,在map过程结束时,要将这些...

    大数据相关指导资料_CodingPark.zip

    本文将包括:Hadoop 安装;hadoop插件安装;WordCount(+排序);采集电商网站交易及评论数据3.1;...4.2利用Sqoop进行数据迁移至Mysql数据库;Jweb+Echart;Spark进行实时数据分析(上)Spark进行实时数据分析(下);

    大数据处理的关键技术.docx

    一、数据的采集技术 数据的采集是指利用多个数据库来接收发自客户端(Web、App或传感器形式等)的各种类型的结构化、半结构化的数据,并允许用户通过这些数据来进行简单的查询和处理工作。 二、数据集成与处理技术 ...

Global site tag (gtag.js) - Google Analytics