Alluxio客户端显示找不到FileSystem类问题分析与解决

我们发现时常在用户邮件列表上会出现一个有关作业失败的问题,这个失败伴随着错误消息“java.lang.ClassNotFoundException:Class alluxio.hadoop.FileSystemnot found”。这篇博客分析解释了这种失败的原因以及发生该问题时的解决方案。

为什么会发生这个错误?

这个错误说明Alluxio客户端在运行时不可用。当作业尝试访问Alluxio文件系统但没能找到Alluxio客户端的实现以连接到对应的服务时,就会导致异常。

Alluxio客户端是一个Java包,它定义了alluxio.hadoop.FileSystem类,以便根据用户请求调用Alluxio服务(例如,创建文件、列出目录内容等)。它通常被预编译成一个名为alluxio-1.8.1-client.jar(对于v1.8.1而言)的jar文件,并与Alluxio压缩包一起发布。为了能够与应用程序协作,Alluxio客户端jar文件应该位于JVM的classpath中。如果应用程序无法在classpath中找到这个文件,它就不知道类alluxio.hadoop.FileSystem的实现,因此会抛出异常。

如何解决这个问题?

该问题的解决方案就是确保Alluxio客户端jar在应用程序的classpath中。在故障排除时有几个因素应当考虑。

如果应用程序分布在多个节点上,那么应该将这个jar分发给其中每一个节点。根据计算框架的不同,具体的配置方法可能有很大差异:

  • 对于MapReduce或YARN应用程序,可以将Alluxio客户端jar的路径加到mapreduce.application.classpath或yarn.application.classpath以确保每个任务都能找到它。除此之外,你也可以将这个路径作为-libjars的参数,如下所示:

        

     取决于Hadoop的发行版,设置$HADOOP_CLASSPATH也可能有用:

        

  • 对于Spark应用程序,在每个Spark运行节点上的spark/conf/spark-defaults.conf文件中添加如下设置,并重启长期运行的Spark服务器进程:

        

  • 对于Hive,在conf/hive-env.sh文件中设置环境变量HIVE_AUX_JARS_PATH:

       

在某些情况下,一个计算引擎依赖于另一个计算引擎。例如,Hive服务可以使用MapReduce作为分布式查询的引擎。在这种情况下,必须为Hive和MapReduce两者分别都设置classpath才能正确配置。

总结

  • 对于使用Alluxio的应用程序,它们必须将Alluxio客户端jar文件加入其classpath中。

  • 如何将Alluxio客户端jar文件配置到classpath可以根据计算框架的具体情况进行具体分析。

猜你喜欢

转载自blog.csdn.net/oDaiLiDong/article/details/84992178
今日推荐