【问题标题】:Class.forName in Apache Spark 1.6.1 mapApache Spark 1.6.1 映射中的 Class.forName
【发布时间】:2017-06-10 23:47:08
【问题描述】:

我有 spark scala 1.6.1_2.10 项目,其中有 2 个模块在编译时不依赖。第一个模块是启动火花驱动器应用程序。 在第一个模块中,在一个 rdd.map{} 操作中,我尝试使用反射加载一个类 class.forName("second.module.function.MapOperation")

我的 spark-submit 将两个模块的 jar 都作为主要模块,而其他模块在 --jars 选项中。

此代码在我的 intellij 上本地运行良好。 由于集群上的 ClassNotFound second.module.function.MapOperation 而失败 如果我测试同一个类,在使用 ClassNotFound 的功能测试用例中也会失败。

类加载器和在 Spark 作业/操作中使用 Class.forName 有问题吗?

【问题讨论】:

  • 可能的原因是集群中缺少 jar。 ...看看我的answer
  • 没有其他直接调用(没有反射)的类没有任何问题被调用..
  • 你能在map方法val cl = ClassLoader.getSystemClassLoader cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println) 里面这样检查吗?它会告诉你你的jar是否存在
  • 你是如何启动工作的/以及纱线集群或纱线客户端的模式......你可以在这里打印你的 spark-submit

标签: scala apache-spark reflection classnotfoundexception


【解决方案1】:

您需要将 jars 放入 hdfs 并提供该路径以触发提交。

这样所有的 spark 进程都可以访问该类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多