网站首页 > 技术文章 正文
我们发现时常在用户邮件列表上会出现一个有关作业失败的问题,这个失败伴随着错误消息“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的参数,如下所示:
$ 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两者分别都设置classpath才能正确配置。
总结
- 对于使用Alluxio的应用程序,它们必须将Alluxio客户端jar文件加入其classpath中。
- 如何将Alluxio客户端jar文件配置到classpath可以根据计算框架的具体情况进行具体分析。
猜你喜欢
- 2024-10-02 Maven 的这 7 个问题你思考过没有?
- 2024-10-02 220、Class.forName 和 ClassLoader 有什么区别?
- 2024-10-02 原型模式(Prototype)(原型模式和工厂模式区别)
- 2024-10-02 异常还不知道是什么?一文教会你异常是什么,如何优雅处理
- 2024-10-02 十年架构师干货总结:Java 的类加载机制
- 2024-10-02 线上故障排查全套路盘点,运维大哥请自查
- 2024-10-02 一文读懂 Java 异常处理(java异常处理的方法)
- 2024-10-02 反射必杀技:深入了解Class类,让你一通百通
- 2024-10-02 Java异常的面试问题及答案-Part 2
- 2024-10-02 Python异常处理(python异常处理的关键字)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- js判断是否空对象 (63)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- phprequire_once (61)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)