Hadoop之TeraSort学习笔记

本文详细介绍了Hadoop TeraSort的实现原理,包括TeraGen数据生成、TeraSort排序过程和TeraValidate验证。重点解析了TeraSort.java中的TeraScheduler调度优化,以及采样、分区和MapReduce阶段的流程。通过TeraInputFormat的writePartitionFile方法理解数据切片和采样策略,展示了如何通过TotalOrderPartitioner实现全局有序。实验数据显示,使用TotalOrderPartitioner能有效均衡Reduce Task的工作负载。
摘要由CSDN通过智能技术生成

    TeraSort源码包含很多个java文件,其中可以分为三个部分:TeraGen, TeraSort和TeraValidate。

    TeraGen负责生成排序所需的随机数据,TeraValidate用来验证排序结果。

    而与TeraSort排序相关的java文件有TeraSort.java, TeraInputFormat.java, TeraOutputFormat.java, TeraScheduler.java。

    编译完源代码之后,设置运行参数,用TeraGen生成500M的数据,然后运行TeraSort(代码中添加Job.setNumReduceTasks(10),即设定Reduce Task的数量为10, 否则默认为1),会发现在进入Map阶段之前有下列几行输出,我就从这几句输出入手来学习这几个java文件。

    Spent 251ms computing base-splits.    (1)

    Spent 27ms computing TeraScheduler splits.    (2)

    Computing input splits took 280ms    (3)

    Sampling 10 splits of 15    (4)

    Making 10 from 100000 sampled records    (5)

    Computing parititions took 1216ms    (6)

    Spent 1534ms computing partitions.    (7)

    接下来就按照这几句输出的顺序看起,

    先看TeraSort的main方法:

int res = ToolRunner.run(new Configuration(), new TeraSort(), args);
System.exit(res);

    Ctrl点进run这个方法里面看到:

public static int run(Configuration conf, Tool tool, String[] args) 
    throws Exception{
    if(conf == null) {
      conf = new Configuration();
    }
    GenericOptionsParser parser = new GenericOptionsParser(conf, args);
    //set the configuration back, so that Tool can configure itself
    tool.setConf(conf);
    
    //get the args w/o generic hadoop args
    String[] toolArgs = parser.getRemainingArgs();
    return tool.run(toolArgs);
  }

    即上面new TeraSort()对应下面的参数Tool tool,而下面方法return tool.run,也就是运行TeraSort得到其返回值,TeraSort运行完成返回1, 否则返回0,所以在完成时System.exit(res)退出。

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值