티스토리 뷰
- Hadoop은 기본적으로 POSIX API를 지원하지 않기 때문에 리눅스 파일시스템에 마운트가 안되고 자체적인 API를 사용해야 한다. 하지만 FUSE라는 라이브러리를 이용해서 억지로 마운트할 순 있다.
- 1.0.0 버전에서는 하둡에서 자체적으로 제공하는 FUSE 유틸이 컴파일되서 제공되지 않고, 컴파일 옵션 같은 것들이 예전 버전에서 업데이트되지 않은 상태라 여러가지 삽질이 필요하다.
- 나중에 정식 버전이 나오면 해결 되겠지만 현재 버전에서 마운트 하기 위해서는 아래와 같은 더러운 방법이 필요하다 ㅠㅠ
- 필요한 것들
- JDK 1.5 버전
- Apache Forrest 0.8
- Autotmake
- libtool
- FUSE
- Ant
- JDK 1.5 설치
- http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html
- 위 링크에서 1.5버전에서 bin 확장자의 JDK를 받는다.
- $ sudo chmod a+x jdk-1_5_0_22-linux-i586.bin 로 실행 권한을 설정 후
- $ ./jdk-1_5_0_22-linux-i586.bin 실행
- $ sudo cp -r jdk1.5.0_22/ /usr/lib/jvm/
- $ sudo rm -r ../jdk1.5.0_22
- Apache Forrest 0.8
- http://archive.apache.org/dist/forrest/0.8/apache-forrest-0.8.tar.gz
- 받고 적당한 폴더에 압축을 푼다.( 압축 푼 경로를 기억해 두자 )
- 여기 예제는 /home/사용자아이디/apache-forrest-0.8 에 저장
- Autotmake
- $ sudo apt-get install automake
- libtool
- $ sudo apt-get install libtool
- FUSE
- http://sourceforge.net/projects/fuse/files/fuse-2.X/
- 위 링크에서 최신버전을 받는다.
- 받고 적당한 폴더에 압축을 풀고, 압축 푼 폴더에 들어간다.
- $ chmod a+x configure 를 실행
- $ ./configure
- $ make
- $ sudo make install
- $ modprobe fuse
- /usr/local/lib 에 설치되고, /usr/local/include 에 header 파일이 설치됨
- Ant
- $ sudo apt-get install ant
- 하둡 컴파일
- hadoop-1.0.0.tar.gz 를 적당한 곳에 압축을 푼다.( 여기서는 /home/wlrudals-main 에 푼 것으로 함 )
- ( 지금 실행 환경에서 컴파일 하기 위한 파일들은 /home/wlrudals-main 에 있고,
- 실제 하둡을 돌리기 위한 파일들은 /usr 에 설치되어 있다. )
- JAVA_HOME, HADOOP_HOME, FUSE_HOME 환경변수가 정확히 설정되어 있지 않다면 설정해야 한다.
- 나는 아래와 같은 폴더에 각각의 패키지를 설치했고 그 경로로 설정했다.
- export JAVA_HOME=/usr/lib/jvm/java-6-sun
- export HADOOP_HOME=/usr
- export FUSE_HOME=/usr/local
- /home/wlrudals-main/hadoop-1.0.0/src/c++/task-controller 에서 configure.ac파일을 열어서 AC_SYS_LARGEFILE 앞에 #을 붙여주자
- /home/wlrudals-main/hadoop-1.0.0 에서 아래 명령어 실행
- $ ant package -Djava5.home=/usr/lib/jvm/jdk1.5.0_22 -Dforrest.home=/home/wlrudals-main/apache-forrest-0.8
- /home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib/libhdfs.so
- /home/wlrudals-main/hadoop -1.0.0/c++ 디렉토리를 /home/wlrudals-main/hadoop -1.0.0/build 디렉토리로 복사한다
- /home/wlrudals-main/hadoop-1.0.0 에서 $ ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1 실행
- 하다보면 아래와 같은 구문이 나오며 에러가 나올 것이다
gcc -Wall -O3 -L/home/wlrudals-main/hadoop-1.0.0/build/libhdfs -lhdfs -L/usr/local/lib -lfuse -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server -ljvm -o fuse_dfs fuse_dfs.o fuse_options.o fuse_trash.o fuse_stat_struct.o fuse_users.o fuse_init.o fuse_connect.o fuse_impls_access.o fuse_impls_chmod.o fuse_impls_chown.o fuse_impls_create.o fuse_impls_flush.o fuse_impls_getattr.o fuse_impls_mkdir.o fuse_impls_mknod.o fuse_impls_open.o fuse_impls_read.o fuse_impls_release.o fuse_impls_readdir.o fuse_impls_rename.o fuse_impls_rmdir.o fuse_impls_statfs.o fuse_impls_symlink.o fuse_impls_truncate.o fuse_impls_utimens.o fuse_impls_unlink.o fuse_impls_write.o - 터미널을 src/contrib/fuse-dfs/src 디렉토리로 이동하고 위에서 처음 -L 부분을 아래와 같이 수정 후 뒤쪽으로 이동시켜서 실행시킨다
- -L/home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib -lhdfs -L/usr/local/lib -lfuse -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server -ljvm
- $ gcc -Wall -O3 -o fuse_dfs fuse_dfs.o fuse_options.o fuse_trash.o fuse_stat_struct.o fuse_users.o fuse_init.o fuse_connect.o fuse_impls_access.o fuse_impls_chmod.o fuse_impls_chown.o fuse_impls_create.o fuse_impls_flush.o fuse_impls_getattr.o fuse_impls_mkdir.o fuse_impls_mknod.o fuse_impls_open.o fuse_impls_read.o fuse_impls_release.o fuse_impls_readdir.o fuse_impls_rename.o fuse_impls_rmdir.o fuse_impls_statfs.o fuse_impls_symlink.o fuse_impls_truncate.o fuse_impls_utimens.o fuse_impls_unlink.o fuse_impls_write.o -L/home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib -lhdfs -L/usr/local/lib -lfuse -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server -ljvm
- 다시 $ ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1 실행한다
- /hadoop-1.0.0/build/contrib/fuse-dfs 경로로 가면 컴파일 된 fuse_dfs 와 fuse_dfs_wrapper.sh 가 있으면 성공이다!
- 마운팅
- $ sudo gedit /etc/fuse.conf 를 열어서 #user_allow_other 부분에서 앞의 #을 빼준다
- 마운팅 할 경로를 미리 만들어 준다. /home/wlrudals-main/export/hdfs
- $ chmod a+x fuse_dfs_wrapper.sh 로 실행 권한을 준다
- 여기서 fuse_dfs_wrapper.sh 는 fuse_dfs를 실행하기 전에 환경변수들을 세팅하는 역할을 하는데 1.0.0버전의 디렉토리 구조가 적용되어 있지 않다. 이 쉘 파일을 텍스트 편집기로 열어 아래 주석을 참고해 작성한다.
- export OS_ARCH=i386
- #보통의 경우 이렇게 세팅하면 됨
- export PATH=/home/wlrudals-main/hadoop-1.0.0/bin/contrib/build/fuse_dfs:$PATH
- 위와 같이 fuse_dfs 파일의 경로를 추가해 주면 이 쉘파일을 어디에 옮겨도 실행 가능하다.
- for f in ls /usr/lib/*.jar /usr/*.jar ; do
export CLASSPATH=$CLASSPATH:$f
done - [하둡이 설치된 경로]/lib 에 jar 파일들이 있는데 그것을 클래스패스로 추가하기위한 부분이다.
나는 /usr 경로에 하둡을 설치했으므로 위와 같이 했고, 만약 ~/hadoopXX 에 설치했다면
for f in ls ~/hadoopXX/lib/*.jar ~/hadoopXX/*.jar ; do 로 바꿔주면 된다. - export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:/home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib:/usr/local/lib:$JAVA_HOME/jre/lib/i386
- $JAVA_HOME/jre/lib/$OS_ARCH/server : 자바의 공용 라이브러리를 추가하기 위한 부분이다.
- /home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib : 하둡에서 libhdfs.soXX 파일들을 추가하기 위한 부분이다.
- $JAVA_HOME/jre/lib/i386 : 자바 공용 라이브러리를 추가하기 위한 부분이다.
- ./fuse_dfs $@
- 전체 소스는 아래와 같다.
export OS_ARCH=i386
export PATH=/home/wlrudals-main/hadoop-1.0.0/bin/contrib/build/fuse_dfs:$PATH
for f in ls /usr/lib/*.jar /usr/*.jar ; do
export CLASSPATH=$CLASSPATH:$f
done
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:/home/wlrudals-main/hadoop-1.0.0/build/c++/Linux-i386-32/lib:/usr/local/lib:$JAVA_HOME/jre/lib/i386
./fuse_dfs $@
- 하둡 데몬을 실행 한 후에 아래 명령어를 실행하면 마운트가 된다.
- $ sudo ./fuse_dfs_wrapper.sh dfs://localhost:9000 /home/wlrudals-main/export/hdfs -ㅇ
- -d 명령어는 오류 내용이 콘솔로 출력되는 것인데 출력되는 내용을 잘 보면 어느 기능을 사용할 수 없는지 알 수 있다.
빨리 하둡이 버전업이 되었으면 좋겠다.. ㅠㅠ
'[Cloud] > [Hadoop]' 카테고리의 다른 글
Hadoop 1.0.0 Single Node Mode로 Ubuntu에 설치 (0) | 2012.02.08 |
---|