[hadoop3.x系列]Google Option概要及使用

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: [hadoop3.x系列]Google Option概要及使用

1.1 实现思路分析

  1. 使用Google Option解析命令行参数。
  2. 读取要采集的数据目录,生成上传任务,上传任务包含一个任务文件,该文件包含了要上传哪些文件到HDFS上。
  3. 执行任务,读取要上传的任务文件,挨个将任务文件中的文件上传到HDFS。上传中、上传完毕需要给任务文件添加特别的标识。

1.2 Google option命令行参数解析

为了实现程序的灵活性,可以手动指定从哪儿采集数据、以及配置上报到HDFS上什么样的位置。因为要从命令行中接收参数,此处使用Google-option来进行解析。以下是Google-option的github地址:https://github.com/pcj/google-options

1.2.1 G oogle-option 介绍

Google-option这是Bazel Project中的命令行参数解析器。 com.google.devtools.common.options程序包已拆分为一个单独的jar,用于通用实用程序。

Bazel:是Google开源的构建工具,它的速度非常快,是Maven的5倍以上。采用了Cache和增量构建。修改一行代码,Bazel只需要0.5s,但Maven需要重新构建一次。Bazel可以比较容易扩展至其他语言,原生支持Java、C++,现在还支持Rust、Go、Scala等

1.2.2 安装GoogleOption
<dependency>
  <groupId>com.github.pcj</groupId>
  <artifactId>google-options</artifactId>
  <version>1.0.0</version>
</dependency>
1.2.3 使用方式
  1. 创建一个类用于定义所有的命令行选项,这个类需要从OptionBase继承
package example;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
import java.util.List;
/**
 * Command-line options definition for example server.
 */
public class ServerOptions extends OptionsBase {
  @Option(
      name = "help",
      abbrev = 'h',
      help = "Prints usage info.",
      defaultValue = "true"
    )
  public boolean help;
  @Option(
      name = "host",
      abbrev = 'o',
      help = "The server host.",
      category = "startup",
      defaultValue = ""
  )
  public String host;
  @Option(
    name = "port",
    abbrev = 'p',
    help = "The server port.",
    category = "startup",
    defaultValue = "8080"
    )
    public int port;
  @Option(
    name = "dir",
    abbrev = 'd',
    help = "Name of directory to serve static files.",
    category = "startup",
    allowMultiple = true,
    defaultValue = ""
    )
    public List<String> dirs;
}
  1. 解析这些参数并使用它们
package example;
import com.google.devtools.common.options.OptionsParser;
import java.util.Collections;
public class Server {
  public static void main(String[] args) {
    OptionsParser parser = OptionsParser.newOptionsParser(ServerOptions.class);
    parser.parseAndExitUponError(args);
    ServerOptions options = parser.getOptions(ServerOptions.class);
    if (options.host.isEmpty() || options.port < 0 || options.dirs.isEmpty()) {
      printUsage(parser);
      return;
    }
    System.out.format("Starting server at %s:%d...\n", options.host, options.port);
    for (String dirname : options.dirs) {
      System.out.format("\\--> Serving static files at <%s>\n", dirname);
    }
  }
  private static void printUsage(OptionsParser parser) {
    System.out.println("Usage: java -jar server.jar OPTIONS");
    System.out.println(parser.describeOptions(Collections.<String, String>emptyMap(),
                                              OptionsParser.HelpVerbosity.LONG));
  }
}
1.2.4 开发舆情上报程序参数解析
1.2.4.1 使用G oogleOption 创建参数实体类
  1. 在cn.itcast.sentiment_upload.arg包下创建一个SentimentOptions类,并从OptionsBase继承
  2. 定义以下几个参数

(1) 帮助,可以显示命令的帮助信息 help h 默认参数

(2) 要采集数据的位置 source s

(3) 生成待上传的临时目录 temp_dir t “/tmp/sentiment”

(4) 生成要上传到的HDFS路径 output o

参考代码:

