热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

一、环境配置1.主机系统:RedHatEnterpriseLinux6.1(X86_64)Hadoop版本:hadoop-2.0.0-cdh4.3.0JDK的版本:jdk1.6.0_45Ant的版本:apache-ant-1.8.2Maven的版本:apache-maven-3.1.02.环境需求: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,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.配置文件中的问题:

解决办法:

需要定义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可执行程序。如图:

(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

推荐阅读
author-avatar
朗月清风的海角
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有