長い話を短く

長い話を短く

長い話を短く

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/mydfshelperargsを使用してスクリプトを呼び出します。

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

mydfshelperしたがって、次のように1行の内容を作成するだけです。

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

おすすめ記事