【spark】on yarn的模式下,如何上传files并在程序中读取到?

spark常见操作系列(2)--spark读写hadoop 真正开发大数据之前,本人折腾过hadoop,spark组件,其中把之前公司的日志放到hadoop 和hive里面去读写.但实际上,真正开发spark程序,遇到的坑,是十分多的. 本篇主要介绍spark读写hadoop.hadoop的读写,有java方式,也有scala方式. 虽scala可以嵌入java代码,并不意味着直接把java 操作工具类放到scala程序就行了. hadoop 一般... 阅读详情

在使用spark的时候,往往我们需要外部传入文件,来配合程序做数据处理

那么这就涉及到,如何传入,如何获取(本文讨论的是spark on yarn)

讲实话,我觉得这个问题挺烦的,我百度了好久(可能我姿势不对?),各种博客,stackoverflow,community.cloudera.com都找过,我觉得回答方都停留在理论基础,并没有show me code,我实际测试的时候,好像又和他们说的不太一样,哎,要是能有统一的入口,统一的出口就好了

1、client模式

client模式下,driver开启在提交任务的机器上,所以他可以直接读取到本地的文件,这就很简单了

(1)、从shell中传入文件的绝对路径(关键在spark.filename这一行)

bin/spark-submit \
--master yarn \
--class spark.LoadFileTest \
--deploy-mode client \
--conf spark.file.absolutepath=/opt/data/sql.txt \
/opt/CDH/spark-2.2.0-bin-2.6.0-cdh5.12.1/spark.jar 

其实随便找个名字,不一定要用spark.file.absolutepath来作为参数名称,但是你的参数名称必须是spark开头的,才会被sparkConf加载

 (2)、在代码中获取到shell传入的路径,然后通过java的io流读取数据

public static void main(String[] args)  {
        SparkSession sparkSession = buildSparkSession(false, "LoadFileTest");
        String absolutePath = sparkSession.conf().get("spark.file.absolutepath");
        System.out.println("===============文件绝对路径=================");
        System.out.println("absolutePath = "+ absolutePath);
    
        String sql = readFileContent(absolutePath);
        System.out.println("文件内容 = "+ sql);
    }

private static String readFileContent(String absolutePath) {
        BufferedReader reader = null;
        StringBuffer stringBuffer = new StringBuffer();
        try {
            reader = new BufferedReader(new InputStreamReader(new FileInputStream(absolutePath)));
            String str;
            //一次读取一行
            while ((str = reader.readLine()) != null) {
                stringBuffer.append(str + "\n");
            }
        } catch (Exception e) {
           e.printStackTrace();
            return null;
        }
        return stringBuffer.toString();
    }

(3)、获得了之后想干嘛就干嘛吧,如果想让executor处理的时候也用到这个数据,可以把这个数据做为广播变量广播出去就好了

2、cluster模式

cluster模式下,driver会在任意有资源的节点启动,那么他就读取不到当前提交任务的这台机器的数据了,所以理论上,我们需要提供一个分布式的文件系统,让所有机器都可以通过这个系统获取数据

(1)、在shell中使用--files的方式上传文件,并且还要传入文件名

bin/spark-submit \
--master yarn \
--class spark.LoadFileTest \
--deploy-mode cluster \
--conf spark.file.absolutepath=sql.txt \
--files /opt/sql.txt  \
/opt/CDH/spark-2.2.0-bin-2.6.0-cdh5.12.1/spark.jar 

通过以上shell,你会发现日志中有一条info,把本地的文件上传到了hdfs上,这样就可以通过hdfs访问这个数据

(2)、代码中获取

可以通过spark的read直接读数据,也可以自己写io流读取hdfs上的文件,这里我选的第一种,比较方便

public static void main(String[] args)  {
        SparkSession sparkSession = buildSparkSession(false, "LoadFileTest");
        String fileName= sparkSession.conf().get("spark.file.absolutepath");
        System.out.println("===============文件名=================");
        System.out.println("fileName= "+ fileName);
        Dataset<String> confSql = spark
                .read()
                .textFile(System.getenv("SPARK_YARN_STAGING_DIR") + "/" + fileName);

        confSql.show(false);
        //这里可以通过take,collect等方法,把Dataset的中的数据取出转成String
        //由于太简单我就不写了

    }

