티스토리 뷰

  • Hadoop은 기본적으로 POSIX API를 지원하지 않기 때문에 리눅스 파일시스템에 마운트가 안되고 자체적인 API를 사용해야 한다. 하지만 FUSE라는 라이브러리를 이용해서 억지로 마운트할 순 있다.
  • 1.0.0 버전에서는 하둡에서 자체적으로 제공하는 FUSE 유틸이 컴파일되서 제공되지 않고, 컴파일 옵션 같은 것들이 예전 버전에서 업데이트되지 않은 상태라 여러가지 삽질이 필요하다.
  • 나중에 정식 버전이 나오면 해결 되겠지만 현재 버전에서 마운트 하기 위해서는 아래와 같은 더러운 방법이 필요하다 ㅠㅠ
     
  • 필요한 것들
    • JDK 1.5 버전
    • Apache Forrest 0.8
    • Autotmake
    • libtool
    • FUSE
    • Ant
       
  •  JDK 1.5 설치
  •  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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함