我们正在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不接受我提供的相对路径。但是我不知道如何提供一个绝对路径——我不知道这些文件放在节点的本地文件系统的什么地方。
1条答案
按热度按时间atmip9wb1#
首先,
spark.files
在Yarn上运行时不使用,应spark.yarn.dist.files
. 请注意,如果--files
参数提供给spark-submit
.对于ld\ U预加载,有两种解决方案可行:
可以使用相对路径;它们需要加前缀
./
:(相对路径没有
./
在中搜索LD_LIBRARY_PATH
,而不是当前工作目录)。如果首选绝对路径,那么检查spark源代码会发现,包括环境变量赋值在内的整个命令行都会被shell扩展,因此表达式
$PWD
将扩展到当前工作目录: