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开发包里一般都携带一些基准测试程序,这是一批程序,如何管理好大型项目的测试程序,做一个方便好用的工具呢? 我们都知道,java程序的基本单位是类,程序的入口是指定类的main方法,有时...
  • tracymkgld
  • tracymkgld
  • 2013年12月04日 12:32
  • 1113

Spark源码阅读笔记:DriverProgram初始化

作为代码阅读的入口,先写个最最简单的DriverProgram初始化代码作为入口,如下: valconf= newSparkConf().setAppName("SparkTest") ...
  • JoeYangY
  • JoeYangY
  • 2014年10月17日 14:35
  • 851

XML 命名空间提供了一种避免元素命名冲突的方法。

XML 命名空间提供了一种避免元素命名冲突的方法。---------------------------------------------------------------------------...
  • cyp403
  • cyp403
  • 2005年05月16日 13:34
  • 2295

PL/SQL程序设计之光标(游标)和例外的使用(二)

一.光标的介绍 1.光标的语法: CURSOR 光标名 [ (参数名 数据类型[,参数名 数据类型]…)] IS SELECT 语句; 2.作用:用于存储一个查询返回的...
  • u012661010
  • u012661010
  • 2017年03月25日 22:10
  • 257

Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/hadoop/util/ProgramDriver

单机(非分布式)模式 这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。 注意事项:运行bin/hadoopjarhadoop-0.16.0-examples.jarw...
  • tianye19880404
  • tianye19880404
  • 2015年01月29日 13:59
  • 8184

Spark的几个基本概念:Driver和Job,Stage

Driver Program, Job和Stage是Spark中的几个基本概念。Spark官方文档中对于这几个概念的解释比较简单,对于初学者很难正确理解他们的涵义。官方解释如下(http://spar...
  • jiangwlee
  • jiangwlee
  • 2016年03月01日 18:05
  • 12755

hadoop面试题总结1

1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode  b)Jobtracker  c)Datanode d)secondaryNameNode e)tasktracker 答案...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2014年09月05日 11:29
  • 11701

Linux程序管理

Linux中的常驻程序crond 命令每分钟都会扫描/etc/crontab以及相关的配置文件,看是否有要执行的工作,如果有 要执行的工作便会自动执行该工作。 atd syslog 各类服务程序...
  • mhpsqyq
  • mhpsqyq
  • 2017年03月08日 10:50
  • 214

驱动安装和打包

最近一直在做驱动文件结构研究和安装包的制作,经过一段时间的资料收集和学习,目前已经基本清楚了Inf文件的结构,也制作了驱动的安装包。由于本人文笔不好,下面直接说一下如何做驱动安装包。   win7...
  • ouziwen120624
  • ouziwen120624
  • 2013年03月20日 16:47
  • 1167

hadoop常见错误

1.   解决:是缺少相关jar没配入classpath.这错报得有点不懂。或直接拷贝相关jar到bin下。  jar位置:F:\hadoop-2.6.0-cdh5.8.0\share\hadoop\...
  • feilong2483
  • feilong2483
  • 2017年04月06日 15:23
  • 244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hadoop提供的一种程序驱动管理程序
举报原因:
原因补充:

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