Home  >  Article  >  Database  >  fuse挂载hadoop2.0.0文件系统hdfs到本地

fuse挂载hadoop2.0.0文件系统hdfs到本地

WBOY
WBOYOriginal
2016-06-07 15:00:151359browse

一、环境配置 1.主机系统:RedHat Enterprise Linux 6.1 (X86_64) Hadoop版本:hadoop-2.0.0-cdh4.3.0 JDK的版本:jdk1.6.0_45 Ant的版本:apache-ant-1.8.2 Maven的版本:apache-maven-3.1.0 2.环境需求: automake,autoconf,m4,libtool,pkgconfig,f

一、环境配置

      1.主机系统:RedHat Enterprise Linux 6.1 (X86_64)

               Hadoop版本:hadoop-2.0.0-cdh4.3.0

               JDK的版本:jdk1.6.0_45

               Ant的版本:apache-ant-1.8.2

               Maven的版本:apache-maven-3.1.0

      2.环境需求:

     automake,autoconf,m4,libtool,pkgconfig,fuse,fuse-devel,fuse-libs

   3.编译工具的下载及环境变量的设置:

   (需要外部下载ant 1.8.2 ,maven 3.1.0,在apache网站下载即可)

    安装过程:

       #wget http://mirror.bjtu.edu.cn/apache//ant/binaries/apache-ant-1.8.2-bin.zip
       #export JAVA_HOME=/usr/java/jdk1.6.0_45
       #export HADOOP_HOME=/usr/hadoop/hadoop-2.0.0-cdh4.3.0
       #export OS_ARCH=amd64
       ###i386/amd64   (可选)
       #export OS_BIT=64
       ###32/64   (可选)
       #export ANT_HOME=/root/apache-ant-1.8.2

                     #export PATH=$PATH:$ANT_HOME/bin

       #export PATH=/root/apache-maven-3.1.0/bin:$PATH
   备注:由于hadoop版本不同,可能会带来很多的问题,主要是它下面的文件目录很多,而且存放文件的路径不一样,所以如果你的版本跟我不同,你需要自己找到文件的路径

      #yum -y install fuse fuse-devel fuse-libs

      #modprobe fuse (挂载:modprobe 查看:lsmod 卸载:rmmod)

      ####以上内容也可以添加到环境变量文件/etc/profile中####

 

二、编译libhdfs

1.在编译libhdfs之前可以先测试下ant ,mvn是否已经配置好:

   #ant -version

  提示如下:
  Apache Ant(TM) version 1.8.2 compiled on December 20 2010
  

   #mvn -version

  提示如下:

Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2;

2013-06-28 10:15:32+0800)
Maven home: /root/apache-maven-3.1.0
Java version: 1.6.0_45, vendor: Sun Microsystems Inc.
Java home: /usr/java/jdk1.6.0_45/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-131.0.15.el6.x86_64", arch: "amd64", family: "unix"


2、进入安装路径:/usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project

  编译libhdfs,因为libhdfs需要交叉编译,直接到src里面编译会报错,所以需要用ant编译。

  注意:OS_ARCH和OS_BIT必须设置,否则会失败。

  ant compile -Dlibhdfs=1 -Dcompile.c++=1


遇到的问题:

  (1).不能下载ivy.2.2.0.jar包,原因是build.xml 文件里设置的mvnrepo的url出错:

     
解决办法:

  (2).如果编译时出现卡顿(网络问题),可以ant clean 然后再重新编译.遇到hadoop2.0.0.配置文件中的问题:

  fuse挂载hadoop2.0.0文件系统hdfs到本地

解决办法: 

   需要定义reactor.repo的url:

  在/usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/ivy/ivysettings.xml文件中添加:

             value="http://repo1.maven.org/maven2/"
  override="false"/>

 3、编译成功后,提示如下:

........................................

compile:

BUILD SUCCESSFUL
Total time: 9 minutes 38 seconds

........................................

