Spark动态加载外部资源文件

  • 1、spark-submit --files 动态加载外部资源文件

之前做一个关于Spark的项目时,因项目中需要读取某个静态资源文件,然后在本地IDEA测试一切皆正常,但是传到服务器上时,一直显示找不到该静态资源文件,后尝试了两三种方法解决问题。

本地测试时,通过

val is: InputStream = this.getClass.getResourceAsStream(“./xxx.sql”)

来获取的静态资源文件,传至服务器后,找不到该静态资源文件。

遂尝试将文件传至HDFS,然后通过读取hdfs的文件来获取静态资源文件。

val gs = sc.textFile("hdfs://master:9000/user/resources/xxx.txt").first()

下部分原文作者:大葱拌豆腐
原文地址:spark-submit --files 动态加载外部资源文件


1、spark-submit --files 动态加载外部资源文件

spark时,有些时候需要加载资源文件,需要在driver或者worker端访问。在client模式下可以使用IO流直接读取,但是在cluster模式下却不能直接读取,需要如下代码:

val is: InputStream = this.getClass.getResourceAsStream(“./xxx.sql”)
val bufferSource = Source.fromInputStream(is)

这是直接读取classPath路径下的文件,但是cluster模式下,driver有可能不再程序提交的客户端上,以上代码会发生空指针异常。这是,就需要通过–files把外部资源文件加载到classpath路径下。正常情况加载—files filename1,filename2…,当知道外部源文件都是有哪些时,直接列举出来就可以。但是在某些情况下,开发者开发的是一个通用工具,不知到所要加载的是一个什么文件。这时就需要动态加载,我曾尝试过使用–files …/xxx/*.sql,这个可以动态加载指定目录下数据。但是后来发现,这样加载只能加载一个文件,文件夹中超过多余一个文件就会报错。试了很多种方式也没有测试成功。最后通过shell脚本列举文件夹中的文件拼装成字符串,才算完成。

程序打包目录如下:

代码实现如下:

##########################################################################################
####由于spark2_submit --files /../*.sql 不能加载多个文件所以只能拼装script路径下的文件####
##########################################################################################
###获取当前项目绝对路径###
#project_home=$(dirname $(readlink -f "$0"))"/.."
project_home="$(readlink -f $(cd "`dirname "$0"`"/..; pwd))"
###获取script绝对路径###
script_path=${project_home}"/script/"
###获取项目中script目录下所有的脚本文件
files=$(ls $script_path);
files=${files// / };
file_arr=($files);
files_str=""
for ele in ${file_arr[*]}
dofile_str=${file_str}${script_path}${ele},
done
len=`expr ${#file_str} - 1`
file_str=`expr substr "$file_str" 1 $len`
echo $file_str/usr/bin/spark2-submit  --executor-memory 15G   \--master yarn   \ --queue dataengine \--files $project_home/script/* \--executor-cores 5      \--driver-cores 3  \--name AutoScript  \--deploy-mode cluster   \--class xx.xx.xxx       \--driver-memory 10G      \--conf "spark.dynamicAllocation.executorIdleTimeout=300"   \--conf "spark.shuffle.file.buffer=16k"  \--conf "spark.yarn.appMasterEnv.JAVA_HOME=/opt/jdk1.8.0_45"     \--conf "spark.dynamicAllocation.minExecutors=11" \--conf "spark.dynamicAllocation.maxExecutors=11" \--conf "spark.speculation.quantile=0.85"        \--conf "spark.executorEnv.JAVA_HOME=/opt/jdk1.8.0_45"   \--conf "spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+UseG1GC "     \--conf "spark.executor.extraJavaOptions=-XX:+UseG1GC "     \--conf "spark.driver.extraClassPath=/home/sunkl/hive-exec-1.1.0-cdh5.7.6.jar" \--conf "spark.speculation=true" \--conf "spark.rpc.askTimeout=400" \--conf "spark.shuffle.service.enabled=true"     \$project_home/lib/******.jar

Spark动态加载外部资源文件相关推荐

  1. spark-submit --files 动态加载外部资源文件

    在做spark时,有些时候需要加载资源文件,需要在driver或者worker端访问.在client模式下可以使用IO流直接读取,但是在cluster模式下却不能直接读取,需要如下代码: val is ...

  2. Android热修复技术初探(三):动态加载外部资源

    前面已经介绍了Android平台上的几种ClassLoader,这几种ClassLoader都有各自的使用场景,有了这些基础知识之后,才能更好地理解以及探究Android热修复技术.首先我们来探究怎么 ...

  3. QLibrary 动态加载外部库文件

    /*转载请注明出处,谢谢*/ 背景:想搭一个软件系统,包含一个主模块,一堆子模块(用于扩展功能).主模块是一个可执行程序,子模块为动态库,可以加载在主模块中. 问题:每添加一个扩展功能就要修改一下主模 ...

  4. android jar 加入图片,Android动态加载外部jar包及jar包中图片等资源文件

    Android动态加载外部jar包及jar包中图片等资源文件 Android应用程序由Java开发,因此Java中许多实用的特性,在Android中也有体现.动态加载Class,也就是外部jar包,在 ...

  5. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

    http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主 ...

  6. Vue动态加载网络js文件

    1.新建loadScript.js //动态加载外部js //@param RESOURCE_LIST 外部地址集合["address"] export function load ...

  7. Vue——动态加载网络js文件

    1. 新建loadScript.js //动态加载外部js //@param RESOURCE_LIST 外部地址集合["address"] export function loa ...

  8. jboss加载外部的文件

    内容概述 JBoss7/WildFly设底层框架一大亮点的Module class loading,及每一个相对独立的模块看作一个Module,每个Module都有自己的class loader,Mo ...

  9. ajax如何请求json文件,简单的ajax请求加载外部json文件

    我在学习ajax ....我试图从json文件发出一个基本请求,它与我的index.html位于同一个文件夹中,但由于某种原因它说未定义:(我可以看到错误是可变的人,但我不能赶上为什么它未定义.... ...

最新文章

  1. libnids抓不到包
  2. 一个文件夹就是一个信息系统
  3. spring整合jdbc
  4. python怎么画出圆润的曲线_利用python画出AUC曲线的实例
  5. mysql sql 去除重复行_mysql – sql自连接表删除重复行
  6. Mathematics 9.0 绘制不等式确定的区域
  7. SpringMVC搭建+实例
  8. 为什么测试喜欢ie_为什么我现在喜欢测试,以及为什么您也应该如此。
  9. 神剑仙缘java_异界修真-神剑仙缘
  10. VS IED 自己开发小插件
  11. 为热门项目 若依(ruoyi) 添加请求日志输出
  12. 实用的 Python —— base64
  13. Android学习资源网站 1
  14. 利用TestDriven.net和NUnit进行单元测试(转)
  15. dicom协议开源库DCMTK安装和使用
  16. 尚学堂马士兵Oracle教程笔记
  17. 74hc595级联c语言程序,stm32使用三片74HC595级联程序代码
  18. 如果批评《说好不哭》不自由,则赞美周杰伦无意义
  19. Python彩色字符画
  20. 五大学科竞赛(四)信息学奥赛试题

热门文章

  1. ccna 服务器输入域名显示不出,思科为服务器设置域名
  2. matlab绘制平面等值线图
  3. 炫界 (667) -(回应骑两小)_安徽省桐城市迷你小南瓜春季栽培技术
  4. 发现微型计算机染有病毒后,??发现微型计算机染有病毒后,较为彻底的清除方法是(?? )...
  5. java操作跨页的word cell_Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行...
  6. 工资倒挂,IT 行业薪资潜规则如何规避?
  7. 从百度识图效果对智能识图的一些思考
  8. [javascript]替换所有带/的字符串
  9. 优化Win10——无法预览图片了
  10. 计算机制图作品答辩,教师资格证考试小学信息技术《认识画图》答辩