java - 无法在 Apache Ignite 中加载类名属性

标签 java apache-spark sbt ignite

我正在尝试使用 Ignite-Spark 插件启动 Ignite 上下文(Ignite 版本 2.2.0)。 这就是我声明上下文的方式:

val igniteContext:IgniteContext=new IgniteContext(sparkSession.sparkContext,()=>new IgniteConfiguration().setDiscoverySpi(new TcpDiscoverySpi().
      setLocalAddress("127.0.0.1").setLocalPort(48511).setIpFinder(new TcpDiscoveryMulticastIpFinder().
      setAddresses(new util.ArrayList[String]))).setCommunicationSpi(new TcpCommunicationSpi().setLocalPort(48512)),true)

但是,当上下文尝试启动时,我收到此错误:

IgniteException: Failed to load class names properties file packaged with ignite binaries 
[file=META-INF/classnames.properties, 
ldr=org.apache.spark.util.MutableURLClassLoader@2bbaf4f0]

我在这里读到http://apache-ignite-developers.2346864.n4.nabble.com/classnames-properties-file-is-out-of-date-td2213.html “'classnames.properties' 文件是 位于 ignite-core/META-INF 文件夹中。该文件由内部使用 点燃编码员。”

我对 Ignite 的内部结构不太熟悉。 这可能来 self 的 Ignite jar 依赖项的位置吗?我使用 sbt 程序集来构建我的 .jar 文件。

感谢您的宝贵时间。

最佳答案

原来是我造成了这个问题。 为了防止运行 sbt 程序集时出现合并冲突,我在 build.sbt 文件中添加了以下合并策略

name := "Spark_Ignite_Project"

version := "0.1"

scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "2.2.0"
libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.2.0"
libraryDependencies += "org.apache.ignite" % "ignite-core" % "2.2.0"
libraryDependencies += "org.apache.ignite" % "ignite-spring" % "2.2.0"
libraryDependencies += "org.apache.ignite" % "ignite-indexing" % "2.2.0"
libraryDependencies += "org.apache.ignite" % "ignite-log4j" % "2.2.0"


assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}

这基本上会丢弃 META-INF 文件夹中导致异常的所有文件。

通过在不需要打包的依赖项上使用“provided”标签,一切顺利。

关于java - 无法在 Apache Ignite 中加载类名属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071917/

相关文章:

apache-spark - spark RDD saveAsTextFile gzip

java - 涉及通过 LAN 连接的 2 台机器的 rmi 程序示例

Java计算二维数组中的重复数字

java - 在 Android Studio 中使用 unirest 的问题

java - Struts 2 中的 validate() 方法如何获得结果 "input"?

azure - 自动化 HDInsight Spark 配置并按计划提交作业?

json - 使用 Spark 解析多个 JSON 模式

scala - 使用SBT复制资源

gradle - 如何从 Gradle 调用 sbt 任务?

sbt - 如何在函数中获取像baseDirectory 这样的SettingKey 的值?