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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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;
}


目录
相关文章
|
7月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
243 0
|
存储 分布式计算 Hadoop
Hadoop源码分类概要整理
  最近突然觉得, 很多掌握的都还是很浅的原理,需要更深入细粒度去了解整个分布式系统的运转机制。于是。。开始作死而又作死而又作死的源码之旅。   Hadoop包的功能总共有下列几类:   tool:提供一些命令行工具,如DistCp,archive   mapreduce,:Hadoop的Map/R...
1067 0
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
192 6
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
83 2
|
6天前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
33 4
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
115 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
84 1
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
81 1
|
2月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
87 5
|
2月前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
39 4

相关实验场景

更多