`
baishuo491
  • 浏览: 78445 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

hadoop2.0对命令调用的重构

 
阅读更多
原创,转载请注明出处  白硕 baishuo491@163.com
http://baishuo491.iteye.com/blog/1916241

2.0以后,重构为为以Command为基础的一系列类  bstract public class Command extends Configured
最核心的是run函数,里面主要的行为就是处理各种选项,展开参数,并且处理每个参数(注释原话 The default behavior is to process options, * expand arguments, and then process each argument.)
run函数里最核心的代码:
LinkedList<String> args = new LinkedList<String>(Arrays.asList(argv));
      processOptions(args);
      processRawArguments(args);
后面两个都是虚函数,要由子类来实现,因为不同的子类,处理的方法不一样。这个方法的注释上,给了调用过程,还是很复杂的:

<pre>
   * run
   * |-> {@link #processOptions(LinkedList)}
   * \-> {@link #processRawArguments(LinkedList)}
   *      |-> {@link #expandArguments(LinkedList)} //这个和下面这个是在Command类里面实现的
   *      |   \-> {@link #expandArgument(String)}*
   *      \-> {@link #processArguments(LinkedList)}
   *          |-> {@link #processArgument(PathData)}*
   *          |   |-> {@link #processPathArgument(PathData)}
   *          |   \-> {@link #processPaths(PathData, PathData...)}
   *          |        \-> {@link #processPath(PathData)}*
   *          \-> {@link #processNonexistentPath(PathData)}
   * </pre>

 
看看Command 的一个子类FsCommand , abstract public class FsCommand extends Command
里面有一个静态函数,
public static void registerCommands(CommandFactory factory) {
    factory.registerCommands(CopyCommands.class);
    factory.registerCommands(Count.class);
    factory.registerCommands(Delete.class);
    factory.registerCommands(Display.class);
。。。。。。。
如果要新建command,要这里面注册,这样就可以作为静态数据装载到内存里

public class CommandFactory extends Configured implements Configurable

里面有一个classMap  和 一个objectMap
  private Map<String, Class<? extends Command>> classMap =
    new HashMap<String, Class<? extends Command>>();

  private Map<String, Command> objectMap =
    new HashMap<String, Command>();

下面看看 CommandFactory 的函数  registerCommands
public void registerCommands(Class<?> registrarClass) {
    try {
      registrarClass.getMethod(
          "registerCommands", CommandFactory.class
      ).invoke(null, this);
    } catch (Exception e) {
      throw new RuntimeException(StringUtils.stringifyException(e));
    }
  }
是registrarClass 调用自己的registerCommands命令

看一看CopyCommands 的registerCommands 命令,
  public static void registerCommands(CommandFactory factory) {
    factory.addClass(Merge.class, "-getmerge");
    factory.addClass(Cp.class, "-cp");
    factory.addClass(CopyFromLocal.class, "-copyFromLocal");
    factory.addClass(CopyToLocal.class, "-copyToLocal");
    factory.addClass(Get.class, "-get");
    factory.addClass(Put.class, "-put");
  }
原来CopyCommands 还有自己一系列的内部子类,都是静态的,在这里统一注册,如果要新建CopyCommands子类,就要在这里注册
CommandFactory 的addClass函数,可见是put到classMap里面了,名字和类调换了一下位置,字符串做主键
  public void addClass(Class<? extends Command> cmdClass, String ... names) {
    for (String name : names) classMap.put(name, cmdClass);
  }
另外一个map objectMap,只有在FsShell的init函数里,被插入了Help() 和Usage() 两个对象

  protected void init() throws IOException {
    getConf().setQuietMode(true);
    if (commandFactory == null) {
      commandFactory = new CommandFactory(getConf());//创建一个单例的factory
      commandFactory.addObject(new Help(), "-help");
      commandFactory.addObject(new Usage(), "-usage");
      registerCommands(commandFactory);//调用自己的registerCommands,其实是调用FsCommand的registerCommands,之前有提过。为了和DFSAdmin区分开
    }
  }

具体到每个命令的调用,因为都是从fshell 启动的,调用链如下:
FsShell.init() line: 83
FsShell.run(String[]) line: 241
ToolRunner.run(Configuration, Tool, String[]) line: 70
ToolRunner.run(Tool, String[]) line: 84
FsShell.main(String[]) line: 304
init之后,通过instance = commandFactory.getInstance(cmd);的到Class,cmd是解析出来的如-cat等字符串,去classMap里就可以get到对应的Class

之后,调用instance.run  执行我们最初讨论的 Command.run
分享到:
评论

相关推荐

    Hadoop2.0开发环境搭建

    涉及到了Hadoop2.0、Hbase、Sqoop、Flume、Hive、Zookeeper的具体环境搭建

    Hadoop 2.0基本架构和发展趋势

    Hadoop 2.0是Apache Hadoop的一个重大升级版本,它引入了YARN(Yet Another Resource Negotiator)作为其核心组件之一,以解决Hadoop 1.x版本中MapReduce框架存在的诸多限制,如扩展性差、资源利用率低以及对多种...

    hadoop2.0安装手册

    hadoop 2.0 详细安装手册。hadoop 2.0 详细安装手册。

    Hadoop 2.0安装部署方法

    生产环境的搭建则涉及到多个节点的多机配置,这需要对Hadoop集群进行更为复杂和细致的配置。 六、总结 安装部署Hadoop 2.0涉及多个步骤,需要仔细规划和配置。无论是测试环境还是生产环境的搭建,都需要合理的硬件...

    Hadoop2.0部署文档

    【Hadoop 2.0 部署详解】 在大数据处理领域,Apache Hadoop 是一个不可或缺的开源框架,尤其在大规模数据存储和处理方面表现出强大的能力。Hadoop 2.0 引入了高可用性(HA)特性,极大地提高了系统的稳定性。本文将...

    Hadoop2.0安装详细步骤

    本文是详细的Hadoop2.0安装方法步骤

    Hadoop安装手册_Hadoop2.0.pdf

    hadoop2.0版本安装手册,包含hadoop、hive、hbase、mahout、sqoop、spark、storm、整个体系的安装配置

    实战Hadoop2.0 PPT

    【实战Hadoop 2.0】是一套深入学习Hadoop生态系统的PPT文档,涵盖了Hadoop分布式文件系统(HDFS)、资源调度器YARN、数据分析工具Spark、Ambari管理平台等多个关键组件。以下是这些核心知识点的详细解析: 1. **...

    hadoop 2.0

    ### Hadoop 2.0:从YARN到下一代大数据处理平台 #### 1. Hadoop 2.0:新时代的大数据处理平台 Hadoop 2.0是Apache Hadoop的一个重要版本,它标志着Hadoop从单一的MapReduce计算框架转变为一个更加通用、可扩展和...

    大数据系列-Hadoop 2.0

    在大数据领域,Hadoop 2.0 是一个关键的分布式计算框架,它为海量数据处理提供了强大支持。本文将深入探讨Hadoop 2.0的主要组件、架构、以及其相较于Hadoop 1.0的改进。 一、Hadoop 2.0概述 Hadoop 2.0是Apache软件...

    云计算第三版精品课程配套PPT课件含习题(29页)第6章 Hadoop 2.0 大家族(三).pptx

    6.1 Hadoop 2.0 大家族概述 Hadoop 2.0 是一个开源的分布式计算框架,是Hadoop生态系统的核心组成部分,它在Hadoop 1.0的基础上进行了重大改进,引入了YARN(Yet Another Resource Negotiator),使得系统更加灵活和...

    Hadoop 2.0部署配置文件示例.zip

    Hadoop 2.0是Apache Hadoop项目的一个重要版本,它带来了许多改进和优化,显著提高了大数据处理的性能和可扩展性。这个压缩包“Hadoop 2.0部署配置文件示例.zip”包含了用于配置和部署Hadoop集群的关键文件。下面...

    《Hadoop大数据开发实战》教学教案—06Hadoop2.0新特性.pdf

    Hadoop2.0中,MapReduce被重构为两个独立的组件:ResourceManager(RM)负责资源调度,TaskTracker被拆分为ApplicationMaster(AM)和NodeManager(NM)。这种分离使得资源管理更加高效,同时也支持了更多种类的计算...

    实战Hadoop 2.0:从云计算到大数据(第二版)

    实战Hadoop 2.0:从云计算到大数据(第二版)

    云计算第三版精品课程配套PPT课件含习题(33页)第5章 Hadoop 2.0 主流开源云架构(五).pptx

    - **5.5.3 命令行接口**:详细说明HDFS、YARN和Hadoop shell命令的使用,以及如何通过命令行进行文件操作、任务管理和集群管理。 6. **5.6 Hadoop 2.0 编程接口**: - **5.6.1 HDFS 编程**:教授如何使用Java API...

    Hadoop2.0分布式HA环境部署

    在搭建Hadoop2.0 HA环境之前,需要对虚拟机进行相应的配置: - **安装JDK 1.8**:Hadoop2.0需要Java 1.8环境支持。 - **创建用户**:推荐使用非root用户(例如work用户)进行安装和管理,避免权限问题。 - **SSH...

    云计算第三版精品课程配套PPT课件含习题(30页)第5章 Hadoop 2.0 主流开源云架构(四).pptx

    《云计算(第三版)》配套课程的PPT涵盖了云计算的多个关键领域,特别是对Hadoop 2.0这一主流开源云架构的深入讲解。Hadoop 2.0是大数据处理的关键技术之一,它在分布式计算中扮演着核心角色。本课程内容丰富,适合...

    云计算第三版精品课程配套PPT课件含习题(26页)第5章 Hadoop 2.0 主流开源云架构(二).pptx

    《云计算(第三版)》是由刘鹏教授主编的教材,配套的PPT课件涵盖了从大数据与云计算的基础概念,到主流的云服务提供商如Google、Amazon、微软的云计算平台介绍,再到开源云架构Hadoop 2.0的深入探讨。本部分主要...

    Hadoop2.0+Kerberos配置

    1. Hadoop2.0安全机制:Hadoop2.0版本对安全性进行了增强,增加了对集群内部通信的加密和认证,以防止未授权访问。Hadoop采用Kerberos提供服务间的安全认证,确保集群内部的NameNode、DataNode等组件之间的数据传输...

    大数据处理--hadoop2.0核心架构技术

    大数据处理--hadoop2.0核心架构技术,主要介绍了大数据面临的挑战,而hadoop正是解决这些挑战的重要技术,接着分别介绍了hadoop1.0和hadoop2.0的区别,进而重点讲到hadoop2.0 YARN,详细分析MapReduce及HDFS架构。

Global site tag (gtag.js) - Google Analytics