天天看点

《Hadoop MapReduce实战手册》一2.10 挂载HDFS(Fuse-DFS)

本节书摘来异步社区《hadoop mapreduce实战手册》一书中的第2章,第2.10节,作者: 【美】srinath perera , thilina gunarathne 译者: 杨卓荦 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

hadoop mapreduce实战手册

fuse-dfs项目使我们能够在linux上挂载hdfs(也支持许多其他版本的unix)作为标准的文件系统。这样做,可以允许任何程序或用户使用类似于传统的文件系统的方式访问hdfs和与hdfs交互。

准备工作

系统中必须安装以下软件:

fuse和fuse开发包。fuse开发文件可以通过redhat/fedora安装fuse-devel rpm或者debian/ubuntu安装libfuse-dev软件包的方式获得。

java_home必须设置为指向jdk的环境,而不是jre。

要挂载hdfs文件系统,还需要具备操作系统节点的root权限。

以下攻略假定你已经预先内置了libhdfs库。hadoop中包含为linux x86_64/i386平台预编译的libhdfs库。如果使用其他平台,首先需要参考本节“更多参考”小节中的“构建libhdfs”,以正确构建libhdfs库。

操作步骤

下列步骤显示了如何挂载hdfs文件系统作为一个linux的标准文件系统。

转到$ hadoop_home并创建一个名为build的新目录。

创建符号链接,链接到build目录里面的libhdfs库。

将c++目录复制到build文件夹。

在$hadoop_home下执行以下命令,建立fuse-dfs。此命令将在build/contrib/fuse- dfs/目录下生成fuse_dfs和fuse_dfs_wrapper.sh文件。

提示 如果构建失败,并显示类似undefined reference to 'fuse_get_ context'的信息,则需要将以下内容追加到src/contrib/fuse- dfs/src/makefile.am文件的末尾:

验证fuse_dfs_wrapper.sh中的路径信息并更正它们。可能需要更改以下行的libhdfs路径:

如果已经存在,则需要在/etc/fuse.conf文件中注释掉user_allow_other行。

创建一个目录作为挂载点:

在build/contrib/fuse-dfs/目录下执行以下命令。而且,必须以root权限执行此命令。确保在根环境下也能正确设置hadoop_home和java_home环境变量。可选的-d参数用于开启调试模式。当你第一次运行它的时候,将在调试模式下运行以下命令,方便识别任何错误信息。rw参数挂载文件系统为可读写(ro为只读)。-oserver必须指向namenode的主机名。-oport应提供namenode的端口号。

工作原理

更多参考

正如前面章节所述,使用fuse-dfs,hdfs的许多实例可以挂载到不同的目录上。

构建libhdfs

为了构建libhdfs,必须在系统上安装以下软件:

ant-nodeps和ant-trax包;

automake包;

libtool包;

zlib-devel包;

jdk 1.5—编译apache forrest的时候需要;

通过在$hadoop_home下执行如下命令编译libhdfs:

通过执行以下命令将libhdfs打包。使用-djava5.home属性提供jdk 1.5的路径。使用

-dforrest.home属性提供apache forrest的安装路径。

检查build/libhdfs目录是否包含libhdfs.*文件。如果没有,请将build/c++/cture>/lib目录下的文件复制到build/libhdfs下。