import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
/**
 * 参数实体类
 * (1) 帮助,可以显示命令的帮助信息 help h 默认参数
 * (2) 要采集数据的位置 source s
 * (3) 生成待上传的临时目录 temp_dir t "/tmp/sentiment"
 * (4) 生成要上传到的HDFS路径 output o
 */
public class SentimentOptions extends OptionsBase {
    @Option(
            name = "help",
            abbrev = 'h',
            help = "打印帮助信息",
            defaultValue = "true"
    )
    public boolean help;
    @Option(
            name = "source",
            abbrev = 's',
            help = "要采集数据的位置",
            defaultValue = ""
    )
    public String sourceDir;
    @Option(
            name = "pending_dir",
            abbrev = 'p',
            help = "生成待上传的待上传目录",
            defaultValue = "/tmp/pending/sentiment"
    )
    public String pendingDir;
    @Option(
            name = "output",
            abbrev = 'o',
            help = "生成要上传到的HDFS路径",
            defaultValue = ""
    )
    public String output;
}
1.2.4.2 在 main方法中解析参数
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
/**
 * 参数实体类
 * (1) 帮助,可以显示命令的帮助信息 help h 默认参数
 * (2) 要采集数据的位置 source s
 * (3) 生成待上传的临时目录 temp_dir t "/tmp/sentiment"
 * (4) 生成要上传到的HDFS路径 output o
 */
public class SentimentOptions extends OptionsBase {
    @Option(
            name = "help",
            abbrev = 'h',
            help = "打印帮助信息",
            defaultValue = "true"
    )
    public boolean help;
    @Option(
            name = "source",
            abbrev = 's',
            help = "要采集数据的位置",
            defaultValue = ""
    )
    public String sourceDir;
    @Option(
            name = "pending_dir",
            abbrev = 'p',
            help = "生成待上传的待上传目录",
            defaultValue = "/tmp/pending/sentiment"
    )
    public String pendingDir;
    @Option(
            name = "output",
            abbrev = 'o',
            help = "生成要上传到的HDFS路径",
            defaultValue = ""
    )
    public String output;
}


目录
相关文章
|
5月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
184 0
|
存储 分布式计算 Hadoop
Hadoop源码分类概要整理
  最近突然觉得, 很多掌握的都还是很浅的原理,需要更深入细粒度去了解整个分布式系统的运转机制。于是。。开始作死而又作死而又作死的源码之旅。   Hadoop包的功能总共有下列几类:   tool:提供一些命令行工具,如DistCp,archive   mapreduce,:Hadoop的Map/R...
1052 0
|
10天前
|
存储 分布式计算 资源调度
两万字长文向你解密大数据组件 Hadoop
两万字长文向你解密大数据组件 Hadoop
40 11
|
2月前
|
存储 分布式计算 Hadoop
|
2月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
119 0
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
|
2月前
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
2月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn背后的秘密!它是如何化身‘资源大师’,让大数据处理秒变高效大戏的?
【8月更文挑战第24天】在大数据领域,Hadoop Yarn(另一种资源协调者)作为Hadoop生态的核心组件,扮演着关键角色。Yarn通过其ResourceManager、NodeManager、ApplicationMaster及Container等组件,实现了集群资源的有效管理和作业调度。当MapReduce任务提交时,Yarn不仅高效分配所需资源,还能确保任务按序执行。无论是处理Map阶段还是Reduce阶段的数据,Yarn都能优化资源配置,保障任务流畅运行。此外,Yarn还在Spark等框架中展现出灵活性,支持不同模式下的作业执行。未来,Yarn将持续助力大数据技术的发展与创新。
33 2
|
2月前
|
分布式计算 Hadoop 大数据
Spark 与 Hadoop 的大数据之战:一场惊心动魄的技术较量,决定数据处理的霸权归属!
【8月更文挑战第7天】无论是 Spark 的高效内存计算,还是 Hadoop 的大规模数据存储和处理能力,它们都为大数据的发展做出了重要贡献。
71 2
|
2月前
|
存储 SQL 分布式计算
揭秘Hadoop:如何用这个超级工具征服大数据的海洋
【8月更文挑战第7天】Hadoop是一个强大的分布式系统基础架构
44 1

相关实验场景

更多