使用mount命令时LD_LIBRARY_PATH丢失

Modified on: Fri, 29 Jun 2018 05:36:00 +0800

TL; DR

通过mount命令安装熔丝文件系统时,环境变量不会传递给熔丝脚本。为什么呢?

上下文

我正在尝试通过fuse挂载hdfs(hadoop文件系统)。

在命令行上这很容易:

# Short example version:
LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash  dfs://ambari:8020 /mnt/hdfsfuse
# Actual version with full path for completeness
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/hadoop/yarn/local/filecache/11/mapreduce.tar.gz/hadoop/lib/native /usr/hdp/2.5.0.0-1245/hadoop/bin/hadoop-fuse-dfs -onotrash  dfs://ambari:8020 /mnt/hdfsfuse

这一切都很好,但是如果我将FS的定义放在/ etc / fstab中然后使用mount命令,我最终得到:

  

fuse_dfs:加载共享库时出错:libjvm.so:无法打开
  共享对象文件:没有这样的文件或目录

查看hadoop-fuse-dfs脚本并添加调试输出,我看到LD_LIBRARY_PATH在此脚本中被视为空(如果我首先导出LD_LIBRARY_PATH或者在命令开头添加它,这都是正确的)

系统

hdp 2.5,centos 7

问题

如果没有重写mount脚本来硬编码LD_LIBRARY_PATH,我怎么能通常通过mount传递环境变量?

作者:Guillaume

最佳答案

您可以编写自己的安装保险丝助手,然后调用真正的保险丝脚本。在fstab条目的简单情况下,如:

dfs://ambari:8020  /mnt/hdfsfuse  fuse.mydfshelper  flag,flag,...

然后使用args调用脚本/usr/bin/mydfshelper

dfs://ambari:8020 /mnt/hdfsfuse -o flag,flag,...

所以你只需要编写一行mydfshelper,其中包含:

#!/bin/bash LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash "$@"

作者:meuh

相关问答

添加新评论