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

使用fuse挂载hdfs文件系统

    本文参照了很多其他人的blog和文档,首先表示感谢!

(Filesystem in UserspaceFUSE)允许一些文件系统整合为一个Unix文件系统在用户空间中执行。通过使用HadoopFuse-DFS分类模块,任意一个Hadoop文件系统(不过一般为HDFS)都可以作为一个标准文件系统进行挂载。我们随后便可以使用Unix的工具(lscat)与这个文件系统交互,还可以通过任意一种编程语言使用POSIX库来访问文件系统。

Fuse-DFS是用C语言实现的,使用libhdfs作为与HDFS的接口。要想了解如何编译和运行Fuse-DFS,可参见src/contrib./fuse-dfs中的Hadoop分布目录。

 

环境:

centos5.5

hadoop-0.20.2

gcc自带

Jdk1.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装上,你懂得!!)

1ant安装

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文件系统

var kevent = 'onabort|onblur|onchange|onclick|ondblclick|onerror|onfocus|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onresize|onselect|onsubmit|onunload'; var aevent = kevent.split('|'); jQuery('.showContent img').each(function(){ var nimg = this; jQuery.each(aevent, function(i, n){ if (n!='onload') { jQuery(nimg).attr(n, ''); } else { if (jQuery(nimg).attr(n) != 'if(this.width>650) this.width=650;') { jQuery(nimg).attr(n, ''); } } }); });

使用FUSE-DFS mount HDFS

介绍

Hadooop源码中自带了contrib/fuse-dfs模块,用于实现通过libhdfs和fuse将HDFS mount到*inux的本地。

编译

环境

  1. Linux: 2.6.18-164.el5 x86_64
  2. JDK: 1.6.0_23 64bit
  3. Hadoop: 0.19.1 下面假设源码目录为$HADOOP_SRC_HOME
  4. Ant: 1.8.4
  5. GCC: 4.1.2(系统默认)

编译libhdfs

修改configure执行权限
$chmod +x $HADOOP_SRC_HOME/src/c++/pipes/configure
$chmod +x $HADOOP_SRC_HOME/src/c++/utils/configure
修改Makefile,调整编译模式

64位机中,需要修改libhdfs的Makefile,将GCC编译的输出模式由32(-m32)位改为64(-m64)位

CC = gcc
LD = gcc
CFLAGS =  -g -Wall -O2 -fPIC
LDFLAGS = -L$(JAVA_HOME)/jre/lib/$(OS_ARCH)/server -ljvm -shared -m64(这里) -Wl,-x
PLATFORM = $(shell echo $$OS_NAME | tr [A-Z] [a-z])
CPPFLAGS = -m64(还有这里) -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(PLATFORM)
编译

在$HADOOP_HOME目录下执行

$ ant compile -Dcompile.c++=true -Dlibhdfs=true

编译结果将生成libhdfs库,位于$HADOOP_SRC_HOME/build/libhdfs目录下

编译fuse-dfs

安装fuse库

fuse-dfs依赖fuse库,可通过

sudo lsmod|grep fuse

检查是否已经安装,如没有,可通过:

yum -y install fuse fuse-devel fuse-libs

安装相关依赖库。

设置编译库路径

设置编译库路径,将libhdfs的库加入到编译路径中

export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$HADOOP_SRC_HOME/build/c++/Linux-amd64-64/lib:$JAVA_HOME/jre/lib/amd64/server
编译

编译contrib/fuse-dfs模块:

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

编译完成将会生成$HADOOP_HOME/build/contrib/fuse-dfs/目录,内有:

fuse-dfs]$ ls
fuse_dfs  fuse_dfs_wrapper.sh  test