有同学会问,诶,你这个SPARK_YARN_STAGING_DIR哪里来的呀?

通过cluster提交的任务,我们无法在提交的机器直接看到日志,所以我的hadoop开启了jobhistory服务之后,我运行如下查看日志的命令

bin/yarn logs -applicationId 这里传入具体的$application_id

3、备注

另我觉得烦的事情是这样的,我在想,有没有统一的方法,不管是client还是cluster都可以使用这个方法读取数据

不知道是就没有这样的方法,还是我找不到

你看,理论上来说,client模式,我也通过--files把文件上传到hdfs上,然后读取hdfs上的数据就好了呀,但是关键在于client模式下,SPARK_YARN_STAGING_DIR居然为null,这实在太难受了。。。。那我就不能方便的得到--files上传的数据的目录了,所以client模式我才会用io直接读取本地文件,不知道各位老哥们有没有解决这个问题的方法呢?

所以如果不确定用户提及shell中,会使用client还是cluster,那代码中,只能先加一层判断,判断sparkSession.conf().get("spark.submit.deployMode")这个值是client还是cluster,然后再调用对应模式下的文件的读取,想想就觉得好烦啊!

好了菜鸡一只,下次再见!

马上端午节加上我的生日到了,提前祝自己生日快乐吧!

DGX Spark集群中Docker部署FireRed图像编辑模型的工业级实践 在AI推理服务工程化中,GPU加速模型的服务化部署需兼顾一致性、可扩展性与硬件深度适配。Docker通过镜像固化实现跨节点环境一致,避免CUDA版本错配、驱动ABI不兼容等典型故障;Spark则作为分布式任务编排中枢,协同YARN实现GPU资源的动态调度与容错恢复。二者结合构成面向DGX超算平台的云原生推理底座,支撑高并发、低延迟、多实例隔离的图像生成类应用——如FireRed-Image-Edit这类基于扩散模型的语义级局部重绘服务。本文聚焦DGX A100/H100环境下的Docker镜像构建规范、CU 阅读详情

相关推荐

Amazon EMR生产实战:从踩坑到自愈的深度指南

Amazon EMR是构建云原生数据湖的核心引擎,其本质是基于YARN调度的Spark/Hadoop托管服务,依赖S3作为默认存储层、IAM实现细粒度权限控制,并通过Bootstrap脚本与配置分类(Configurations)完成深度定制。理解其底层资源模型(如vCPU/内存带宽对广播性能的影响)、S3路径前缀与List效率的关系、AQE自适应优化器的启用代价,是避免OOM、卡顿和预算超支的关键。技术价值体现在TB级日志分析分钟级响应、混合Spot/On-Demand成本优化、以及Lambda+Clou

anjichan4261的博客 436

spark 带文件上集群,获取外部文件,--files 使用说明

当使用spark-submit --files时,会将–files后面的文件路径记录下来传给driver进程,然后当启动driver进程时,会调用SparkFiles.addFile(file_path),并复制文件到driver的临时文件目录中。下面解释为什么FileInputStream和Source.fromFile直接写文件名也可以,因为scala io的相对路径取的事jvm的相对路径,而jvm的相对路径的根目录和driver和executor的工作路径是相同的。工作目录下该文件是存在的。

Code_LT的博客 4730

Spark Word Count Java实战:从单机到分布式的核心原理与避坑指南

Word Count是理解分布式计算的入门范式,其本质是将单机数据处理逻辑映射到集群环境下的数据分片、并行计算与资源调度全过程。它揭示了RDD血缘、Shuffle机制、JVM内存模型及序列化协议等底层原理,技术价值在于暴露真实生产环境中的典型问题,如Task not serializable、OutOfMemoryError、类加载冲突和路径协议误用。应用场景覆盖本地调试、YARN部署、HDFS/S3数据读取及性能调优,尤其适用于Java工程师向大数据领域转型的首站实践。本文聚焦Spark on YARN

