Spark动态加载外部资源文件
Spark动态加载外部资源文件
之前做一个关于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[*]}
do
file_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动态加载外部资源文件的更多相关文章
- spark-submit --files 动态加载外部资源文件
在做spark时,有些时候需要加载资源文件,需要在driver或者worker端访问.在client模式下可以使用IO流直接读取,但是在cluster模式下却不能直接读取,需要如下代码: val is ...
- 使用js加载器动态加载外部Javascript文件
原文:http://www.cnblogs.com/xdp-gacl/p/3927417.html 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var ...
- Unity3D动态加载外部资源
最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...
- 不停服务,动态加载properties资源文件
系统运行过程中,我们用注解@Value("${****}")可以获取资源文件中的内 容,获取的内容会被存储在spring缓存中,因此如果我们修改了资源文件,要 想读取到修改后的内容 ...
- JavaScript学习总结(十九)——使用js加载器动态加载外部Javascript文件
今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js 1 var MiniSite=new Object(); 2 /** 3 * 判断浏览器 4 */ 5 M ...
- Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】
接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...
- 使用js加载器动态加载外部js、css文件
let MiniSite = new Object(); /** * 判断浏览器 */ MiniSite.Browser = { ie: /msie/.test(window.navigator.us ...
- 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式
Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...
- JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主 ...
随机推荐
- Stata极简生存分析
1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是&quo ...
- Docker安装系列教程
首先准备一台Centos7版本的虚拟机,它支持docker容器技术.本案例使用centos7虚拟机安装docker容器. 一.安装 1.启动虚拟机,配置虚拟机能够访问互联网 2. 安装支持软件包,提供 ...
- Hadoop集群模式安装出现的若干问题
一.域名解析问题 域名解析暂时失败问题 vim /etc/sysconfig/network 查看主机名 vim etc/hosts 配置IP地址与主机名 192.168.60.132 centos ...
- element-ui使用后手记
一.路由模式el-menu中使用路由模式 在el-meun中设置:router="true" 在el-menu-item中设置index="路由地址"
- slice,splice,split,unshift的用法
工作了很久始终对这4个用法处于混淆状态,今天写个帖子来警示下自己 // slice(start,end),从start值开始截取到end前的元素组成新的数组,不改变原数组 // slice(index ...
- 如何将项目推到github上面
1.先查看是否安装git. 2.如果没有安装git ,下载之后别忘了配置环境变量.(右击此电脑 --属性--高级系统设置--环境变量--系统变量中的path) 3.推代码 查看状态(可查可不查) gi ...
- Label_img&a
绝对路径 相对路径 从根目录开始写 从引用的文件所在目录开始写 也可以作为链接提示 target = _blank 新窗口打开 = _self 默认值 本窗口打开 = _new 新窗口打开 = _pa ...
- Jetbrains系列产品重置试用方法
0x0. 项目背景 Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费.但很多时候会出现一种情况:IDE并不能按照我们实际的试用 ...
- Both Dolby Atmos driver and API need to be installed问题的一个解决方法
问题的原因在于缺少以下两个部分: Dolby Atmos driver:指你的声卡驱动中自带的杜比文件 如果驱动里没有,说明你的硬件可能不支持杜比,或者驱动太老没有包含杜比. Dolby Atmos ...
- 【JDBC核心】获取数据库连接
获取数据库连接 要素一:Driver 接口实现类 Driver 接口: java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口.这个接口是提供给数据库厂商使用的,不同数据库厂商提 ...