hadoop提供的一种程序驱动管理程序

原创 2013年12月04日 12:32:07

hadoop开发包里一般都携带一些基准测试程序,这是一批程序,如何管理好大型项目的测试程序,做一个方便好用的工具呢?

我们都知道,java程序的基本单位是类,程序的入口是指定类的main方法,有时候可能会通过抽象工厂方法实现程序的适配,这种方式当然也是行之有效的,但是有时候更简单的方式是控制程序启动的入口。

hadoop的基准测试程序就是这样做的。

首先给每一个测试程序起一个名字,例如mrbench,nnbench,TestDFSIO...等,然后工具类需要想办法收集所有测试程序的执行类及入口地址。这时候hadoop是这样实现的,这个工具类叫做ProgramDriver :

首先采集所有的测试程序描述,

  public void addClass (String name, Class mainClass, String description) throws Throwable {
    programs.put(name , new ProgramDescription(mainClass, description));
  }
/*programs是一个map,程序的名字,可以自定义作为key,程序描述类ProgramDescription作为value。
ProgramDescription是一个完整程序的描述类,其中,保存了程序的Class对象,用于反射。
保存程序的Main方法*/

    static final Class<?>[] paramTypes = new Class<?>[] {String[].class};
private Method main;
    private String description; 
    public ProgramDescription(Class<?> mainClass, 
                              String description)
      throws SecurityException, NoSuchMethodException {
      this.main = mainClass.getMethod("main", paramTypes);//对每一个测试类抽出main方法
      this.description = description;
    }
    public void invoke(String[] args)
      throws Throwable {
      try {
        main.invoke(null, new Object[]{args});
      } catch (InvocationTargetException except) {
        throw except.getCause();
      }
    }

    public String getDescription() {
      return description;
    }
/************************************************************************
  ProgramDriver 之后执行driver方法:
***********************************************************************/

  public void driver(String[] args) 
    throws Throwable 
  {
    // Make sure they gave us a program name.
    if (args.length == 0) {
      System.out.println("An example program must be given as the" + 
                         " first argument.");
      printUsage(programs);
//遍历出所有方法的用法描述符
      System.exit(-1);
    }

    // And that it is good.
    ProgramDescription pgm = programs.get(args[0]);
    if (pgm == null) {
      System.out.println("Unknown program '" + args[0] + "' chosen.");
      printUsage(programs);
      System.exit(-1);
    }

    // Remove the leading argument and call main
    String[] new_args = new String[args.length - 1];
    for(int i=1; i < args.length; ++i) {
      new_args[i-1] = args[i];
    }
    pgm.invoke(new_args);
//执行main Method的invoke方法,具体执行测试程序。
  }

这样一个简单地程序管理工具就做好了,是不是很简单,也很好用?



Hadoop学习笔记

前段时间,学习了一下Hadoop MapReduce,这里进行简单的总结,主要来自于《Hadoop In Action》。         后续将按照Hadoop处理的顺序整理一些笔记,主要包括: ...
  • tankles
  • tankles
  • 2012年07月12日 13:47
  • 5411

一步一步跟我学习hadoop(7)----hadoop连接mysql数据库执行数据读写数据库操作

为了方便 MapReduce 直接访问关系型数据库(Mysql,Oracle),Hadoop提供了DBInputFormat和DBOutputFormat两个类。通过DBInputFormat类把数据...

intel英特尔驱动管理程序

  • 2015年08月30日 21:28
  • 4.83MB
  • 下载

linux实习 数据管理程序(1)

我院的linux实习,具体实习要求如下: ß以个人的CD唱片库为例,CD信息保存在文本文件中,设计程序实现对CD信息的显示、输入、更新、检索、删除、使用统计等功能。CD唱片信息包括:CD唱片的目...

C语言停车场模拟管理程序的设计与实现

这个程序是利用栈和循环队列实现的,属于练手的吧。很简单的。只不过自己得先处理好逻辑关系就好了。自己关于这个程序没加重复判断,比如一辆车已经停在车位上或者便道上,再来一辆就判断不了了,所以加个重复判断还...

通达OA二次开发 小飞鱼工作流超级管理程序发布(图文)

对于一个工作流管理员来说,每天需要面对大量的工作流管理任务,一会一个流程需要调整权限,一会又是步骤名字需要修改,一会又有填错的流程需要删除,不知你是否也有同样的经历呢?鉴于日常工作流管理的工作量巨大,...
  • upi2u
  • upi2u
  • 2017年03月22日 21:56
  • 772

问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包

问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包...

bind DNS web管理程序

WeBBind WeBBind is a Web interface for admin BIND DNS servers. It is written in PHP for everyday us...

图书管理程序(数据结构c语言实现增删改查)

本人用C语言编写的第一个完整小程序实现图书的借阅管理,不完美之处欢迎交流! PS:我很菜。QQ:997459445  #include #include #include #incl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hadoop提供的一种程序驱动管理程序
举报原因:
原因补充:

(最多只允许输入30个字)