`

Hadoop--CLI的解析

阅读更多

基于 Apache Commons CLI 的命令行设计

通常情况下命令行处理有三个步骤:定义,解析和询问阶段

一、定义

package org.apache.hadoop.util;--GenericOptionsParser中

private static Options buildGeneralOptions(Options opts) {
    Option fs = OptionBuilder.withArgName("local|namenode:port")
    .hasArg()
    .withDescription("specify a namenode")
    .create("fs");
    Option jt = OptionBuilder.withArgName("local|jobtracker:port")
    .hasArg()
    .withDescription("specify a job tracker")
    .create("jt");
    Option oconf = OptionBuilder.withArgName("configuration file")
    .hasArg()
    .withDescription("specify an application configuration file")
    .create("conf");
    Option property = OptionBuilder.withArgName("property=value")
    .hasArg()
    .withDescription("use value for given property")
    .create('D');
    Option libjars = OptionBuilder.withArgName("paths")
    .hasArg()
    .withDescription("comma separated jar files to include in the classpath.")
    .create("libjars");
    Option files = OptionBuilder.withArgName("paths")
    .hasArg()
    .withDescription("comma separated files to be copied to the " +
           "map reduce cluster")
    .create("files");
    Option archives = OptionBuilder.withArgName("paths")
    .hasArg()
    .withDescription("comma separated archives to be unarchived" +
                     " on the compute machines.")
    .create("archives");
    // file with security tokens
    Option tokensFile = OptionBuilder.withArgName("tokensFile")
    .hasArg()
    .withDescription("name of the file with the tokens")
    .create("tokenCacheFile");

    opts.addOption(fs);
    opts.addOption(jt);
    opts.addOption(oconf);
    opts.addOption(property);
    opts.addOption(libjars);
    opts.addOption(files);
    opts.addOption(archives);
    opts.addOption(tokensFile);

    return opts;
  }

 二、解析

 /**
   * Parse the user-specified options, get the generic options, and modify
   * configuration accordingly
   * @param conf Configuration to be modified
   * @param args User-specified arguments
   * @return Command-specific arguments
   */
  private String[] parseGeneralOptions(Options opts, Configuration conf, 
      String[] args) throws IOException {
    opts = buildGeneralOptions(opts);
    /**
     * Apache CLI支持多种输入参数格式,主要支持的格式有以下几种
     * POSIX(Portable Operating System Interface of Unix)中的参数形式,例如 tar -zxvf foo.tar.gz
		GNU 中的长参数形式,例如 du --human-readable --max-depth=1
		Java 命令中的参数形式,例如 java -Djava.net.useSystemProxies=true Foo
		短杠参数带参数值的参数形式,例如 gcc -O2 foo.c
		长杠参数不带参数值的形式,例如 ant – projecthelp
     */
    //使用GNU解析
    CommandLineParser parser = new GnuParser();
    try {
      commandLine = parser.parse(opts, args, true);
      processGeneralOptions(conf, commandLine);
      return commandLine.getArgs();
    } catch(ParseException e) {
      LOG.warn("options parsing failed: "+e.getMessage());

      HelpFormatter formatter = new HelpFormatter();
      formatter.printHelp("general options are: ", opts);
    }
    return args;
  }

 三、询问

 /**
   * Modify configuration according user-specified generic options
   * @param conf Configuration to be modified
   * @param line User-specified generic options
   */
  private void processGeneralOptions(Configuration conf,
      CommandLine line) throws IOException {
    if (line.hasOption("fs")) {
      FileSystem.setDefaultUri(conf, line.getOptionValue("fs"));
    }

    if (line.hasOption("jt")) {
      conf.set("mapred.job.tracker", line.getOptionValue("jt"));
    }
    if (line.hasOption("conf")) {
      String[] values = line.getOptionValues("conf");
      for(String value : values) {
        conf.addResource(new Path(value));
      }
    }
    if (line.hasOption("libjars")) {
      conf.set("tmpjars", 
               validateFiles(line.getOptionValue("libjars"), conf));
      //setting libjars in client classpath
      URL[] libjars = getLibJars(conf);
      if(libjars!=null && libjars.length>0) {
        conf.setClassLoader(new URLClassLoader(libjars, conf.getClassLoader()));
        Thread.currentThread().setContextClassLoader(
            new URLClassLoader(libjars, 
                Thread.currentThread().getContextClassLoader()));
      }
    }
    if (line.hasOption("files")) {
      conf.set("tmpfiles", 
               validateFiles(line.getOptionValue("files"), conf));
    }
    if (line.hasOption("archives")) {
      conf.set("tmparchives", 
                validateFiles(line.getOptionValue("archives"), conf));
    }
    if (line.hasOption('D')) {
      String[] property = line.getOptionValues('D');
      for(String prop : property) {
        String[] keyval = prop.split("=", 2);
        if (keyval.length == 2) {
          conf.set(keyval[0], keyval[1]);
        }
      }
    }
    conf.setBoolean("mapred.used.genericoptionsparser", true);
    
    // tokensFile
    if(line.hasOption("tokenCacheFile")) {
      String fileName = line.getOptionValue("tokenCacheFile");
      // check if the local file exists
      try 
      {
        FileSystem localFs = FileSystem.getLocal(conf);
        Path p = new Path(fileName);
        if (!localFs.exists(p)) {
          throw new FileNotFoundException("File "+fileName+" does not exist.");
        }

        LOG.debug("setting conf tokensFile: " + fileName);
        conf.set("mapreduce.job.credentials.json", 
                 localFs.makeQualified(p).toString());
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }
  }

 解析完成之后再执行,执行代码如下,在ToolRunner中

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);
  }

 

 

 

分享到:
评论

相关推荐

    hadoop-CDH4.6-install.docx

    - **验证 Hive 的两种方式**:通过 Hive CLI 和其他工具验证 Hive 是否正常工作。 - **Solr 安装** - **Solr 简介**:了解 Solr 的基本概念和作用。 - **Solr 安装**:安装 Solr。 - **部署 Solr**:配置 Solr。...

    hadoop 2.6.0 eclipse 需求包 依赖 jar

    在Hadoop中,它用于解析MapReduce作业的命令行参数,帮助用户指定输入、输出路径等。 2. **hadoop-common-2.6.0.jar**:这个文件包含了Hadoop的通用功能,如文件系统抽象、网络通信、配置管理、日志记录等。它是...

    commons-cli-1.0.jar

    Apache Commons CLI库是Java开发中的一个实用工具,用于处理命令行接口(CLI)的解析和管理。这个库在处理命令行参数和选项时提供了一种简单而强大的方式,使得开发者可以更加灵活地构建命令行驱动的程序。"commons-...

    Hadoop数据仓库--hive介绍

    - 操作界面:用户可以通过命令行接口(CLI)、Web 界面或 Thrift API 进行交互。 - Driver:负责解析用户输入的 HiveQL 语句,并将其转化为 MapReduce 作业。 - Hadoop:Hive 使用 HDFS 存储数据,并依赖 MapReduce ...

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    - `$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar` 此外,我们还可以通过运行`hadoop classpath`命令来获取运行Hadoop程序所需的完整classpath信息,这对于理解整个系统所依赖的所有JAR文件非常有帮助...

    高级软件人才培训专家-Hadoop课程资料-4-第四章 - 分布式SQL计算 Hive 入门

    ### 高级软件人才培训专家-Hadoop课程资料-4-第四章 - 分布式SQL计算 Hive 入门 #### Apache Hive 概述 Apache Hive 是一款面向大数据处理的分布式 SQL 计算工具,旨在简化 Hadoop 生态系统中的数据查询与分析流程...

    Hadoop数据仓库工具--hive介绍

    当用户执行 HiveQL 查询时,Hive 驱动会解析查询,生成相应的 MapReduce 作业,并提交到 Hadoop 集群执行。执行完成后,结果会被写回到 HDFS 或其他数据存储。 总的来说,Hive 作为一个数据仓库工具,简化了在 ...

    Hadoop实战手册

    ### Hadoop实战手册知识点解析 #### 一、文档概述与背景 - **文档目标**:本文档旨在提供一套详尽的Hadoop安装部署指南,帮助读者实现从零开始的Hadoop集群部署。它覆盖了Hadoop单机安装及集群安装的具体步骤,并...

    Mac 搭建 Hadoop和hive环境.pdf

    #### 详细知识点解析: ##### 一、前言 在Mac环境下搭建Hadoop和Hive对于数据分析、大数据处理的学习者来说至关重要。通过本指南,我们将逐步了解如何在Mac上安装并配置Hadoop和Hive环境,以便能够进行数据处理和...

    8.Hadoop入门进阶课程_第8周_Hive介绍和安装部署.pdf

    - Driver组件负责HiveQL语句的解析、编译优化及执行计划生成,并调用MapReduce计算框架。 - Metastore组件存储Hive元数据,支持关系数据库如derby和mysql,并可将服务独立到远程服务器集群中。 - Thrift服务允许...

    Hadoop 权威指南(中文前三章)

    - **CLI操作**: 提供了一系列命令行工具,允许用户进行文件上传、下载、删除等操作。 **3.4 Hadoop文件系统** - **文件系统层次结构**: HDFS支持层次化的文件系统结构,用户可以像使用传统文件系统那样来管理文件...

    Hadoop实战培训教程(部署篇)_V3.pdf

    ### Hadoop实战培训教程(部署篇)_V3.pdf 知识点解析 #### 概述 本教程旨在提供一套全面的手动部署Hadoop及其生态系统的指南,特别针对GBase技术人员。通过本教程,读者可以了解如何从零开始搭建一个包含Hadoop、...

    hadoop的数据仓库hive手册

    - CLI (命令行界面): 用户可以通过命令行来执行 HiveQL 查询。 - Client: 这是指客户端程序,可以是 Java API 或其他编程语言接口。 - WUI (Web 用户界面): 用于通过 Web 浏览器访问 Hive。 2. **元数据存储**: ...

    apache-hive-1.1.0-cdh5.7.1-bin.tar.gz

    1. **Hive Metastore**: 这是Hive的核心组件,存储元数据,如表名、列名、分区信息等,这些信息用于解析HQL查询。在CDH中,通常会配置Hive与MySQL 5.6集成,作为元数据的持久化存储。 2. **Hive CLI (Command Line ...

    Hive-基于hadoop的数据仓库.pptx

    《Hive:基于Hadoop的数据仓库深度解析》 Hive,作为大数据处理的重要工具,是建立在Hadoop文件系统上的数据仓库架构,旨在为大规模数据集提供数据分析和管理能力。其设计初衷是解决直接使用Hadoop MapReduce进行...

    apache-hive-2.3.2-bin.tar.gz

    1. **Hive CLI(Command Line Interface)**:这是用户与 Hive 交互的主要接口,提供了命令行工具用于执行 SQL 查询。 2. **Metastore**:存储元数据,如表的定义、分区信息等。元数据通常存储在关系数据库中,如 ...

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

    Hive支持多种访问接口,如BeeLine、Hive CLI、JDBC、ODBC和Web接口,适应不同用户需求。 6.6 Oozie Oozie 是一个工作流调度系统,用来管理和协调Hadoop生态系统中的工作流任务,如MapReduce作业、Pig脚本、Hive查询...

    fjw-hive-3.1.3-bin (1).tar,fjw-hive-3.1.3-bin (1).tar

    5. **元数据管理**: Hive维护了关于数据的元数据,如表名、列名、分区等,这些信息用于解析和执行查询。 在压缩包子文件的文件名称列表中,我们看到"**fjw_hadoop-3.2.3.tar.gz**"。这表明压缩包中还包含了Hadoop的...

Global site tag (gtag.js) - Google Analytics