其中fuse_dfs是可执行程序,fuse_dfs_wrapper.sh是包含一些环境变量设置的脚本,不过其中大部分需要修改:(

修改fuse_dfs_warpper.sh
#Hadoop安装目录
export HADOOP_HOME=/home/bo.jiangb/yunti-trunk/build/hadoop-0.19.1-dc
#将fuse_dfs加入到PATH
export PATH=$HADOOP_HOME/contrib/fuse_dfs:$PATH
#将hadoop的jar加入到CLASSPATH
for f in ls $HADOOP_HOME/lib/*.jar $HADOOP_HOME/*.jar ; do
export  CLASSPATH=$CLASSPATH:$f
done
#设置机器模式
export OS_ARCH=amd64
#设置JAVA_HOME
export  JAVA_HOME=/home/admin/tools/jdk1.6
#将libhdfs加入到链接库路径中
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:/home/bo.jiangb/yunti-trunk/build/libhdfs:/usr/local/lib
./fuse_dfs $@

使用

mount

  1. 新建一个空目录

    $mkdir /tmp/dfs

  2. 挂载dfs $./fuse_dfs_wrapper.sh dfs://master_node(namenode地址):port /tmp/dfs -d -d表示debug模式,如果正常,可以将-d参数去掉。

unmount

卸载可通过:

fusermount -u /tmp/dfs
































































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 里面显示出来。

使用Fuse挂载HDFS

环境

OS:centos 6.2 

gcc、jdk(1.6.33)、ant

ant 需要1.8.2或以上版,在官方网站可下载

 

   依赖包安装

 

yum install automakeautoconf m4 libtool pkgconfig fuse fuse-devel fuse-libs


1. 安装fuse 
    这里可以编译安装或yum安装
   

Shell代码   收藏代码
  1. yum install fuse fuse-libs fuse-devel  

 


2. 安装ant 
    使用yum安装
    

Shell代码   收藏代码
  1. yum install ant  

 


3. 添加系统配置 

    vi /etc/profile , 视自己的实际情况进行设置
    

Shell代码   收藏代码
  1. export OS_ARCH=amd64     #如果是32位机器填i386
  2. export OS_BIT=64         #如果是32位机器填32
  3. export JAVA_HOME=/usr/java/jdk1.6.0_26  
  4. export CLASSPATH=,:$JAVA_HOME/lib  #注意点号,与冒号
  5. export HADOOP_HOME=/usr/local/hadoop-0.20.2  
  6. 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  

执行代码: source /etc/profile  


4. 进行编译
 

    

Shell代码   收藏代码
  1. cd $HADOOP_HOME  
  2. ant compile-c++-libhdfs -Dlibhdfs=1 -Dcompile.c++=1  
  3. ln -s c++/Linux-$OS_ARCH-$OS_BIT/lib build/libhdfs  
  4. ant compile-contrib -Dlibhdfs=1 -Dfusedfs=1  

如果编译没有通过,可以是缺少依赖包: automakeautoconf m4 libtool pkgconfig fuse fuse-devel fuse-libs

yum install automakeautoconf m4 libtool pkgconfig fuse fuse-devel fuse-libs


5.  环境配置

 

  1.   编辑/etc/fuse.conf,写入以下内容  
  2. user_allow_other  
  3. mount_max=100  
  4.    
  5. 编辑$HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh  
  6. if [ "$HADOOP_HOME" = ""]; then  
  7. export HADOOP_HOME=具体的hadoop目录  
  8. fi  
  9.    
  10. exportPATH=$HADOOP_HOME/build/contrib/fuse_dfs:$PATH  
  11.    
  12. for f in ls $HADOOP_HOME/lib/*.jar $HADOOP_HOME/*.jar; do  
  13. export   CLASSPATH=$CLASSPATH:$f  
  14. done  
  15.    
  16. if [ "$OS_ARCH" = "" ];then  
  17. export OS_ARCH=amd64   如果是32位机器填写i386  
  18. fi  
  19.    
  20. if [ "$JAVA_HOME" = "" ];then  
  21. export   JAVA_HOME=具体的jdk目录  
  22. fi  
  23.    
  24. if [ "$LD_LIBRARY_PATH" ="" ]; then  
  25. export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:$HADOOP_HOME/build/libhdfs:/usr/local/lib  
  26. fi  
  27.    
  28. ./fuse_dfs $@  
  编辑/etc/fuse.conf,写入以下内容
user_allow_other
mount_max=100
 
编辑$HADOOP_HOME/build/contrib/fuse-dfs/fuse_dfs_wrapper.sh
if [ "$HADOOP_HOME" = ""]; then
export HADOOP_HOME=具体的hadoop目录
fi
 
exportPATH=$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=amd64   如果是32位机器填写i386
fi
 
if [ "$JAVA_HOME" = "" ];then
export   JAVA_HOME=具体的jdk目录
fi
 
if [ "$LD_LIBRARY_PATH" ="" ]; then
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:$HADOOP_HOME/build/libhdfs:/usr/local/lib
fi
 
./fuse_dfs $@




5. 测试 
    启动hadoop集群后,

   Shell代码  收藏代码

  1. mkdir /mnt/dfs   #挂载的目录
  2. cd $HADOOP_HOME/build/contrib/fuse-dfs  
  3. ./fuse_dfs_wrapper.sh dfs://namenode_IP:port /mnt/dfs/  
  4. ls /mnt/dfs/  


引用 :http://zh.wikipedia.org/zh-cn/FUSE

http://savagegarden.iteye.com/blog/1170752

http://wenku.baidu.com/view/0a9f2918c5da50e2524d7fca.html###



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值