weixin_34059951的博客 355

spark读取外部配置文件之--files

在运行spark程序的时,有时需要读取外部配置参数,比如mysql的host参数、端口号、es主机ip、es端口号等。通过外部文件配置参数也方便程序迁移。下面就来看看如何来实现。1、首先我们需要一个配置文件:property.ymles.nodes: 192.16.8.16 es.port: 92002、上传配置文件到某个节点:3、然后需要在程序里加上如下代码:Properties props ...

在路上的专栏 1万+

数据科学平台演进:从VM到裸金属再到Serverless Spark

Serverless Spark是云原生数据工程的关键范式,其本质是将计算资源抽象从物理层(裸金属)、虚拟层(VM)跃迁至语义层——以声明式API驱动弹性调度与自动优化。它依托Spark成熟的DataFrame API和AQE自适应执行引擎,解决批流一体场景下的开发效率、运维负担与成本控制三重矛盾。相比Flink的强流式导向、Dask的轻量但不可控、Polars的单机局限,Spark在数据科学家熟悉度、状态管理能力、Serverless生态成熟度上形成独特优势。典型落地价值体现在小时级特征上线、零配置生产运

weixin_34214500的博客 423

IDEA本地运行Spark项目[演示自定义分区器]并查看HDFS结果文件

本地运行调试Spark项目 - 演示自定义分区器

howard2005的专栏 2268

Spark_Spark on YARN 提交配置文件,读取配置文件

  Spark ON YARN 的官方文档,基于Spark 2.1.1 http://spark.apache.org/docs/2.1.1/running-on-yarn.html To use a custom log4j configuration for the application master or executors, here are the options: upl...

迎难而上 4324

[Spark 进阶] -- Spark 如何在运行时读取 --files 添加的 README.md 文件?

Spark 如何在运行时读取 --files 添加的 README.md 文件? 方法 1 本方法适用于 spark local 和 spark on yarn-client 。 --files 会把文件上传到 hdfs 的 .sparkStagin/applicationId 目录下,使用上面说的方法先获取到 hdfs 对应的这个目录,然后访问hdfs的这个文件,如下 spark....

欢迎来到我的博客,一起探索代码里的世界! 7663

Spark on YARN 部署模式与资源参数配置实战指南

在大数据处理领域,资源调度是分布式计算框架的核心机制之一。Apache Spark 作为主流计算引擎,通常需要与 YARN(Yet Another Resource Negotiator)等资源管理器协同工作,以实现集群资源的统一分配与管理。其原理在于,Spark 通过 `spark-submit` 提交作业时,会将计算任务分解为 Driver 和 Executor 角色,并由 YARN 将其映射为 Container 进行资源隔离与调度。这一机制的技术价值在于能够高效利用集群资源,支持多租户、多任务并发执

weixin_30279671的博客 452

大数据之父_BIM先驱Charles (Chuck) M. Eastman逝世——致敬“BIM之父”

原标题:BIM先驱Charles (Chuck) M. Eastman逝世——致敬“BIM之父”BIM研究的先驱、佐治亚理工教授Charles (Chuck) M. Eastman于本周一(11月9日)在其Atlanta家中逝世。特转韩国Yonsei大学Ghang Lee教授的讣文以作纪念。过世原因未说明。BIM的出现是与当今时代科技的发展分不开的。在信息时代建筑发展面临的挑战巨大:建筑物越建越高...

weixin_39941262的博客 3302

稳定性性能系列之十五——系统稳定性监控体系建设:从指标到预警的完整方案

深入探讨Android系统稳定性监控体系的设计与实现,涵盖指标体系设计、数据采集方案、异常检测算法、预警响应机制,并提供完整的监控平台搭建实践。

Cheson的专栏 1358

spark 笔记(一) stand alone 和yarn-cluster的部分区别

