本文主要介绍如何使用fuse-dfs工具实现文件存储HDFS在本地文件系统的映射。

背景信息

Fuse-dfs是Hadoop项目自带的一个功能模块,提供了使用 FUSE(用户空间中的文件系统)在UNIX文件系统上映射HDFS的功能,在官方提供的Hadoop预编译版本中不包含fuse-dfs的功能模块,如需使用该功能需要手动编译该功能模块并添加到官方提供的预编译版本中。fuse-dfs官方文档请参见MountableHDFS

说明 Fuse-dfs工具在阿里云文件存储HDFS上使用与原生HDFS上使用时有些差异,详细操作步骤请参见配置Fuse-DFS

准备工作

  1. 开通文件存储HDFS服务并创建文件系统实例和挂载点,详情请参见HDFS快速入门
  2. 在Hadoop集群所有节点上安装JDK。
    版本不能低于1.8。
  3. 在Hadoop集群中配置文件存储HDFS实例,详情请参见挂载文件系统
  4. 下载与Hadoop集群版本相同的Hadoop源码包。下载地址:官方链接

配置Fuse-DFS

本操作步骤需要在待挂载文件存储HDFS的Hadoop集群节点上执行。

  1. 安装依赖包。
    yum -y install fuse fuse-devel fuse-libs
    modprobe fuse
  2. 编译Hadoop源码。
    1. 解压Hadoop源码包。
      tar -zxvf hadoop-2.8.5-src.tar.gz
    2. 修改文件。
      说明 使用fuse-dfs挂载文件存储HDFS时,会将挂载点地址的前缀dfs://修改为hdfs://导致fuse-dfs无法正确识别文件存储HDFS的挂载点地址而引发错误,因此使用fuse-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
      修改文件
    3. 编译Hadoop集群中的fuse-dfs。

      您可以参考官方源码包中的BUILDING.txt文件编译Hadoop 。

      cd hadoop-2.8.5-src/
      mvn clean package -Pnative -DskipTests
  3. 配置fuse-dfs。

    将编译出来的fuse-dfs包拷贝到Hadoop集群的HADOOP_HOME/bin路径下。

    cp hadoop-2.8.5-src/hadoop-hdfs-project/hadoop-hdfs-native-client/target/main/native/fuse-dfs/fuse_dfs  /usr/local/hadoop-2.8.5/bin
  4. 配置环境变量。
    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. 挂载文件存储HDFS至本地文件系统。
    1. 在本地文件系统上创建文件夹。
      mkdir ~/FuseDfs_test
    2. 使用fuse-dfs将文件存储HDFS映射到本地文件系统。
      ./fuse_dfs dfs://f-xxxxx.cn-xxxx.dfs.aliyuncs.com:10290/ ~/FuseDfs_test/ -d

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

  2. 验证挂载结果。

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

    验证挂载结果
  3. 挂载成功后,您可以在本地访问文件存储HDFS,执行读取或写入操作。

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

    cd ~/FuseDfs_test
    echo "fuse-dfs" > fuse
    cat fuse
    使用文件存储HDFS
  4. 卸载本地的挂载文件夹。
    fusermount -u ~/FuseDfs_test
注意 挂载文件存储HDFS后,重启本地文件系统所在的机器,会导致挂载失效。您需要重新挂载文件存储HDFS,或者设置启动任务使机器重启后自动挂载文件存储HDFS。