web-dev-qa-db-ja.com

Spark送信がJava.lang.NoSuchMethodErrorで失敗する:scala.Predef $。$ conforms()Lscala / Predef $$ less $ colon $ less;

spark 1.3.1 prebuild version spark-1.3.1-bin-hadoop2.6.tgzを使用しています。

スレッド「メイン」の例外Java.lang.NoSuchMethodError:scala.Predef $。$ conforms()Lscala/Predef $$ less $ colon $ less; org.Apache.spark.util.Utils $ .getSystemProperties(Utils.scala:1418)at org.Apache.spark.SparkConf。(SparkConf.scala:58)at org.Apache.spark.SparkConf。(SparkConf.scala: 52)com.zoho.zbi.Testing.test(Testing.Java:43)at com.zoho.zbi.Testing.main(Testing.Java:39)Sparkのデフォルトのlog4jプロファイルを使用:org/Apache/spark/log4j- defaults.properties

カサンドラに保存する簡単なデモアプリを試しています

SparkConf batchConf= new SparkConf()
            .setSparkHome(sparkHome)
            .setJars(jars)
            .setAppName(ZohoBIConstants.getAppName("cassandra"))//NO I18N
            .setMaster(master).set("spark.cassandra.connection.Host", "localhost");

            JavaSparkContext sc = new JavaSparkContext(batchConf);
            // here we are going to save some data to Cassandra...
            List<Person> people = Arrays.asList(
                    Person.newInstance(1, "John", new Date()),
                    Person.newInstance(2, "Anna", new Date()),
                    Person.newInstance(3, "Andrew", new Date())
            );
//          Person test = Person.newInstance(1, "vini", new Date())''
            System.out.println("Inside Java API Demo : "+people);
            JavaRDD<Person> rdd = sc.parallelize(people);
            System.out.println("Inside Java API Demo rdd : "+rdd);
            javaFunctions(rdd).writerBuilder("test", "people", mapToRow(Person.class)).saveToCassandra();
            System.out.println("Stopping sc");
            sc.stop();

sparkを使用して送信するとき

bin/spark-submit --class "abc.efg.Testing" --master spark://xyz:7077 /home/test/target/uber-Cassandra-0.0.1-SNAPSHOT.jar

これが私のポンです

依存関係

<dependencies>
  <!-- Scala -->
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-compiler</artifactId>
        <version>${scala.version}</version>
    </dependency>
    <!-- END Scala -->
  <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
  </dependency>

  <dependency>
    <groupId>com.yammer.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>2.2.0</version>
  </dependency>

  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

  <dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>2.1.5</version>
  </dependency>

  <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
  </dependency>
<!-- Cassandra Spark Connector dependency -->
  <dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector_2.10</artifactId>
    <version>1.2.0</version>
  </dependency>
<!-- Cassandra Java Connector dependency -->
  <dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector-Java_2.10</artifactId>
    <version>1.2.0</version>
  </dependency> 

<!-- Spark Core dependency -->
        <dependency>
                <groupId>org.Apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>1.3.1</version>
        </dependency>
    <!-- Spark dependency -->
        <dependency>
                 <groupId>org.Apache.spark</groupId>
                 <artifactId>spark-streaming_2.11</artifactId>
                <version>1.3.1</version>
        </dependency>
    <!-- Spark dependency -->
        <dependency>
                <groupId>org.Apache.spark</groupId>
                <artifactId>spark-streaming-kafka_2.10</artifactId>
                <version>1.3.1</version>
        </dependency>
  </dependencies>

と私は使用してビルド

<build>
      <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
           <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                    <finalName>uber-${project.artifactId}-${project.version}</finalName>
                </configuration>
            </plugin>
           <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

      </plugins>
    </build>

しかし、コードを介して送信すると、機能しないため、ヘルプはかなり複雑になります。私はpomにscala2.10.4プロップを追加しようとしましたが、まだうまくいきません。

私はすべてのマスター、スパークホーム、およびjarがsparkConfに設定されたアプリケーションとして実行されているEclipseで実行していますが、sparkConfでエラーが正確に表示されます

私のscalaバージョンは

scala -version Scala code runner version 2.11.2-Copyright 2002-2013、LAMP/EPFL

これは問題と関係がありますか?

古いバージョンのscalaに切り替える方法は?ドキュメントには、spark1.3.1がscala 2.10.xバージョンをサポートしていると記載されています。これを修正する方法を教えてください

11
mithra

発生している問題は、Scalaバージョンの非互換性が原因です。 Spark 1.3.1ディストリビューションは、古いScala 2.10でコンパイルされています。JDBCサポートを含め、Spark依存関係の一部は2.11ではサポートされていないためです。

SparkクラスターをScala 2.10で実行することをお勧めします。ただし、必要に応じて、次のようにSpark 2.11を使用してScalaパッケージをコンパイルすることもできます。

dev/change-version-to-2.11.sh
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
19
Maksud

scala IDEで同じ問題が発生していました。以下の手順で解決しました。

注:-scala-sparkの互換性を確認してください。私にとってはscala version-2.11。*はspark 2.4。*と互換性があります

プロジェクトに移動>>右クリック>>プロパティ>> scalaコンパイラ>> [プロジェクト設定を使用]オプションを選択>> [scalaインストール]を変更>>適用>>適用して閉じる... 行ってもいい。

下の画像リンクをクリックしてScala IDE の設定を確認します

1
Santosh Hencha