Spring Boot Yarn - 传递命令行参数

2024-01-07

我正在尝试在 Spring Boot Yarn 应用程序中传递命令行参数,但遇到了困难。我知道我可以在 yml 文档中设置这些spring.yarn.appmaster.launchcontext.arguments但如何从命令行呢?喜欢java -jar MyYarnApp.jar {arg0} {arg1}并从我的访问它@YarnContainer?

我发现了@YarnProperties映射到spring.yarn.appmaster.launchcontext.arguments但我想从命令行设置它们,而不是在 yml 中


当您发现时,您已经非常接近这一点了spring.yarn.client.launchcontext.arguments and spring.yarn.appmaster.launchcontext.arguments。我们没有设置可以自动将所有命令行参数从客户端传递到 appmaster,然后 appmaster 将它们传递到容器启动上下文。不确定我们是否想这样做,因为您肯定希望控制 YARN 容器启动上下文中发生的情况。使用客户端的用户可能会沿着食物链传递流氓争论。

话虽如此,让我们看看我们可以用我们的简单单项目 YARN 应用指南 https://spring.io/guides/gs/yarn-basic-single.

我们仍然需要使用这些启动上下文参数来定义命令行参数,以基本上映射事物如何从客户端传递到 appmaster 到容器中。

我在application.yml中添加的内容:

spring:
    yarn:
        client:
            launchcontext:
                arguments:
                    --my.appmaster.arg1: ${my.client.arg1:notset1}
        appmaster:
            launchcontext:
                arguments:
                    --my.container.arg1: ${my.appmaster.arg1:notset2}

修改的HelloPojo in Application class:

@YarnComponent
@Profile("container")
public static class HelloPojo {

    private static final Log log = LogFactory.getLog(HelloPojo.class);

    @Autowired
    private Configuration configuration;

    @Value("${my.container.arg1}")
    private String arg1;

    @OnContainerStart
    public void onStart() throws Exception {
        log.info("Hello from HelloPojo");
        log.info("Container arg1 value is " + arg1);
        log.info("About to list from hdfs root content");

        FsShell shell = new FsShell(configuration);
        for (FileStatus s : shell.ls(false, "/")) {
            log.info(s);
        }
        shell.close();
    }

}

注意我是如何添加的arg1并使用@Value来映射它my.container.arg1。我们可以使用@ConfigurationProperties or @Value这是正常的 Spring 和 Spring Boot 功能,还有更多功能Boot 的参考文档 http://projects.spring.io/spring-boot如何使用这些。

然后你可以修改AppIT单元测试:

ApplicationInfo info = submitApplicationAndWait(Application.class, new String[]{"--my.client.arg1=arg1value"});

并通过测试运行构建

./gradlew clean build

或者只是构建它而不运行测试:

./gradlew clean build -x test

然后用你的提交到一个真正的hadoop集群my.client.arg1.

java -jar build/libs/gs-yarn-basic-single-0.1.0.jar --my.client.arg1=arg1value

无论哪种方式你都看到arg1value登录容器日志:

[2014-07-18 08:49:09.802] boot - 2003  INFO [main] --- ContainerLauncherRunner: Running YarnContainer with parameters [--spring.profiles.active=container,--my.container.arg1=arg1value]
[2014-07-18 08:49:09.806] boot - 2003  INFO [main] --- Application$HelloPojo: Container arg1 value is arg1value

使用格式${my.client.arg1:notset1}还允许您自动定义默认值notset1 if my.client.arg1被用户省略。我们正在研究由 Spring Boot 精心策划的 Spring 应用程序上下文,因此您可以使用其中的所有好东西

如果您需要更精确地控制那些面向用户的参数(使用 args4j、jopt 等),那么您需要为 client/appmaster/container 订单提供单独的代码/jar 来创建自定义客户端主方法。所有其他 Spring YARN 入门指南几乎都使用多项目构建,因此请查看这些指南。例如,如果您只想拥有第一个和第二个参数值,而不需要使用完整的--my.client.arg1=arg1value在命令行上。

请告诉我们这是否适合您,以及您是否有任何其他想法可以让事情变得更简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot Yarn - 传递命令行参数 的相关文章

