我正在尝试使用Ignite 2.2.0版的Ignite-Spark插件启动Ignite上下文。
这就是我声明上下文的方式:
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的内部结构不太熟悉。
难道是我的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文件夹内的所有文件,这是导致异常的原因。
通过在不需要打包的依赖项上使用“提供的”标签,一切顺利。
关于java - 无法在Apache Ignite中加载类名称属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49071917/