创建动态连接库:

       找到libhdfs.so的目录,关于libhdfs.so网上有人说是编译libhdfs后生成的,但是我编译后只生成了两个静态库( libhadooppipes.a和libhadooputils.a)。所以就直接用hadoop自带的,我这个版本hadoop-2.0.0-cdh4.3.0是在$HADOOP_HOME/lib/native这个目录下(如果没有,可以在网上下载:https://github.com/cloudera/impala/tree/master/thirdparty/hadoop-2.0.0-cdh4.3.0),然后将其目录下的库文件全部复制到$HADOOP_HOME/src/hadoop-mapreduce1-project/build/c++/Linux-amd64-64/lib再创建软连接如下

   注意:一定要按照hadoop版本去找到对应的目录,再创建链接:

     ln -s /usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/build/c++/Linux-amd64-64/lib 

    /usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/build/libhdfs

将编译好的动态库文件(.so结尾的文件)路径添加到动态连接中:           

   #export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$HADOOP_HOME/lib/:/usr/local/lib

:/usr/lib:/usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/build/c++/Linux-amd64-64/lib

三、编译fuse-dfs:

(1)编译:

   ant compile -Dlibhdfs=1 -Dfusedfs=1

   如果编译失败,比较可能的原因是找不到libhdfs,仔细查看下libhdfs的路径,请参看第一步的ln -s,若编译成功后会在fuse-dfs/src目录下生成fuse_dfs可执行程序。如图:

 fuse挂载hadoop2.0.0文件系统hdfs到本地

(2)测试:

  a.环境配置,然后编辑/etc/fuse.conf,写入以下内容
   user_allow_other
   mount_max=100

  b.编辑$HADOOP_HOME/src/hadoop-mapreduce1-project/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh

if [ "$HADOOP_HOME" = "" ]; then
export HADOOP_HOME=/usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/
fi

#******************2013/9/13**********************
export PATH=$HADOOP_HOME/src/hadoop-mapreduce1-project/src/contrib/fuse-dfs/src:$PATH
#*************************************************
if [ "$OS_ARCH" = "" ]; then
export OS_ARCH=amd64
fi

if [ "$JAVA_HOME" = "" ]; then
export  JAVA_HOME=/usr/java/jdk1.6.0_45
fi

if [ "$LD_LIBRARY_PATH" = "" ]; then
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$HADOOP_HOME/src/hadoop-mapreduce1-project/build/libhdfs/:$HADOOP_HOME/share/hadoop/hdfs/:/usr/local/lib:/usr/lib
fi

#*************** If dev build set paths accordingly*****************
if [ -d $HADOOP_HOME/src/hadoop-mapreduce1-project/build ]; then
  for f in ${HADOOP_HOME}/src/hadoop-mapreduce1-project/build/*.jar ; do
    export CLASSPATH=$CLASSPATH:$f
  done
  for f in $HADOOP_HOME/src/hadoop-mapreduce1-project/build/ivy/lib/Hadoop/common/*.jar ; do
    export CLASSPATH=$CLASSPATH:$f
  done
  export PATH=$HADOOP_HOME/src/hadoop-mapreduce1-project/src/contrib/fuse-dfs:$PATH
fi

./fuse_dfs $@


(3)fuse挂载hdfs:

$mkdir /tmp/dfs
$cd $HADOOP_HOME/build/contrib/fuse-dfs
$./fuse_dfs_wrapper.sh dfs://hadoopmaster:9000 /tmp/dfs
  说明:port=9000,server=hadoopmaster

成功提示:INFO fuse_options.c:162 Adding FUSE arg /tmp/dfs

备注:如果你有在hadoop上创建目录或上传文件,才会看到相应的目录文件

(4)卸载hdfs:

  fusermount -u /tmp/dfs 或者umount  /tmp/dfs

遇到的问题:

   (1)挂载hdfs时报错:
    ./fuse_dfs: error while loading shared libraries: libhdfs.so.0.0.0: cannot open shared object file: No such file or directory

解决办法:
    a.查看找不到的动态库:ldd fuse_dfs
    b.将找不到的库的绝对路径添加到ld查找的配置文件中:/etc/ld.so.conf
    c.运行 ldconfig 重建 /etc/ld.so.cache

 

四、测试命令

? hdfsclient写
dd if=/dev/zero bs=4096 count=%d | hadoop fs -put - %s/%s-%d.dat
? hdfsclient读
hadoop fs -get %s/f%03d.dat - > /dev/null
? fuse写
dd if=/dev/zero bs=4096 count=%d of=%s/%s-%d.dat
? fuse读
dd if=%s/f%03d.dat bs=4096 of=/dev/null

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn