使用Fuse-DFS挂载文件存储 HDFS 版

本文主要介绍如何使用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

  1. 在Hadoop客户端上安装依赖并载入FUSE模块。

    1. 执行以下命令,安装依赖。

      yum -y install fuse fuse-devel fuse-libs
    2. 执行以下命令,载入FUSE模块。

      modprobe fuse
  2. 解压Hadoop源码包。

    tar -zxvf hadoop-2.8.5-src.tar.gz
  3. 修改代码并编译。

    使用Fuse-DFS挂载文件存储 HDFS 版到本地文件系统时,系统会将挂载点地址的前缀dfs://修改为hdfs:// ,导致挂载失败,因此需要修改代码重新编译,操作如下。

    1. 执行以下命令,打开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

      修改文件

    2. 执行以下命令编译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下。

  4. 配置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
  5. 为Hadoop客户端配置环境变量。

    1. 执行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`
    2. 执行以下命令使配置生效。

      source /etc/profile

步骤三:使用Fuse-DFS

  1. 创建目录。

    mkdir /mnt/dfs_mount
  2. 挂载文件存储 HDFS 版文件系统至本地文件系统。

    fuse_dfs dfs://f-xxxxx.cn-xxx.dfs.aliyuncs.com:10290/ /mnt/dfs_mount

    其中,dfs://f-xxxxx.cn-xxx.dfs.aliyuncs.com为您文件存储 HDFS 版的挂载点地址,请根据实际情况替换。

  3. 验证挂载结果。

    如果您在本地目录中可以查看文件存储HDFS版中的文件和目录,则表示挂载成功。

    验证挂载结果

    重要

    客户端重启后,您需要重新挂载文件存储 HDFS 版文件系统到本地,建议您配置开机自动挂载。

  4. 挂载成功后,您可以在本地访问文件存储 HDFS 版文件系统,执行读取或写入操作。

    执行以下命令在已映射文件存储 HDFS 版文件系统的本地目录中创建文件,创建成功后,您可以在文件存储 HDFS 版文件系统上查看到该文件。

    cd /mnt/dfs_mount
    mkdir fuse_test
    echo "hello dfs" > fuse_test/fuse.txt

    使用文件存储HDFS

  5. 可选:卸载挂载目录。

    fusermount -u /mnt/dfs_mount