随机推荐

  • GDI+ LockBits()/UnLockBits() 异常

    我的程序是用 C 编写的 并在低级别上使用位图进行操作 一切工作正常 但有时 非常罕见 但稳定 会发生异常 通用 GDI 异常 并且很难重现这种情况 函数 LockBits 和 UnLockBits 发生异常 它包含错误代码 2147467
  • 如何在 QML 中捕获信号?

    如何将信号从一个 qml 组件发送到另一个 下面是一个例子 Rectangle id main width 360 height 360 signal clicked Text id testStr anchors centerIn par
  • Ingress 不转发请求 - 适用于 Windows 和 kubernetes 的 Docker 桌面

    EDIT 我删除了 minikube 在 Windows 的 Docker 桌面中启用了 kubernetes 并安装ingress nginx手动 helm upgrade install ingress nginx ingress ng
  • 使用powershell和svn删除未版本控制的文件

    我正在尝试编写一个构建脚本来使用 Powershell 签出代码 我需要能够使用 SVN 存储库中的适当更改来替换对工作副本所做的任何修改 这还包括删除在存储库中删除但未在工作副本中删除的所有文件 不幸的是 我无法进行干净的签出 因为每次运
  • Xdebug 3 docker mac PhpStorm 损坏的管道

    I see There was a problem sending 179 bytes on socket 11 Broken pipe 在 xdebug log 中看不到原因 这几天一直在兜圈子 尝试各种东西 我究竟做错了什么 X调试3
  • HTML 中的绝对路径不起作用

    我正在尝试使用小型 JavaScript 代码构建 HTML 模板 这是内容 在根目录下 我构建了两个文件 索引 html
  • 检查密码强度的最佳方法是什么?

    确保用户提供的密码是注册或更改密码表单中的强密码的最佳方法是什么 我的一个想法 用Python def validate password passwd conditions met 0 conditions total 3 if len
  • PK在深色模式和浅色模式下绘制不同的结果

    使用时PKDrawing在暗模式下生成的图像图像来自矩形 比例 https developer apple com documentation pencilkit pkdrawing 3237277 imagefromrect返回白色的钢笔
  • WPF 异步任务 阻塞 UI

    我已经与Task类型 一切都很好Task什么也不返回 例如 XAML
  • Python、Windows 和多重处理

    我有一个最初在 Linux 上构建的 Python 程序 现在我正尝试将其移植到 Windows 我在包含所有依赖项的虚拟环境中运行该程序 我的程序使用 pip install find linkswheelsmy module 作为轮子安
  • 为什么这个普通的 js 函数在 d3v3 和 d3v4 中返回不同的结果

    这是一个基于一些从令人惊叹的 d3 js v3 到 v4 的模板的 MWE 数据位于 csv 文件中 两个示例都加载相同的文件 干净 day movie1 movie2 movie3 movie4 movie5 movie6 1 20 8
  • 识别发生特定模式变化的行

    简介 背景 我需要分析 spss 数据表中的受访者数据 但我认为最好将这些数据复制到 Excel 或 Google 表格中 以进行我即将描述的特定分析 600 多名参与者被要求回答 100 个问题 每个参与者在数据中都有自己的行 他们对问题
  • 为什么我会收到“拆分包”警告?

    我正在构建一个 kar 文件 但是当我运行时mvn package我收到此错误 INFO maven bundle plugin 2 4 0 bundle default bundle common WARNING Bundle se em
  • 如何重命名物理数据库文件

    我使用 tsql 来分离数据库 如下所示 EXEC sp detach db dbname my db 然后我使用 PHP 来重命名物理文件 我能够重命名 mdf 文件 但不能重命名 ldf 文件 我什至尝试过dos命令REN但这对于 ld
  • R Shiny - 错误:没有名为“shinyjs”的包

    当我在本地运行我的应用程序时 它运行得很好 但是当我将它托管在闪亮应用程序io出现这个错误 发生了错误 应用程序无法启动 value 3L 中的错误 没有名为 shinyjs 的包 调用 本地 tryCatch gt tryCatchLis
  • 如何在巨大的 XML 文件中进行命令行 XPath 查询?

    我有一个 XML 文件集合 其中一些文件非常大 最多约 5000 万个元素节点 我在用xmllint用于验证这些文件 由于流 API 即使对于巨大的文件 它也能很好地工作 xmllint loaddtd stream valid path
  • distanceFromLocation 方法如何工作?

    我经常使用distanceFromLocation方法用于CLLocation对象来获取与其他位置的距离 枚举 CLLocations 数组 然后使用此方法将每个位置与我的参考位置进行比较 我很想知道使用的处理 内存影响distanceFr
  • Makefile 中的通配符目标

    如何压缩以下 Makefile 目标 GRAPHDIR Complex png GRAPHDIR Complex dot dot GRAPHDIR Complex dot Tpng o GRAPHDIR Complex png GRAPHD
  • Searchkick + Bloodhound + Typeahead 用于自动完成

    我正在尝试实施一个简单的自动完成功能对于单个属性 Model searchkick text start name autocomplete name 重新索引行为后Rails 控制台没问题 2 2 0 p0 002 gt Doctor s
  • Spring Boot Yarn - 传递命令行参数

    我正在尝试在 Spring Boot Yarn 应用程序中传递命令行参数 但遇到了困难 我知道我可以在 yml 文档中设置这些spring yarn appmaster launchcontext arguments但如何从命令行呢 喜欢j