java .lang.ClassNotFoundException: com.datastax.spark.connector.rdd.partitioner.CassandraPartition - PullRequest
0 голосов
/ 02 мая 2020

Я немного поработал с Cassandra и сейчас пытаюсь настроить разъем spark и spark-cassandra. Я использую IntelliJ IDEA для этого (впервые с IntelliJ IDEA и Scala тоже) в Windows 10.

build.gradle

apply plugin: 'scala'
apply plugin: 'idea'
apply plugin: 'eclipse'

repositories {
    mavenCentral()

    flatDir {
        dirs 'runtime libs'
    }
}

idea {
    project {
        jdkName = '1.8'
        languageLevel = '1.8'
    }
}

dependencies {
    compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.4.5'
    compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.5'
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.12'
    compile group: 'com.datastax.spark', name: 'spark-cassandra-connector_2.11', version: '2.5.0'
    compile group: 'log4j', name: 'log4j', version: '1.2.17'
}

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:12.0.1'
    }
}

compileScala.targetCompatibility = "1.8"
compileScala.sourceCompatibility = "1.8"

jar {
    zip64 true
    archiveName = "ModuleName.jar"
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    manifest {
        attributes 'Main-Class': 'org.module.ModuelName'
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'

}

ModuleName. scala

package org.module
import org.apache.spark.sql.SparkSession
import com.datastax.spark.connector._
import org.apache.spark.sql.types.TimestampType

object SentinelSparkModule {

  case class Document(id: Int, time: TimestampType, data: String)

  def main(args: Array[String]) {
    val spark = SparkSession.builder
      .master("spark://192.168.0.3:7077")
      .appName("App")
      .config("spark.cassandra.connection.host", "127.0.0.1")
      .config("spark.cassandra.connection.port", "9042")
      .getOrCreate()

    //I'm trying it without [Document] since it throws 'Failed to map constructor parameter id in
    //org.module.ModuleName.Document to a column of keyspace.table'

    val documentRDD = spark.sparkContext
      .cassandraTable/*[Document]*/("keyspace", "table")
      .select()
    documentRDD.take(10).foreach(println)
    spark.stop()
 }
}

У меня есть работающий мастер зажигания на spark: //192.168.0.3: 7077 и работник этого мастера, но я не пробовал на submit работу в виде скомпилированной фляги в консоли, я просто пытаюсь заставить ее работать в IDE.

Спасибо

1 Ответ

1 голос
/ 02 мая 2020

Банку с соединителем Cassandra необходимо добавить в classpath рабочих . Один из способов сделать это - создать Uber JAR со всеми необходимыми зависимостями и отправить его в кластер.

См. Создание Uberjar с Gradle

Также выполните обязательно измените scope зависимостей в файле сборки с compile на provided для всех jar-файлов, кроме коннектора cassandra.

Ссылка: https://reflectoring.io/maven-scopes-gradle-configurations/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...