在做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

转载于:https://www.cnblogs.com/itboys/p/11109065.html

spark-submit --files 动态加载外部资源文件相关推荐

  1. Spark动态加载外部资源文件

    Spark动态加载外部资源文件 1.spark-submit --files 动态加载外部资源文件 之前做一个关于Spark的项目时,因项目中需要读取某个静态资源文件,然后在本地IDEA测试一切皆正常 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. jboss加载外部的文件

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

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

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

最新文章

  1. 14.索引数组初始化
  2. 百度地图 key_Android百度地图导航的接入(包含驾车、公交、步行)
  3. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(一)
  4. ubyntu 链接mysql_ubuntu mysql远程连接
  5. oracle删除排序数据库,数据库的数据操作:增删改查和排序
  6. 「雕爷学编程」Arduino动手做(33)——ESP-01S无线WIFI模块
  7. RTTI机制(运行时类型识别)
  8. How to use the Feathers ScreenNavigator component
  9. 思科常用配置实例的常用操作项
  10. 常见反爬虫策略与绕过方法
  11. 超大图片的缩放算法(撑爆内存的那种)
  12. 程序员如何提升自己的能力
  13. DQN的e-greedy策略理解
  14. 跨平台移动开发工具:PhoneGap与Titanium全方位比拼
  15. 苏嵌//张福辉//2018.7.27
  16. win10 64位搭建汇编环境debug
  17. 一个简单的C语言程序是怎么来的呢?
  18. C语言杨辉三角和“日本某地谋杀案”习题讲解
  19. 如何使用github(萌新向)
  20. 2013年全国硕士研究生入学统一考试英语(一)和(二)考试大纲新增的60个词汇详解

热门文章

  1. 目录树结构改变后刷新目录树
  2. JS得到对应字段 的值。遍历
  3. 关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序
  4. 如何使用React提前三天计划
  5. Python控制结构总结
  6. 量子计算机 漫画,漫画 | 10分钟看懂量子比特、量子计算和量子算法
  7. linux qml 环境,利用Qml与Golang打造Gui客户端(二)qamel环境安装
  8. UI设计师培训入门都需要学习什么技术?
  9. value_counts()
  10. 浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)