公司最近的spark集群由原来的standalone迁移到spark on yarn了,在迁移相关的程序时,发现调整还是有一些的,以下分别是两个版本提交的部分shell命令,从命令可以看出其区别,这个区别主要是spark on yarn的工作方式不太一样,造成提交的方式也不太一样。     standalone方式的脚本为: spark-submit --class com.bg.tools

Keep Thinking And Learning 5818

RaiDrive+AList保姆级教程:5分钟搞定OneDrive/百度网盘挂载到本地(附WebDAV配置)

本文提供RaiDrive+AList的保姆级教程,5分钟内实现将OneDrive/百度网盘挂载到本地的详细步骤,包括WebDAV配置。通过AList统一转换云存储协议,RaiDrive虚拟磁盘挂载,显著提升多网盘管理效率,适合需要跨平台操作文件的用户。

weixin_28331555的博客 456

获取spark-submit --files的文件内容

参考https://community.hortonworks.com/questions/9265/how-can-i-add-configuration-files-to-a-spark-job-r.html If you add your external files using "spark-submit --files" your files will be uploaded to...

weixin_30471065的博客 2971

相机标定(六)—— 张正友标定法

相机标定一、相机标定的目的1. 相机的成像过程2. 相机标定的目的3. 畸变与畸变矫正二、张正友标定法简介三、标定相机内外参1. 求解内参和外参的积2. 求解内参矩阵3. 求解外参矩阵四、标定相机的畸变参数五、L-M算法参数优化六、相机标定的步骤七、源代码 一、相机标定的目的 1. 相机的成像过程 2. 相机标定的目的 3. 畸变与畸变矫正 二、张正友标定法简介 三、标定相机内外参 1. 求解内参和外参的积 2. 求解内参矩阵 3. 求解外参矩阵 四、标定相机的畸变参数 五、L-M算法参数优化 六、相机

weixin_41480034的博客 1万+

【49】软考软件设计师——冲刺复盘:高频易错点与应试策略|复盘清单+应试技巧

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第49篇,属于**模块六:冲刺与模拟**终篇,聚焦考前最后阶段的“精准复盘+应试提分”。全文围绕“高频易错点清零、答题时间优化、应急处理落地”三大核心,梳理9大知识领域的典型易错点(附避坑技巧)、优化版答题时间分配(含取舍策略)、考中全场景应急方案,配套可直接使用的“复盘清单”和“应试技巧手册”,帮助考生在最后阶段查漏补缺、固化得分逻辑,避免因低级错误丢分,以“稳、准、快”的状态应对考试。下一篇第50篇(终章)将进行全专栏知识体系回顾、考试策略总结

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 439

spark 带文件上集群,获取外部文件,--files 使用说明_spark-submit --files

本文讨论yarnclient和cluster模式。

2501_90229237的博客 634

《网络摄像机实战⑦:嵌入式端AWS KVS IoT SDK 库编译与测试全流程-君正/瑞芯微/全志(超详细指南)》

本文介绍了AWS音视频和物联网解决方案的核心组件与集成方法。主要内容包括:1)Amazon Kinesis Video Streams(KVS)提供的WebRTC托管服务,支持实时音视频流传输与双向交互;2)AWS IoT云服务实现设备连接与集成;3)详细说明了KVS WebRTC库的编译过程,包括源代码下载、CMake配置和依赖库生成;4)KVS Producer库的集成方法,重点阐述了存储空间调整和mbedtls版本适配等关键修改点。文章为开发者提供了AWS音视频和物联网服务的技术实现指南,特别针对嵌入

lvj_158的专栏 109

Spark:spark-submit说明

使用: $spark-submit --help Usage: spark-submit [options] <app jar | python file> [app arguments] 举例: spark-submit --master yarn-cluster \ --class Tkmeans \ --conf spark.y...

weixin_34262482的博客 174

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1793

Playwright爬虫实战:破解动态网页懒加载与无限滚动

