Hadoop大数据——mapreduce的排序机制之total排序
- mapreduce的排序机制之total排序
(1)设置一个reduce task ,全局有序,但是并发度太低,单节点负载太大
(2)设置分区段partitioner,设置相应数量的reduce task,可以实现全局有序,但难以避免数据分布不均匀——数据倾斜问题,有些reduce task负载过大,而有些则过小;
(3)可以通过编写一个job来统计数据分布规律,获取合适的区段划分,然后用分区段partitioner来实现排序;但是这样需要另外编写一个job对整个数据集运算,比较费事
(4)利用hadoop自带的取样器,来对数据集取样并划分区段,然后利用hadoop自带的TotalOrderPartitioner分区来实现全局排序
/*** 全排序示例* @author zhangxueliang**/
public class TotalSort {static class TotalSortMapper extends Mapper<Text, Text, Text, Text> {OrderBean bean = new OrderBean();@Overrideprotected void map(Text key, Text value, Context context) throws IOException, InterruptedException {// String line = value.toString();// String[] fields = line.split("\t");// bean.set(fields[0], Double.parseDouble(fields[1]));context.write(key, value);}}static class TotalSortReducer extends Reducer<Text, Text, Text, Text> {@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {for (Text v : values) {context.write(key, v);}}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(TotalSort.class);job.setMapperClass(TotalSortMapper.class);job.setReducerClass(TotalSortReducer.class);
// job.setOutputKeyClass(OrderBean.class);
// job.setOutputValueClass(NullWritable.class);//用来读取sequence源文件的输入组件job.setInputFormatClass(SequenceFileInputFormat.class);FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));// job.setPartitionerClass(RangePartitioner.class);//分区的逻辑使用的hadoop自带的全局排序分区组件job.setPartitionerClass(TotalOrderPartitioner.class);//系统自带的这个抽样器只能针对sequencefile抽样RandomSampler randomSampler= new InputSampler.RandomSampler<Text,Text>(0.1,100,10);InputSampler.writePartitionFile(job, randomSampler);//获取抽样器所产生的分区规划描述文件Configuration conf2 = job.getConfiguration();String partitionFile = TotalOrderPartitioner.getPartitionFile(conf2);//把分区描述规划文件分发到每一个task节点的本地job.addCacheFile(new URI(partitionFile));//设置若干并发的reduce taskjob.setNumReduceTasks(3);job.waitForCompletion(true);}
}
Hadoop大数据——mapreduce的排序机制之total排序相关推荐
- Hadoop大数据——mapreduce的secondary排序机制
secondary排序机制 ----就是让mapreduce帮我们根据value排序 考虑一个场景,需要取按key分组的最大value条目: 通常,shuffle只是对key进行排序 如果需要对val ...
- Hadoop大数据——mapreduce的join算法
(1)Reduce side join 示例: 订单数据 商品信息 实现机制: 通过将关联的条件作为map输出的key,将两表满足join条件的数据并携带数据所来源的文件信息,发往同一个reduce ...
- Hadoop大数据——mapreduce中的Combiner/序列化/排序初步
mapreduce中的Combiner (1)combiner是MR程序中Mapper和Reducer之外的一种组件 (2)combiner组件的父类就是Reducer (3)Combiner和red ...
- Hadoop大数据--Mapreduce程序运行并发度
reduce task数量的决定机制 1.业务逻辑需要 2.数据量大小 设置方法: job.setNumReduceTasks(5) map task数量的决定机制 由于map task之间没有协作关 ...
- hadoop大数据——mapreduce程序提交运行模式及debug方法
本地运行模式 (1)mapreduce程序是被提交给LocalJobRunner在本地运行 (2)而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上 怎样实现本地运行?:写一个程序,不要带集 ...
- Hadoop大数据--Mapreduce编程规范及入门示例
Mapreduce是一个分布式的运算编程框架,核心功能是将用户编写的核心逻辑代码分布式地运行在一个集群的很多服务器上. Mapreduce的存在价值 (1)海量数据在单机上处理因为硬件资源限制,无法胜 ...
- Hadoop大数据——mapreduce的Distributed cache
应用场景:map side join 工作原理: 通过mapreduce框架将一个文件(本地/HDFS)分发到每一个运行时的task(map task /reduce task)节点上(放到task进 ...
- Hadoop大数据原理(3) - 分布式计算框架MapReduce
文章目录 1. 大数据的通用计算 2 MapReduce编程模型 3. MapReduce计算框架 3.1 三类关键进程 大数据应用进程 JobTracker进程 TaskTracker进程 3.2 ...
- Hadoop大数据零基础高端实战培训系列配文本挖掘项目
<Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉 ...
最新文章
- GNS3关联SecureCRT的配置。
- html css 水平时间轴,纯css+js水平时间轴
- exists sql用法_SQL关于IN和EXISTS的用法和区别,读完之后,大部分程序员收藏了....
- 你必须足够强大,这个世界才会更加公平
- 你知道出现“乱码”的原因是什么吗?(4)
- webApp禁止用户保存图像
- pdo一次插入多条数据的2种实现方式
- 自实现进程管理器linux,【Linux工具篇】supervisor进程管理器
- 玩转VIM编辑器-自动补全
- keepalived详解(二)——keepalived安装与配置文件
- 我是如何战胜懒惰的?
- RocketMQ消息消费之长轮询
- 沈志勇:中国式营销三部曲
- 仿金蝶进销存源码(含数据库脚本)
- 排序算法之冒泡排序(图解)
- 开关电源Buck电路CCM与DCM工作模式有什么区别?
- 能删除Windows下“本地安装源 (Msocache)”吗?
- 带有风的诗词_带有风字的诗句
- vue第三天笔记04——安装node.js环境
- COGS 1008 贪婪大陆