長い話を短く
mountコマンドを使用してヒューズファイルシステムをマウントすると、環境変数はヒューズスクリプトに渡されません。なぜ?
コンテキスト
ヒューズを介して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コマンドを使用すると、次のようになります。
fusion_dfs:共有ライブラリの読み込み中にエラーが発生しました。 libjvm.so:共有オブジェクトファイルを開くことができません。そのファイルやディレクトリはありません。
hadoop-fuse-dfsスクリプトを表示してデバッグ出力を追加すると、このスクリプトはLD_LIBRARY_PATHが空であると見なされます。 (LD_LIBRARY_PATHを最初にエクスポートしたり、コマンドの先頭に追加したりする場合)。
システム
hdp 2.5、セントース7
質問
マウントスクリプトをハードコードLD_LIBRARY_PATHに書き換えずにマウントを介して一般的な環境変数を渡すにはどうすればよいですか?
ベストアンサー1
実際のヒューズスクリプトを呼び出すインストールヒューズヘルパーを直接作成できます。たとえば、fstabエントリの単純な場合:
dfs://ambari:8020 /mnt/hdfsfuse fuse.mydfshelper flag,flag,...
次に、/usr/bin/mydfshelper
argsを使用してスクリプトを呼び出します。
dfs://ambari:8020 /mnt/hdfsfuse -o flag,flag,...
mydfshelper
したがって、次のように1行の内容を作成するだけです。
#!/bin/bash
LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash "$@"