在apachespark(或yarn)中使用ldu预加载

xa9qqrwz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(652)

我们正在apachehadoop上运行spark作业。我有一个特殊的需要使用“ld\u预加载技巧”对这些工作(在任何人恐慌之前,这不是为了生产运行;这是自动化作业测试的一部分)。
我知道如何随作业提交其他文件,也知道如何在节点上设置环境变量,因此将这些设置添加到 spark-defaults.conf 几乎提供了一个解决方案:

spark.files=/home/todd/pwn_connect.so
spark.yarn.appMasterEnv.LD_PRELOAD=pwn_connect.so
spark.executorEnv.LD_PRELOAD=pwn_connect.so

但是我在容器日志中发现这个错误:

ERROR: ld.so: object 'pwn_connect.so' from LD_PRELOAD cannot be preloaded: ignored.

问题似乎是ldu preload不接受我提供的相对路径。但是我不知道如何提供一个绝对路径——我不知道这些文件放在节点的本地文件系统的什么地方。

atmip9wb

atmip9wb1#

首先, spark.files 在Yarn上运行时不使用,应 spark.yarn.dist.files . 请注意,如果 --files 参数提供给 spark-submit .
对于ld\ U预加载,有两种解决方案可行:
可以使用相对路径;它们需要加前缀 ./ :

spark.yarn.dist.files=/home/todd/pwn_connect.so
spark.yarn.appMasterEnv.LD_PRELOAD=./pwn_connect.so
spark.executorEnv.LD_PRELOAD=./pwn_connect.so

(相对路径没有 ./ 在中搜索 LD_LIBRARY_PATH ,而不是当前工作目录)。
如果首选绝对路径,那么检查spark源代码会发现,包括环境变量赋值在内的整个命令行都会被shell扩展,因此表达式 $PWD 将扩展到当前工作目录:

spark.yarn.dist.files=/home/todd/pwn_connect.so
spark.yarn.appMasterEnv.LD_PRELOAD=$PWD/pwn_connect.so
spark.executorEnv.LD_PRELOAD=$PWD/pwn_connect.so

相关问题