hb_sz 发表于 2018-11-1 07:45:35

用FUSE挂载hadoop的hdfs文件系统

  使用fuse挂载hdfs文件系统
  本文参照了很多其他人的blog和文档,首先表示感谢!
  用户空间文件系统(Filesystem in Userspace,FUSE)允许一些文件系统整合为一个Unix文件系统在用户空间中执行。通过使用Hadoop的Fuse-DFS分类模块,任意一个Hadoop文件系统(不过一般为HDFS)都可以作为一个标准文件系统进行挂载。我们随后便可以使用Unix的工具(如ls和cat)与这个文件系统交互,还可以通过任意一种编程语言使用POSIX库来访问文件系统。
  Fuse-DFS是用C语言实现的,使用libhdfs作为与HDFS的接口。要想了解如何编译和运行Fuse-DFS,可参见src/contrib./fuse-dfs中的Hadoop分布目录。
  环境:
  centos5.5
  hadoop-0.20.2
  gcc自带
  Jdk:1.6.0.21
  fuse-2.8.4.tar.gz
  Automake
  Autoconf
  m4
  Libtool
  apache-ant-1.8.4-bin.tar.bz2
  软件包下载:
  Ant下载地址http://mirror.bjtu.edu.cn/apache//ant/binaries/
  Fuse下载地址sourceforge.net/projects/fuse/files/fuse-2.X/2.8.4/fuse-2.8.4.tar.gz/download
  安装:(如果安装过程报错提示某某command no found 请注意PATH,并且用rpm-qa | grep CMD (这个工具)查看是否缺少某些工具,我在安装过程中少automake,果断yum装上,你懂得!!)
  1、ant安装
  Tar jxvfapache-ant-1.8.4-bin.tar.bz2
  Mv apache-ant-1.8.4 /usr/local/ant
  2、fuse安装
  # tar zxvf fuse-2.8.4.tar.gz
  # cd /usr/local/fuse-2.8.4/
  # ./configure
  # make
  # make install
  # modprobe fuse
  3、环境变量设置(请结合自己的实际情况设置如下项目)
  Vi /etc/profile
  export OS_ARCH=i386
  ##i386/amd64
  export OS_BIT=32
  ##32/64
  export JAVA_HOME=/usr/java/jdk1.6.0_21
  ANT_HOME=/usr/local/ant
  export HADOOP_HOME=/home/hadoop/hadoop-append/hadoop-0.20.2
  export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:${HADOOP_HOME}/c++/Linux-$OS_ARCH-$OS_BIT/lib:/usr/local/lib:/usr/lib:
  PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH:$MAVEN_HOME/bin:$IVY_HOME:$ERLANG_HOME
  保存退出
  Source !$
  编译libhdfs
  Cd $HADOOP_HOME
  /usr/local/ant/bin/ant compile-c++-libhdfs -Dlibhdfs=1 -Dcompile.c++=1
  ln -s c++/Linux-$OS_ARCH-$OS_BIT/lib build/libhdfs
  /usr/local/ant/bin/ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1
  vi /home/hadoop/hadoop-append/hadoop-0.20.2/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh
  if [ "$HADOOP_HOME" = "" ]; then
  export HADOOP_HOME=/home/hadoop/hadoop-append/hadoop-0.20.2
  fi
  export PATH=$HADOOP_HOME/build/contrib/fuse_dfs:$PATH
  for f in ls $HADOOP_HOME/lib/*.jar $HADOOP_HOME/*.jar ; do
  export    CLASSPATH=$CLASSPATH:$f
  done
  if [ "$OS_ARCH" = "" ]; then
  export OS_ARCH=i386
  fi
  if [ "$JAVA_HOME" = "" ]; then
  export    JAVA_HOME=/usr/java/jdk1.6.0_21
  fi
  if [ "$LD_LIBRARY_PATH" = "" ]; then
  export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:/usr/local/share/hdfs/libhdfs/:/usr/local/lib
  fi
  ./fuse_dfs $@
  保存退出
  挂载hdfs
  $chmod +x /data/soft/hadoop-2.20.1/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh
  $chmod +x /data/soft/hadoop-2.20.1/build/contrib/fuse-dfs/fuse_dfs
  $ln -s /data/soft/hadoop-2.20.1/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh /usr/local/bin
  $ln -s /data/soft/hadoop-2.20.1/build/contrib/fuse-dfs/fuse_dfs /usr/local/bin/
  $mkdir /tmp/dfs
  $cd $HADOOP_HOME/build/contrib/fuse-dfs
  $./fuse_dfs_wrapper.sh dfs://192.168.64.99:9000 /tmp/dfs
  卸载hdfs
  Umount /tmp/dfs
  开机自动挂载hdfs文件系统
  vi /etc/fstab
  fuse_dfs_wrapper.sh dfs:192.168.64.99:9000 /tmp/dfs    fuse rw,auto 0 0

页: [1]
查看完整版本: 用FUSE挂载hadoop的hdfs文件系统