首页 > 解决方案 > 如何解决 aws lambda 中的 java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.hadoop.fs.LocalFileSystem?

问题描述

设置hadoop 配置java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.hadoop.fs.LocalFileSystem后,即使org.apache.hadoop.fs.LocalFileSystemjar 文件中存在我也得到了。

标签: javahadoopaws-lambda

解决方案


classloader解决方案是从getClassByName功能中“删除” 。例如org.apache.hadoop.conf.Configuration,使用getClass覆盖的方法创建,例如:

Configuration hadoopConfig = new Configuration() {
    public Class<?> getClassByName(String name) throws ClassNotFoundException {
      return Class.forName(name);
    }

};

笔记

  1. 这只是工作实施。原始实现使用Class.forName(name, true, classLoader);因此新的覆盖代码可能无法工作,如果添加if语句以更改逻辑org.apache.hadoop.fs.LocalFileSystem
  2. 该错误仅针对 AWS lambda 发生并修复。在其他环境(如真正的 Hadoop 集群)中,这可能不是一个合适的解决方案

推荐阅读