视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
fuse挂载hadoop2.0.0文件系统hdfs到本地
2020-11-09 16:00:03 责编:小采
文档


一、环境配置 1.主机系统:RedHat Enterprise Linux 6.1 (X86_) 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_)

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=amd
###i386/amd (可选)
#export OS_BIT=
###32/ (可选)
#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 (3ca28a1da9d5f51ac03827af98bb730128f9f2;

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_", arch: "amd", 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.配置文件中的问题:

解决办法:

需要定义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-amd-/lib再创建软连接如下

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

ln -s /usr/hadoop/hadoop-2.0.0-cdh4.3.0/src/hadoop-mapreduce1-project/build/c++/Linux-amd-/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/amd:$HADOOP_HOME/lib/:/usr/local/lib

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

三、编译fuse-dfs:

(1)编译:

ant compile -Dlibhdfs=1 -Dfusedfs=1

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

(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=amd
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/amd:$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

下载本文
显示全文
专题