从本地目录和S3目录生成Classpath字符串的最佳实践

news2024/11/16 23:52:29

从一个目录生成Classpath字符串是一个非常常见的问题,在使用命令提交一个Java、Spark作业时会经常遇到。通常遇到的遇到情况是:将本地目录下的Jar文件拼接成一个Classpath字符串,这时,通常我们可以使用这样的命令:

spark-submit -- class your.MainClass \ 
             --jars $(echo /path/*.jar | tr ' ' ',') \ 
             your-application.jar

这里的echo /path/*.jar | tr ' ' ','是一个非常灵巧,非常简洁的拼接Classpath字符串的方法,从中也可以看到Shell的强大和灵活。本文地址:https://laurence.blog.csdn.net/article/details/131644295,转载请注明出处!

相对比较麻烦的是从S3目录生成Classpath字符串,麻烦之处在于S3的ls命令输出的文件列表格式比较复杂,需要处理多次才得得到期望的字符串。

使用aws s3 ls s3://... 列出文件列表时,有一个非常细节的问题,如果不注意会导致拼接的字符串出错:

  • 如果路径是一个S3桶(路径中没有路径分割符),例如:s3://glc-hudi-cdc-job-extra-jars 这样的路径,使用s3的ls命令列出文件时,行为和Linux的ll命令一致,没有问题:

在这里插入图片描述

  • 如果路径是一个多级目录(不是直接在一个S3桶下),例如:s3://apache-hudi-delta-streamer/jars这样的路径,使用s3的ls命令列出文件时,会在第一行多生成一个header行,像是当前目录对象的一条记录:

在这里插入图片描述
为了兼容这两种情况,我们需要先使用grep精准匹配出的包含jar文件的行,然后再使用awk命令输出符合期望的完整路径和逗号分隔符,最后将多行归并为一行,去除末尾的逗号分隔符即可得到最后的Classpath字符串了,以下是一示例:

aws s3 ls s3://apache-hudi-delta-streamer/jars/ | grep -o '\S*\.jar$'| awk '{print "s3://apache-hudi-delta-streamer/jars/"$1","}' | tr -d '\n' | sed 's/,$//'

通常,脚本中的路径都是一个些变量,使用变量形式改写后如下:

APP_S3_HOME="s3://apache-hudi-delta-streamer"
JARS=$(aws s3 ls $APP_S3_HOME/jars/ | grep -o '\S*\.jar$'| awk '{print "'"$APP_S3_HOME/jars/"'"$1","}' | tr -d '\n' | sed 's/,$//')

然后,我们就可以在命令行中传入Classpath参数的地方写$JARS就可以了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《八角笼中》电影我表达不出的好

昨天看完王宝强主演的《八角笼中》内心久久不能平静,里面有很多触动我的点,如果是写作高手,一定能从这部影片中捕捉到很多可写的话题。其实我也有,只是一直在思索要如何定主题,把内心深处那些想法表达出来,…

【HDC.Cloud 2023】华为云区块链分论坛内容值得再读!

Web3是全新的互联网世界,它不仅仅是一个技术革新,更是一种新的生态系统。在这个新的生态系统中,区块链技术、去中心化应用、智能合约等技术被广泛应用,为人们带来了更加安全、透明、去中心化的互联网体验。 然而,Web3的…

底层的出路,就在突破多重“八角笼”

底层的出路,就是突破“八角笼” “八角笼”隐喻是:出生地域,出生家庭,教育机会限制,权力网络,知识和技能的限制,资源的网络,机会…… 趣讲大白话:突破困局,精…

VoxPose:零样本训练机器人听你的话

VoxPoser是一种从大型语言模型(LLMs)中提取机器人操纵的可供性和约束的方法,它不需要额外的训练,并且可以泛化到开放集的指令。 地址:VoxPoser 它利用LLMs的编码能力,与视觉语言模型(VLMs&…

快使用双截棍 | 低码之连接器 元服务开发的奇门武器

AppGallery Connect(以下简称AGC)低代码服务是一个基于Serverless的低代码开发平台,可通过拖拽式开发,可视化配置构建元服务。打通HarmonyOS云侧与端侧能力,轻松实现HMS Core和AGC Serverless能力的调用,宛…

基于matlab校正亮度不均匀问题并分析前景对象(附源码)

一、前言 此示例说明如何在分析前的预处理步骤增强图像。在此示例中,您可以校正背景亮度不均匀问题,并将图像转换为二值图像,以便于识别前景对象(单个米粒)。然后,您可以分析对象,例如计算每粒…

【剑指offer】学习计划day3

​​​​​​​ 目录 一. 前言 二.替换空格 a.题目 b.题解分析 c.AC代码 三. 左旋转字符串 a.题目 b.题解分析 c.AC代码 一. 前言 本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接: 剑指offer-学习计划https://leetcode.cn/stud…

多线程(3): 线程同步

1. 互斥锁的加锁和解锁 1.1 加锁解锁说明 在处理线程同步时,第一种方式就是使用互斥锁。互斥锁只能同时被一个线程使用,锁的所有权只能被一个线程拥有。互斥锁是线程同步最常用的一种方式,通过互斥锁可以锁定一个代码块 ,被锁定…

23款奔驰S450 4MATIC更换原厂旋转高音,提升车内氛围感

奔驰加装3D旋转高音,让高音“有型有色”,高端3D环绕立体声音响系统的视觉效果同样令人印象深刻:系统启动时,安装在前车门后视镜三角板中的两个高音头会与同色车内氛围灯一块亮起,同时向外旋出10mm至最佳效果位置,以提高…

docker安装单机版nacos,并把数据保存到MySQL

1.下载镜像(请根据cloud版本选择) docker pull nacos/nacos-server:1.4.12.启动临时镜像并拷贝文件 docker run -p 8848:8848 -p 9848:9848 -p 9849:9849 --name nacos-temp \ -d nacos/nacos-server:1.4.1后面是需要修改的本机路径 docker cp nacos-temp:/home/nacos/logs/…

记录一个heatmap.js在strict模式下的bug

ImageData的data属性只读&#xff0c;无法修改 出问题的在原始代码的490行~528行 var img this.shadowCtx.getImageData(x, y, width, height);var imgData img.data;var len imgData.length;var palette this._palette;for (var i 3; i < len; i 4) {var alpha imgD…

拥有铁粉,怀抱CSDN大家庭

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…

收藏备用 | 提高效率的建筑工地技巧

随着城市化进程的加速和建筑业的蓬勃发展&#xff0c;建筑工地扬尘和噪声污染成为了日益突出的问题。这些问题不仅对周边环境造成了不良影响&#xff0c;还对居民的生活质量和健康造成了潜在风险。 为了有效管理和监控建筑工地的扬尘和噪声水平&#xff0c;保障周边居民的权益和…

ROS:rqt工具箱

目录 一、概念二、作用三、rqt安装启动3.1安装3.2启动 一、概念 ROS基于 QT 框架&#xff0c;针对机器人开发提供了一系列可视化的工具&#xff0c;这些工具的集合就是rqt 二、作用 方便的实现 ROS 可视化调试&#xff0c;并且在同一窗口中打开多个部件&#xff0c;提高开发…

nginx简单项目部署

后台可以连接idea服务也可以部署到java上这里不展开 nginx官网下载安装 启动命令&#xff1a; start nginx 或者双击nginx.exe 重启命令 &#xff1a;nginx -s reload 修改配置文件 E:\dev\nginx\nginx-1.22.1\conf\nginx #user nobody; worker_processes 1;#error_log lo…

[Unity实战]EnhancedScroller v2.21.4简单使用[开箱可用]

[Unity实战]EnhancedScroller v2.21.4简单使用[开箱可用] EnhancedScroller v2.21.4 简单使用EnhancedScroller是什么?1.处理UI1.1 加入Canvas1.2 Canvas/Scroller --> 空对象1.3 Scroller加入组件 EnhancedScroller1.4 拖拽Scroller1.5 Scroller/GameObject --> 拖拽到…

GPIO8种工作模式

前言&#xff1a; GPIO是单片机通用的输入输出引脚&#xff0c;基本用途可作为开关&#xff0c;常用于控制LED亮灭、蜂鸣器的鸣响、电机的转停&#xff0c;但由于驱动能力不够&#xff0c;常常要与三极管一起使用。其它的高级用途如I/O作为输入引脚&#xff0c;可检测外部的中…

「解决」pip install xxx 解释器错误: 没有那个文件或目录

bash: /home/raywit/anaconda3/envs/xxx/bin/pip: /home/another/anaconda3/envs/xxx/bin/python: 解释器错误: 没有那个文件或目录 上图是当我拷贝别人环境时发现少包&#xff0c;然后继续pip时出现这样的错&#xff0c;根本原因则是使用pip时路径没修改成自己的。&#xff08…

金九银十互联网大厂Java面试1000问,覆盖一线大厂各种面试痛点

不知不觉马上要到金九银十的跳槽黄金月&#xff0c;跳槽结果有人欢喜有人愁&#xff0c;找到好的下家固然可喜&#xff0c;跳槽结果不理想的朋友也不必丧气&#xff0c;只要扎实提升自己的技术&#xff0c;弄明白大厂面试官的出题逻辑&#xff0c;进大厂必是水到渠成。 之前有…

任天堂 Switch 六月销量破纪录,极有可能成为日本市场销量冠军

任天堂于2017年发布的游戏机Switch已进入第六个年头。虽然该游戏机在硬件性能和品控方面受到一些评价不佳&#xff0c;但销售数据表明绝大多数玩家仍然乐意购买Switch游戏机。 根据日本经济新闻报道&#xff0c;今年6月Switch在日本销售了380,000台机器&#xff0c;同比增长68%…