本文介绍了使用Playwright处理懒加载和无限滚动页面的完整解决方案。摘要如下: 问题分析:传统爬虫无法获取JS动态渲染内容,Playwright能模拟真实浏览器行为解决此类问题。 核心原理: 懒加载:资源延迟加载,滚动触发 无限滚动:滚动到底部异步加载新内容 技术方案: 分段滚动页面并等待加载 动态监测页面高度变化 合理设置等待和终止条件 代码实现: 提供图片懒加载和无限滚动列表的完整可运行代码 包含异常处理和性能优化建议 关键优势: 比传统爬虫更可靠 支持复杂交互场景 完善的错误处理机制 该方法已在

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 523

Spark应用存档实战:Fat JAR与Python环境打包部署指南

在大数据处理中,依赖管理和环境一致性是保障作业可复现性的核心挑战。Apache Spark作为主流计算框架,其作业的可靠部署依赖于将代码、依赖和配置封装为可移植单元的技术原理。通过构建自包含的Fat JAR或Python环境归档,开发者能实现依赖隔离与版本控制,显著提升生产环境的稳定性。这种技术方案特别适用于持续集成和跨集群迁移场景,能有效解决环境冲突问题。本文聚焦Spark存档的工程实践,详细对比了Fat JAR、Python环境归档等主流方案,并提供从构建、验证到集成的完整操作指南,帮助团队建立标准化的

weixin_33888907的博客 385

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

进行Spark,Kafka针对Kerberos相关配置

1. 提交任务的命令 spark-submit \--class <classname> \--master yarn \--deploy-mode client \--executor-memory 2g \--executor-cores 2 \--driver-memory 2g \--num-executors 2 \--queue default \...

weixin_30656145的博客 1211

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spark项目打包与依赖管理实战:从本地开发到集群部署

在分布式计算领域,依赖管理是确保应用可移植性和稳定性的核心基础。其原理在于通过构建工具(如Maven、sbt)精确控制库的引入范围,区分编译时与运行时依赖,从而解决环境不一致导致的ClassNotFoundException等问题。这项技术的价值在于实现“一次构建,到处运行”,大幅提升开发效率和部署可靠性。在Spark数据分析、机器学习等应用场景中,依赖管理直接影响任务能否在YARN、Kubernetes等集群环境中成功执行。本文聚焦Spark项目归档,深入解析如何通过provided作用域、shade插件

leonard61306500的专栏 441

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Amazon EMR生产级实战:Spark调优、EMRFS深度配置与Spot容错

Amazon EMR并非简单的‘云上Hadoop’,而是融合基础设施编排、深度调优运行时与S3原生数据平面的分布式计算操作系统。其核心原理在于三层抽象协同:底层EC2资源池化管理、中层Spark/Hadoop发行版级预集成、上层EMRFS对S3的元数据一致性增强与延迟写入机制。技术价值体现在成本可控(Spot实例+自动伸缩)、弹性可靠(Application Recovery+Checkpoint)、可观测可诊断(CloudWatch+EMR日志管道)。典型应用场景包括PB级日志实时特征计算、分钟级ETL流

weixin_30954265的博客 386

Spark星火发射平台:一站式企业级大数据开发与运维解决方案

在大数据处理领域,Apache Spark作为核心分布式计算框架,以其内存计算和丰富的API著称。然而,其原生部署与运维的复杂性,如集群搭建、资源调度和任务监控,常成为工程实践中的主要挑战。为了解决这些‘最后一公里’的工程化痛点,企业级操作平台应运而生。这类平台通过封装和增强Spark,提供Web化的统一入口,集成了环境部署、多租户管理、任务调度与监控等关键功能,显著降低了开发运维门槛。其技术价值在于将强大的计算引擎与便捷的‘驾驶舱’结合,提升了团队协作与资源管理效率。典型的应用场景包括交互式数据分析、批处

weixin_30915951的博客 312
上一篇: 【java】获取线程池中的线程返回结果,Future和FutureTask的使用
下一篇: 【spark】都有哪些级别的容错或者失败重试?
lsr40
博客等级 码龄9年 328粉丝 116原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值