리눅스 Linux

[Linux/Ubuntu] Fuse를 이용하여 HDFS를 Linux에 Mount하기

sseozytank 2024. 3. 29.

Linux FUSE = Filesystem in Userspace

  • 컴퓨터 파일 시스템을 개발할 때 사용되는 프레임워크로 
  • Fuse 사용 시 hdfs 셸 명령을 쓰지 않고 로컬 파일처럼 hdfs를 사용할 수 있음 

 

1.Fuse 관련 패키지 설치 

#fuse 관련 패키지 설치
sudo apt-get install fuse libfuse-dev

 

#깃에서 클론해오기
git clone --depth 1 --branch branch-3.1 https://github.com/apache/hadoop.git

나는 hadoop을 설치해둔 hadoop 폴더가 이미 있어서 뒤에 hadoop_dev를 추가해서 hadoop_dev라는 폴더로 설치해줬다. 

#깃에서 클론해오기
git clone --depth 1 --branch branch-3.1 https://github.com/apache/hadoop.git hadoop_dev

무사히 생성된 것 확인

 

2.빌드 

다운 받은 경로로 들어가서, 빌드를 실행시켜준다.

cd hadoop_dev
./start-build-env.sh #Permission Denied 시 sudo ./start-build-env.sh

빌드 완료 화면

 

자세히 보면,  경로가 ~/hadoop으로 바껴져 있다. Hadoop 개발자 빌드 환경 내에 남게 된 것. 이제 실행 파일을 빌드시켜주자. 아래 코드를 입력해준다. 

mvn package -Pnative -Drequire.fuse=true -DskipTests -Dmaven.javadoc.skip=true

 

오우 에러가 미친듯이 난다. 이럴 땐 아래 코드를 실행해서 권한을 변경해 준 뒤 다시 위에 코드를 실행시켜준다. 

sudo chown -R [유저이름]:[유저이름] /home/[유저이름] 
#sudo chown -R tank:tank /home/tank

예쁘게 실행되고 있다!

 

실행 시킬 때 시간이 좀 걸리니 참고하도록 하장. 잘 되다가 마지막 부분에 오류뜨는데, fuse_dfs만 잘 만들어지면 문제 없이 사용 가능하다. exit으로 개발자 빌드 환경에서 탈출한 뒤 이후 아래 코드로 빌드된 바이너리를 복사해준다. 

exit
sudo cp ~/hadoop_dev/hadoop-hdfs-project/hadoop-hdfs-native-client/target/main/native/fuse-dfs/fuse-dfs ~/hadoop/bin/

 

 

이 후, ~/hadoop/bin 경로로 들어가서 

라이브러리 설정을 포함하는 sh 파일을 생성해준다. 

cd ~/hadoop/bin
vi fuse_dfs_wrapper.sh
#!/bin/bash
# naive fuse_dfs wrapper
 
# define HADOOP_HOME & JAVA_HOME
export HADOOP_HOME=/home/[사용자명]/hadoop
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
 
# define CLASSPATH
while IFS= read -r -d '' file
do
            export CLASSPATH=${CLASSPATH}:${file}
    done < <(find ${HADOOP_HOME}/share/hadoop/{common,hdfs} -name "*.jar" -print0)
 
    # define LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=${HADOOP_HOME}/lib/native/:${JAVA_HOME}/lib/server/
 
    # run fuse_dfs
    fuse_dfs "$@"

 

HADOOP_HOME은 본인에 맞게 설정 필요

 

저장하고 나온 뒤, 권한 부여 

chmod +x fuse_dfs_wrapper.sh

 

3.마운트

이제 셋팅이 끝났다. 마운트를 적용할 폴더를 만들고 마운트를 진행해보자. 

mkdir ~/hadoop/workspace
mkdir ~/hadoop/workspace/mount_data
fuse_dfs_wrapper.sh dfs://localhost:9000 ~/hadoop/workspace/mount_data -oinitchecks 
#도메인은 본인에 맞게 바꿔주자

마운트가 완료된 것을 볼 수 있다.

 

df -h

 

입력해보면 fuse_dfs가 무사히 추가된 것 까지 확인 완료 ! 마운트 취소는 아래와 같이 하면 된다. 

fusermount -u ~/hadoop/workspace/mount_data

#안되는 경우 강제로 
fusermount -uz ~/hadoop/workspace/mount_data

 

이제 마운트가 완료되었으니, ~/hadoop/workspace/mount_data의 데이터를 hdfs명령어 없이도 리눅스 일반 폴더 핸들링하듯이 사용하면 된다. 끝! 

 

적고나니 엄청 단순한데 오류에 오류를 너무 많이 만나서 정말 힘겨웠다...ㅠㅠㅠ.... 그래도 이제 하나하나 직접 구축하면서 작업하니 하둡 시스템에 대한 전반적인 이해가 되기 시작한다.  남은 내용도 파이팅! 

 

 

 

 

참고 문서 

https://sleeplessbeastie.eu/2021/09/13/how-to-mount-hdfs-as-a-local-file-system/

https://guide.ncloud-docs.com/docs/server-ts-fstab-vpc

댓글