긴 이야기 짧게

긴 이야기 짧게

긴 이야기 짧게

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따라서 다음과 같이 한 줄의 내용만 작성하면 됩니다 .

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

답변2

내 특정 문제(LD_LIBRARY_PATH)를 해결하기 위한 가장 쉬운 방법은 /etc/ld.so.conf.d 아래의 파일에 변수 내용을 추가하는 것임을 알았습니다. 예를 들어 다음 내용으로 /etc/ld.so.conf.d/hdp.conf를 만들었습니다.

/usr/java/jdk1.8.0_66/jre/lib/amd64/server
/usr/hdp/2.5.0.0-1245/usr/lib

루트로 한 번 실행한 후에는 ldconfig이 새로운 "ld_library_path"를 시스템 전체에서 사용할 수 있습니다.

일반적인 환경 변수에 대한 질문에 대답하려면,@meuh의 답변그게 제일이야.

관련 정보