[hadoop3.x系列]googleoption概要及使用(代码片段)

manor的大数据奋斗之路 manor的大数据奋斗之路     2023-01-10     438

关键词:

前言

目前博客Hadoop文章大都停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路!

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;
    
    
    
  2. 解析这些参数并使用它们

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;

后记

📢博客主页:https://manor.blog.csdn.net
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 manor 原创,首发于 CSDN博客🙉
📢Hadoop系列文章会每天更新!✨

[hadoop3.x系列]hdfsresthttpapi的使用httpfs(代码片段)

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路!历史文章[hadoop3.x系列]HDFSRESTHTTPAPI的使用(一)WebHDFS🍑HTTPFS概述lHttpHDFS... 查看详情

[hadoop3.x系列]hdfsresthttpapi的使用httpfs(代码片段)

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路!历史文章[hadoop3.x系列]HDFSRESTHTTPAPI的使用(一)WebHDFS🍑HTTPFS概述lHttpHDFS... 查看详情

[hadoop3.x系列]hadoop常用文件存储格式及bigdatafileviewer工具的使用

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键 查看详情

[hadoop3.x系列]hadoop常用文件存储格式及bigdatafileviewer工具的使用

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键 查看详情

✨[hadoop3.x系列]hdfsresthttpapi的使用webhdfs(代码片段)

文章目录前言历史文章🍑需求:🍑WebHDFS概述及操作🐒简介🐒关于RESTful🚲REST🚲RESTFulAPI🚲PUT请求类型和POST请求类型的区别🐒HDFSHTTPRESTFULAPI🚲HTTPGET🚲HTTPPUT🚲 查看详情

[hadoop3.x系列]hdfsresthttpapi的使用webhdfs(代码片段)

文章目录前言🍑需求:🍑WebHDFS概述及操作🐒1.1.1简介🐒1.1.2关于RESTful🚲1.1.2.1REST🚲1.1.2.2RESTFulAPI🚲1.1.2.3PUT请求类型和POST请求类型的区别🐒1.1.3HDFSHTTPRESTFULAPI🚲 查看详情

✨[hadoop3.x]新一代的存储格式apachearrow

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路& 查看详情

✨[hadoop3.x]新一代的存储格式apachearrow

...停留在Hadoop2.x阶段,本系列将依据黑马程序员大数据Hadoop3.x全套教程,对2.x没有的新特性进行补充更新,一键三连加关注,下次不迷路& 查看详情

大数据hadoop2.x与hadoop3.x相比较都有哪些变化

参考技术A在这篇文章中,我们将讨论Hadoop2.x与Hadoop3.x之间的比较。Hadoop3版本中添加了哪些新功能,Hadoop3中兼容的Hadoop2程序,Hadoop2和Hadoop3有什么区别?我们希望Hadoop2和Hadoop3之间的这个功能的区别将帮助回答上述问题。Hadoop2.x... 查看详情

大数据基石-hadoop3.x学习教程-hadoop产品了解与快速上手(代码片段)

大数据基石-HadoopHadoop3.x版本全系列教程===楼兰===文章目录一、关于Hadoop1、关于Hadoop产品2、Hadoop课程内容3、Hadoop的主要组件二、Hadoop环境搭建以及快速上手1、Linux环境搭建2、Hadoop集群搭建3、Hadoop快速上手三、... 查看详情

大数据基石-hadoop3.x学习教程-大数据场景介绍

大数据基石-HadoopHadoop3.x版本全系列教程===楼兰===文章目录一、理解大数据1、大数据的特点2、大数据的应用方向3、大数据的工作前景二、大数据课程体系介绍1、大数据前置知识2、大数据课程体系一、理解大数... 查看详情

搭建hadoop3.x分布式集群(代码片段)

如今Hadoop已经升级为第3个大版本,相比Hadoop2.x,Hadoop3.x没有在架构上进行大的改动,而是提高了系统的可扩展性和资源利用率上,因此,Hadoop3.x有更高的性能、更强的容错能力和更高效的数据处理能力。到现... 查看详情

hadoop3.x时代,ec露个脸呗!

在本文中,笔者将详细研究HDFSEC(ErasureCoding,纠删码),讲解什么是HDFSEC,引入EC的原因,用于EC的算法,以及在Hadoop社区中为EC做的架构优化,最后再结合Hive实战HDFSEC。HDFS复制算法的问题为了提供容错,HDFS根据复制因子的大... 查看详情

大数据技术——hadoop3.x入门搭建+安装调优(1.入门)(代码片段)

...环境准备3.2克隆虚拟机3.3在hadoop102安装JDK3.4在hadoop102安装Hadoop3.5Hadoop目录结构四、Hadoop运行模式4.1本地运行模式(官方WordCount)4.2完全分布式运行模式(开发重点& 查看详情

[hadoop3.x]hdfs存储类型和存储策略概述(代码片段)

文章目录前言历史文章🍑HDFS存储类型和存储策略🐒介绍🍑存储类型和存储策略🐒多种多样的存储类型🐒速率对比🐒存储类型🐒存储策略介绍🐒HDFS中的存储策略🐒存储策略方案🐒配置... 查看详情

[hadoop3.x]hdfs存储类型和存储策略概述(代码片段)

文章目录前言历史文章🍑HDFS存储类型和存储策略🐒介绍🍑存储类型和存储策略🐒多种多样的存储类型🐒速率对比🐒存储类型🐒存储策略介绍🐒HDFS中的存储策略🐒存储策略方案🐒配置... 查看详情

[hadoop3.x]hdfs存储类型和存储策略概述(代码片段)

文章目录前言历史文章🍑HDFS存储类型和存储策略🐒介绍🍑存储类型和存储策略🐒多种多样的存储类型🐒速率对比🐒存储类型🐒存储策略介绍🐒HDFS中的存储策略🐒存储策略方案🐒配置... 查看详情

[hadoop3.x]hdfs存储类型和存储策略概述(代码片段)

文章目录前言历史文章🍑HDFS存储类型和存储策略🐒介绍🍑存储类型和存储策略🐒多种多样的存储类型🐒速率对比🐒存储类型🐒存储策略介绍🐒HDFS中的存储策略🐒存储策略方案🐒配置... 查看详情