本文介绍使用文件存储HDFS SDK时遇到的常见问题及排查方法。

提示“No FileSystem for scheme: dfs”信息

执行hadoop命令行或者任务失败,提示“No FileSystem for scheme: dfs”信息时,请按如下步骤进行排查:
  1. 确认aliyun-sdk-dfs-x.x.x.jar包已经放置在所有hadoop节点的hadoop环境下的classpath中。hadoop环境的classpath可以通过hadoop classpath命令查询。
    $HADOOP_HOME/bin/hadoop classpath
  2. 确认执行作业的用户对jar包有可读权限。
  3. 如果hadoop fs命令可以成功运行,但是无法执行分析任务,请确认yarn等任务执行框架在配置完文件存储HDFS的SDK后进行了重启。使用yarn的环境时需要执行以下命令:
    $HADOOP_HOME/sbin/stop-yarn.sh
    $HADOOP_HOME/sbin/start-yarn.sh

提示“java.lang.NoClassDefFoundError”信息

执行hadoop命令行或者任务失败,提示“java.lang.NoClassDefFoundError”信息时,请按如下步骤进行排查:
  1. 根据提示的类的路径确认该缺少的类是否是com.alibaba.dfs相关的类。
  2. 如果缺少的类是com.alibaba.dfs相关的类,请参考“No FileSystem for scheme: dfs”信息的处理办法。
  3. 如果与com.alibaba.dfs无关,则说明hadoop的运行环境中缺少依赖的类,需要用户根据提示的错误名下载相应的jar包并放置到hadoop运行环境的classpath中。hadoop环境的classpath可以通过$HADOOP_HOME/bin/hadoop classpath命令查询。
    例如hadoop命令行或者任务出现如下错误时,表明org/apache/hadoop/fs/PathFilter相关的类未在hadoop的运行环境中,该类所属的jar包为hadoop-common-x.x.x.jar,需要用户下载该jar包的正确版本,并将其置于所有hadoop节点的hadoop运行环境的classpath中。
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/PathFilter