私はこの問題をしばらく解決しようとしていましたが、答えが見つからないようです。私はNiFiレシーバーをインスタンス化Scalaでは、単純なスパークアプリケーションを書いています、そしてそれはSBTで正常にビルドが、私が使用してアプリケーションを実行しようとすると、私は次のエラーが表示火花を提出:NiFi受信機をインスタンス化するSparkアプリケーションを実行すると依存関係エラーが発生する
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/nifi/spark/NiFiReceiver
at <app name>.main(main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.nifi.spark.NiFiReceiver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 10 more
私が試してみましたいくつかのバリエーションが、これは私のbuild.sbtファイルです。私がScalaの同等物を使用するには、2本のnifiラインを変更した場合(つまり、各行の最初のパーセント記号を2に置き換えていることに留意すべきである
name := "<application name here>"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.2" % "provided"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.6.2" % "provided"
libraryDependencies += "org.apache.nifi" % "nifi-spark-receiver" % "0.7.0"
libraryDependencies += "org.apache.nifi" % "nifi-site-to-site-client" % "0.7.0"
%s)を実行すると、実際に次のエラーが表示されます。
[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.nifi#nifi-spark-receiver_2.10;0.7.0: not found
[error] unresolved dependency: org.apache.nifi#nifi-site-to-site-client_2.10;0.7.0: not found
私が前に述べたように、単一のパーセント記号(したがってJava依存性を使用して)でビルドにエラーは発生しませんが、実行時にエラーが発生します。
(削除特定の名前で)自分のアプリケーションの関連部分は次のとおりです。NifiReceiverがインスタンス化された場合、エラーが、ここでの最後の行を参照している
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import java.time
import java.time._
import org.apache.nifi._
import java.nio.charset._
import org.apache.nifi.spark._
import org.apache.nifi.remote.client._
import org.apache.spark._
import org.apache.nifi.events._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.nifi.remote._
import org.apache.nifi.remote.protocol._
import org.apache.spark.streaming.receiver._
import org.apache.spark.storage._
import java.io._
import org.apache.spark.serializer._
object <app name> {
def main(args: Array[String]) {
val nifiUrl = "<nifi url>"
val nifiReceiverConfig = new SiteToSiteClient.Builder()
.url(nifiUrl)
.portName("Data for Spark")
.buildConfig()
val conf = new SparkConf().setAppName("<app name>")
val ssc = new StreamingContext(conf, Seconds(10))
val packetStream = ssc.receiverStream(new NiFiReceiver(nifiReceiverConfig, StorageLevel.MEMORY_ONLY))
- 見つけることができないようそのクラス名はどこにでもあります。
私はこれまでに(別々に)以下を含む多くのアプローチを試してきました: 1)nifi-spark-receiverとnifi-site-to-site-clientのjarファイルを見つけてlibディレクトリ私のプロジェクトでは 2)この投稿に続いてhttps://community.hortonworks.com/articles/12708/nifi-feeding-data-to-spark-streaming.html。私はspark-defaults.confのディレクトリにspark-default.conf.templateのコピーを作成し、spark-defaults.confに名前を変更し、そのリンクのステップ1の2行をファイルに追加しました(実際の名前と場所を置き換えます問題のファイルのうちの1つ)。そのページの2つのコード例で使用されていたすべての必要なインポートステートメントがあることを確認しました 3)アプリケーションディレクトリのルートにプロジェクトディレクトリを作成し、アセンブリディレクトリ内にassembly.sbtというファイルを作成しました。その後
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
は、私は、アプリケーションがユーバーjarを作成してもらう代わりに、「SBTパッケージ」の「SBTアセンブリ」を走ったが、これは失敗した:(:https://github.com/sbt/sbt-assemblyをここに参照されるように)私はその後、内部の次の行を追加しました同様build.sbtファイルでScalaの依存関係を持つ「SBTパッケージ」を実行したときと同じエラーで:
[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.nifi#nifi-spark-receiver_2.10;0.7.0: not found
[error] unresolved dependency: org.apache.nifi#nifi-site-to-site-client_2.10;0.7.0: not found
任意のより詳細な情報が必要な場合は私に知らせてください。助けを前にありがとう。