本文主要介绍如何使用Fuse-DFS工具实现文件存储 HDFS 版在本地文件系统的映射。
前提条件
已为Hadoop集群所有节点安装JDK,且JDK版本不低于1.8。建议您使用的Hadoop版本不低于2.7.2,本文使用的Hadoop版本为Apache Hadoop 2.8.5。
已下载与Hadoop集群版本相同的Hadoop源码包。具体下载地址请参见下载Hadoop源码包。
背景信息
Fuse-DFS是Hadoop项目自带的一个功能模块,提供了使用FUSE(用户空间中的文件系统)在UNIX文件系统上映射HDFS的功能,在官方提供的Hadoop预编译版本中不包含Fuse-DFS的功能模块,如需使用该功能需要手动编译该功能模块并添加到Hadoop客户端中。Fuse-DFS官方文档请参见MountableHDFS。
Fuse-DFS工具在阿里云文件存储HDFS版上使用时需要额外的配置。具体操作,请参见步骤二:配置Fuse-DFS。
本示例以CentOS 7操作系统为例,进行配置和使用Fuse-DFS。
步骤一:Hadoop集群挂载文件存储 HDFS 版实例
在Hadoop集群中配置文件存储 HDFS 版实例。具体操作,请参见挂载文件存储 HDFS 版文件系统。
步骤二:配置Fuse-DFS
在Hadoop客户端上安装依赖并载入FUSE模块。
执行以下命令,安装依赖。
yum -y install fuse fuse-devel fuse-libs
执行以下命令,载入FUSE模块。
modprobe fuse
解压Hadoop源码包。
tar -zxvf hadoop-2.8.5-src.tar.gz
修改代码并编译。
使用Fuse-DFS挂载文件存储 HDFS 版到本地文件系统时,系统会将挂载点地址的前缀
dfs://
修改为hdfs://
,导致挂载失败,因此需要修改代码重新编译,操作如下。执行以下命令,打开fuse_options.c文件,并将
#define NEW_HDFS_URI_LOCATION "hdfs://"
修改为#define NEW_HDFS_URI_LOCATION "dfs://"
。vim hadoop-2.8.5-src/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_options.c
执行以下命令编译Hadoop源码中hadoop-hdfs-project模块下的hadoop-hdfs-native-client子模块。
cd hadoop-2.8.5-src/ mvn clean package -pl hadoop-hdfs-project/hadoop-hdfs-native-client -Pnative -DskipTests
重要不同的Hadoop版本中子模块的hadoop-hdfs-native-client命名及位置可能不同 。在Hadoop 2.7.x版本中该模块包含在hadoop-hdfs-project/hadoop-hdfs子模块中,Hadoop 2.8.x及之后的版本都在模块hadoop-hdfs-project下。
配置Fuse-DFS。
将编译出来的Fuse-DFS包拷贝到Hadoop客户端的bin目录下。示例命令如下:
cp hadoop-2.8.5-src/hadoop-hdfs-project/hadoop-hdfs-native-client/target/main/native/fuse-dfs/fuse_dfs ${HADOOP_HOME}/bin
为Hadoop客户端配置环境变量。
执行
vim /etc/profile
命令,打开配置文件,添加如下内容。export OS_ARCH=amd64 export LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/${OS_ARCH}/server:${HADOOP_HOME}/lib/native export CLASSPATH=$CLASSPATH:`${HADOOP_HOME}/bin/hadoop classpath --glob`
执行以下命令使配置生效。
source /etc/profile
步骤三:使用Fuse-DFS
创建目录。
mkdir /mnt/dfs_mount
挂载文件存储 HDFS 版文件系统至本地文件系统。
fuse_dfs dfs://f-xxxxx.cn-xxx.dfs.aliyuncs.com:10290/ /mnt/dfs_mount
其中,
dfs://f-xxxxx.cn-xxx.dfs.aliyuncs.com
为您文件存储 HDFS 版的挂载点地址,请根据实际情况替换。验证挂载结果。
如果您在本地目录中可以查看文件存储HDFS版中的文件和目录,则表示挂载成功。
重要客户端重启后,您需要重新挂载文件存储 HDFS 版文件系统到本地,建议您配置开机自动挂载。
挂载成功后,您可以在本地访问文件存储 HDFS 版文件系统,执行读取或写入操作。
执行以下命令在已映射文件存储 HDFS 版文件系统的本地目录中创建文件,创建成功后,您可以在文件存储 HDFS 版文件系统上查看到该文件。
cd /mnt/dfs_mount
mkdir fuse_test
echo "hello dfs" > fuse_test/fuse.txt
可选:卸载挂载目录。
fusermount -u /mnt/dfs_mount