本文介绍了出现'Class alluxio.hadoop.FileSystem not found'报错的原因及其解决方法
翻译原文为:https://dzone.com/articles/alluxio-developer-tip-how-to-fix-quotclass-alluxio
____________________________________________________________________________________________________
有时会在Alluxio用户邮件列表上弹出一个引用作业失败的问题,并显示错误消息“java.lang.ClassNotFoundException:Class alluxio.hadoop.FileSystem not found”。 本文解释了失败的原因以及问题发生时的解决方案。
为什么会出现这种错误?
一般出现该错误表示Alluxio客户端在运行时不可用。 当作业尝试访问Alluxio文件系统但未能找到Alluxio客户端的实现以连接到该服务时,这会导致异常。
Alluxio客户端是一个Java库,它定义了类alluxio.hadoop.FileSystem,以便根据用户请求调用Alluxio服务(例如创建文件,列出目录等)。 它通常被预编译到名为alluxio-1.8.1-client.jar(对于v1.8.1)的jar文件中,并与Alluxio tarball一起分发。 要使用应用程序,此文件应位于JVM类路径上,以便可以将其发现并加载到JVM进程中。 如果应用程序的JVM无法在类路径上找到此文件,则它无法将类alluxio.hadoop.FileSystem实现,因此将抛出异常。
怎样解决这个问题?
解决方案是:确保Alluxio客户端的jar分布在应用程序的类路径上。 在进行故障排除时应考虑以下几个因素:
<1>如果应用程序分布在多个节点上,则应将此jar分发给所有这些节点。 依据这些节点计算机的框架配置不同,此配置也可能非常不同:
•对于MapReduce或YARN,可以将路径附加到Alluxio客户端的jar上如 tomapreduce.application.classpath或yarn.application.classpath以确保每个任务都可以找到它。 或者,您可以提供路径作为-libjars的参数,例如:
$ bin/hadoop jar \
libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount \
-libjars /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar \
<INPUT FILES> <OUTPUT DIRECTORY>
注:根据Hadoop发行版,它也可能有助于设置$ HADOOP_CLASSPATH:
export HADOOP_CLASSPATH=/<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar:${HADOOP_CLASSPATH}
• 对于Spark,在运行Spark的每个节点上的spark / conf / spark-defaults.conf中设置并重新启动运行的Spark服务器进程:
spark.driver.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar
spark.executor.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar
•对于Hive,在conf / hive-env.sh中设置环境变量HIVE_AUX_JARS_PATH:
export HIVE_AUX_JARS_PATH=/<PATH_TO_ALLUXIO>/client/alluxio-1.8.1-client.jar:${HIVE_AUX_JARS_PATH}
在某些情况下,一个计算框架依赖于另一个。 例如,Hive服务可以使用MapReduce作为分布式查询的引擎。 在这种情况下,必须设置Hive和MapReduce的类路径才能正确配置。
总结:
1.对于使用Alluxio的应用程序,他们必须将Alluxio客户端jar文件附加到其类路径中。
2.如何将Alluxio客户端jar文件配置到类路径可以根据计算框架逐个进行。