分享

不同Linux版本下使用fuse挂载hdfs文件系统

hyj 2014-4-7 14:51:14 发表于 实操演练 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 44388
不同Linux版本下使用fuse挂载hdfs文件系统,大同小异,
需要注意的地方:
环境变量设置,需要根据自己的环境来配FUSE是什么?

已有(3)人评论

跳转到指定楼层
非鱼 发表于 2015-4-23 14:29:38
补充下:
执行的过程中遇到错误:
error while loading shared libraries: libhdfs.so.0: cannot open shared object file: No such file or directory
  或者 :
error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

解决方法有两种:
        1、编辑/etc/ld.so.conf
           在ld.so.conf中添加如下两行:
                   ${HADOOP_HOME}/c++/Linux-amd64-64/lib
                   ${JAVA_HOME}/jre/lib/amd64/server
           其中${HADOOP_HOME}和${JAVA_HOME}分别是hadoop和java的home目录,替换成绝对路径。
           执行/sbin/ldconfig -v刷新一下cache
        2、编辑.bashrc
           添加如下:
                 export LD_LIBRARY_PATH=${HADOOP_HOME}/c++/Linux-amd64-        64/lib:${JAVA_HOME}/jre/lib/amd64/server
回复

使用道具 举报

hyj 发表于 2014-4-7 14:51:15
centos下用FUSE挂载hadoop的hdfs文件系统


用户空间文件系统(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 jxvf  apache-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




Ubuntu 下面安装和配置 hadoop 的 dfs-fuse



1. 安装fuse
首先去
http://fuse.sourceforge.net/

上下载和查看如何安装fuse,我安装的fuse是2.8.5版本的,下载2.8.5版本后,使用如下三个命令安装fuse:
./configure --prefix=/usr
make
make install
安装完成后,可以使用如下命令测试fuse 是否安装成功:

mkdir /tmp/fsue
fuse/example> ./hello /tmp/fuse
cat /tmp/fuse/hello 如果显示hello world !就表示成功了。

2.  安装ant :

查看一下当前系统有没有ant ,如果没有,使用sudo apt-get install ant 即可安装

3. Hadoop 的安装和配置:

我这里使用的是hadoop 的 Pseudo-Distributed Mode ,配置如下:

<?xml version="1.0"?>

<!-- core-site.xml -->

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://localhost/</value>

</property>

</configuration>

<?xml version="1.0"?>

<!-- hdfs-site.xml -->

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

<?xml version="1.0"?>

<!-- mapred-site.xml -->

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>localhost:8021</value>

</property>

</configuration>

将hadoop 配置好,并将hadoop 启动,特别是hdfs ,以备后续测试使用。

4. 设置环境变量

我直接写在了~/.profile 中以便后续使用方便

export JAVA_HOME=java 的根目录,根据系统来设置
export HADOOP_HOME= hadoop 的根目录,根据系统来设置

export OS_ARCH=i386 ( 如果你的系统是64 位的,应该写成amd64 ,其实主要为了后面的路径设置方便而设置,在$HADOOP_HOME/c++/ 的目录下有两个子目录,一个是64 位的,一个32 位的,根据自己的系统选择使用哪个目录而已, 也有java 的相关目录)
export OS_BIT=32                    // 如果系统是64 位的,这里应该写64
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:${HADOOP_HOME}/build/c++/Linux-$OS_ARCH-$OS_BIT/lib:/usr/local/lib:/usr/lib

5. libhdfs 的制作:

cd $HADOOP_HOME/
ant compile-c++-libhdfs -Dlibhdfs=1 -Dcompile.c++=1

ln -s c++/Linux-$OS_ARCH-$OS_BIT/lib build/libhdfs

6. fuse-dfs

cd $HADOOP_HOME

ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1

如果报错,请查看相关软件是否安装上,我这里报错是automake 没有安装,用apt-get 安装一下就没问题了

7.fuse 配置

将如下内容放在$HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh 脚本的最上边

export JAVA_HOME=java 的根目录,根据系统来设置
export HADOOP_HOME= hadoop 的根目录,根据系统来设置

export OS_ARCH=i386 // 如果系统是64 位的,这里应该写amd64

export OS_BIT=32                    // 如果系统是64 位的,这里应该写64
同时授予$HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh 可执行权限chmod +x $HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh

8. 测试

mkdir /tmp/dfs ( 用来将hdfs 的目录映射到/tmp/dfs 上,对/tmp/dfs/ 下面进行的文件操作,比如mkdir ,touch 等命令会直接反映到hdfs 上)

$HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh dfs://localhost:8020 /tmp/dfs

测试一下ls –l /tmp/dfs 看看下面显示hdfs 下的目录,如果touch 一个文件到/tmp/dfs 将会在hdfs 里面显示出来。


回复

使用道具 举报

綾夜 发表于 2014-8-16 22:23:28
hyj 发表于 2014-4-7 14:51
centos下用FUSE挂载hadoop的hdfs文件系统

用户空间文件系统(Filesystem in Userspace,FUSE)允许一些文 ...

我是使用ubuntu系統
需要的軟件均已安裝
不過在做到第六步時出現編譯錯誤
以下是從第五步開始的編譯過程的附檔
http://pan.baidu.com/s/1eQAF3ea
還請不吝指教

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条