Spark读取配置文件的探究

在Cluster模式下进行SparkStreaming整合kafka时有个小需求,就是需要在KafkaUtils.createDirectStream 之前通过--files上传的配置文件来获取topic,之前在Executor中直接使用SparkFiles.get(文件名)就可以得到配置文件,可是现在SparkFiles.get要写在Dirver中,就会报FileNotFound的错误,这是为什么呢?
通过分别打印Executor中和Dirver中SparkFiles.get(文件名)的地址发现,二者不同,分别如下:
Dirver中:

/opt/yarn/nm/usercache/root/appcache/application_1592458319231_0006/spark-0858436a-2258-4ad2-adfa-90d882f01f78/userFiles-7cd50703-5b72-4edc-bc09-df459dec2424/test.conf

Executor中:

/opt/yarn/nm/usercache/root/appcache/application_1592458319231_0006/container_1592458319231_0002_01_000002/./test.conf

我分别到对应目录下寻找,发现Dirver打印的目录下确实不存在我们的配置文件,而Executor打印的目录中确实存在,那就说明在--files 时,文件会先被上传到 hdfs集群

启动时的日志:

INFO yarn.Client: Uploading resource file:/root/test.conf -> hdfs://node35:8020/user/root/.sparkStaging/application_1592458319231_0002/test.conf

然后最终落到Executor的目录中,那这时候问题来了,我们怎么在Dirver中获取到这个文件呢,经过几番百度谷歌后也没有得到准确的答案,灵光一现,试一下New File(文件名)可以不,结果发现在Dirver中New File(文件名)获取到的路径和在Executor中SparkFiles.get获取的路径很相似,New File路径输出如下:

/opt/yarn/nm/usercache/root/appcache/application_1592458319231_0006/container_1592458319231_0002_01_000001/test.conf

发现两个container开头的目录下都有我们的配置文件

我猜想这001结尾的文件是Dirver产生的,002结尾的目录是Executo产生的,这样就符合逻辑了。
所以应该是这样的:—files 会把文件落到dirver目录和executor目录下,NewFile在dirver中执行时当前目录就是dirver目录,在executor中执行时当前目录就是executor的目录,所以就都能获取到文件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值