【问题标题】:Using LD_PRELOAD with Apache Spark (or YARN)将 LD_PRELOAD 与 Apache Spark(或 YARN)一起使用
【发布时间】:2017-11-09 13:28:34
【问题描述】:

我们正在 Apache Hadoop YARN 上运行 Spark 作业。我特别需要在这些工作上使用“LD_PRELOAD 技巧”。 (在任何人恐慌之前,它不是用于生产运行;这是自动化作业测试的一部分)。

我知道如何在作业中提交附加文件,并且我知道如何在节点上设置环境变量,因此将这些设置添加到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.

问题似乎是 LD_PRELOAD 不接受我提供的相对路径。但我不知道如何提供绝对路径——我不知道这些文件被放置在节点的本地文件系统的哪个位置。

【问题讨论】:

    标签: hadoop apache-spark hadoop-yarn ld-preload


    【解决方案1】:

    首先,spark.files在YARN上运行时不使用,应该是spark.yarn.dist.files。请注意,如果将 --files 参数提供给 spark-submit,这将被覆盖。

    对于 LD_PRELOAD,有两种可行的解决方案:

    1. 可以使用相对路径;它们需要以./为前缀:

      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中搜索,而不是当前工作目录)。

    2. 如果首选绝对路径,检查Spark source code 会发现包括环境变量分配在内的整个命令行都受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
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2022-07-01
      • 2016-03-22
      相关资源
      最近更新 更多