2017-08-21 6 views
1

私はプロジェクトを管理するためにmavenを使用しています。Spark 2.2.0ストリーミングデータソースの検索に失敗しました:kafka

mvn clean package 

私は私の仕事を提出する:そしては、私が使用して、すべてをパッケージ化以下

が私のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>***</groupId> 
    <artifactId>***</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
    <sourceDirectory>src/main/scala</sourceDirectory> 

    <plugins>   
     <plugin> 
     <groupId>org.scala-tools</groupId> 
     <artifactId>maven-scala-plugin</artifactId> 
     <version>2.11</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>compile</goal> 
       <goal>testCompile</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <scalaVersion>2.11.8</scalaVersion> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.0.2</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 

    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.6</version> 
     <groupId>org.apache.maven.plugins</groupId> 
     <configuration> 
      <appendAssemblyId>false</appendAssemblyId> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <archive> 
       <manifest> 
        <mainClass>***</mainClass> 
       </manifest> 
      </archive> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 

</build> 


    <dependencies> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql_2.11</artifactId> 
     <version>2.2.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql-kafka-0-10_2.11</artifactId> 
     <version>2.2.0</version> 
    </dependency> 


    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> 
     <version>2.2.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.scalaj</groupId> 
     <artifactId>scalaj-http_2.11</artifactId> 
     <version>2.2.0</version> 
    </dependency> 

    </dependencies> 
</project> 

あるMavenの依存関係に

<groupId>org.apache.spark</groupId> 
    <artifactId>spark-sql-kafka-0-10_2.11</artifactId> 
    <version>2.2.0</version> 

を追加しませんローカルで入力することによって:

spark-submit --class ... <path to jar file> <arguments to run the main class>

しかし、私はエラーが言ってしまいます:java.lang.ClassNotFoundExceptionがスレッドの例外「メイン」:カフカ:データソースが見つかりませんでした。 http://spark.apache.org/third-party-projects.html

spark-submissionの後に--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0を追加してこの問題を解決できることがわかっています。

しかし、私はそれをすることを推奨するために私のPOMを変更することはできますか? 私のmavenリポジトリにあるものは、spark-sql-kafka-0-10_2.11-2.2.0.jarがにダウンロードされているのがわかります。それでは、なぜ私はスパーク送信中に手動で依存関係を追加する必要がありますか? アセンブリを使ってjarファイルを作成しても、pom.xmlに何らかのエラーがあるように感じます。

誰かが私を助けてくれることを願っています!

+0

uber JARでsql-kafka jarが追加されているかどうか確認してみましたか?また、私はここの答えに従っています:https://stackoverflow.com/questions/39132906/how-to-create-maven-uber-jar-which-includes-dependencies-with-scope-provided –

答えて

0

最後に私は私の問題をうんざりしました。私はpom.xmlを次のように変更しました:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>***</groupId> 
    <artifactId>***</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <spark.version>2.2.0</spark.version> 
    </properties> 

    <dependencies> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.11</artifactId> 
     <version>${spark.version}</version> 
     <scope>${spark.scope}</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql_2.11</artifactId> 
     <version>${spark.version}</version> 
     <scope>${spark.scope}</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-sql-kafka-0-10_2.11</artifactId> 
     <version>${spark.version}</version> 
    </dependency> 

    </dependencies> 

<profiles> 
    <profile> 
     <id>default</id> 
     <properties> 
      <profile.id>dev</profile.id> 
      <spark.scope>compile</spark.scope> 
     </properties> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
    </profile> 
    <profile> 
     <id>test</id> 
     <properties> 
      <profile.id>test</profile.id> 
      <spark.scope>provided</spark.scope> 
     </properties> 
    </profile> 
    <profile> 
     <id>online</id> 
     <properties> 
      <profile.id>online</profile.id> 
      <spark.scope>provided</spark.scope> 
     </properties> 
    </profile> 
</profiles> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <version>2.11</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <scalaVersion>2.11.8</scalaVersion> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <appendAssemblyId>false</appendAssemblyId> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>***</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 

    </build> 

</project> 

基本的に私はプロファイルセクションを追加し、各依存関係にスコープを追加しました。 mvn clean packageの代わりにmvn clean install -Ponline -DskipTestsを使用しました。そして驚いたことに、すべてが完璧に機能します。

このメソッドがうまくいかない理由は明らかではありませんが、jarファイルから、mvn cleanパッケージで作成されたjarファイルにはたくさんのフォルダが含まれていますが、他のメソッドにはいくつかしか含まれていません。おそらく、最初の方法ではフォルダ間に矛盾があります。私は知らない、経験豊富な人々がこれを説明できることを願っています。

関連する問題