加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 带有组装jar的spark-cassandra-connector的NoSuchMetho

发布时间:2020-12-16 09:22:49 所属栏目:安全 来源:网络整理
导读:我是Scala的新手,我正在尝试建立一个Spark工作.我已经构建了一个包含DataStax连接器的ajob并将其组装成一个胖罐.当我尝试执行它时,它失败并出现java.lang.NoSuchMethodError.我已经破解了JAR,可以看到包含了DataStax库.我错过了一些明显的东西吗有关这个过程
我是Scala的新手,我正在尝试建立一个Spark工作.我已经构建了一个包含DataStax连接器的ajob并将其组装成一个胖罐.当我尝试执行它时,它失败并出现java.lang.NoSuchMethodError.我已经破解了JAR,可以看到包含了DataStax库.我错过了一些明显的东西吗有关这个过程的好教程吗?

谢谢

安慰
????$spark-submit –class org.bobbrez.CasCountJob ./target/scala-2.11/bobbrez-spark-assembly-0.0.1.jar ks tn
????…
????线程“main”中的异常java.lang.NoSuchMethodError:scala.runtime.ObjectRef.zero()Lscala / runtime / ObjectRef;
????????at com.datastax.spark.connector.cql.CassandraConnector $.com $datastax $spark $connector $cql $CassandraConnector $$createSession(CassandraConnector.scala)
????????在com.datastax.spark.connector.cql.CassandraConnector $$anonfun $2.apply(CassandraConnector.scala:148)
????????…

build.sbt

name := "soofa-spark"

version := "0.0.1"

scalaVersion := "2.11.7"

// additional libraries
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0" %     "provided"
libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "1.5.0-M3"
libraryDependencies += "com.typesafe" % "config" % "1.3.0"

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
    case m if m.startsWith("META-INF") => MergeStrategy.discard
    case PathList("javax","servlet",xs @ _*) => MergeStrategy.first
    case PathList("org","apache","jboss",xs @ _*) => MergeStrategy.first
    case "about.html"  => MergeStrategy.rename
    case "reference.conf" => MergeStrategy.concat
    case _ => MergeStrategy.first
  }
}

CasCountJob.scala

package org.bobbrez

// Spark
import org.apache.spark.{SparkContext,SparkConf}
import com.datastax.spark.connector._

object CasCountJob {
  private val AppName = "CasCountJob"

  def main(args: Array[String]) {
    println("Hello world from " + AppName)

    val keyspace = args(0)
    val tablename = args(1)

    println("Keyspace: " + keyspace)
    println("Table: " + tablename)

    // Configure and create a Scala Spark Context.
    val conf = new SparkConf(true)
                .set("spark.cassandra.connection.host","HOSTNAME")
                .set("spark.cassandra.auth.username","USERNAME")
                .set("spark.cassandra.auth.password","PASSWORD")
                .setAppName(AppName)

    val sc = new SparkContext(conf)

    val rdd = sc.cassandraTable(keyspace,tablename)
    println("Table Count: " + rdd.count)

    System.exit(0)
  }
}

解决方法

Spark 1.6的Cassandra连接器仍在开发中,尚未发布.

对于将Cassandra与Spark集成,您至少需要以下依赖项: –

> Spark-Cassandra连接器 – 从here下载适当的版本
> Cassandra Core驱动程序 – 从here下载适当的版本
> Spark-Cassandra Java库 – 从here下载适当的版本
>其他依赖罐 – jodatime,jodatime-convert,jsr166

here提到了适当版本的Cassandra Libraries和Spark的映射

显然,Spark 1.5的Cassandra连接器也在开发中,您可能会看到一些兼容性问题. Cassandra连接器最稳定的版本适用于Spark 1.4,它需要以下Jar文件: –

> Spark-Cassandra connector
> Cassandra Core driver
> Spark-Cassandra Java library
>其他依赖罐 – jodatime,jsr166

不用说,所有这些jar文件都应该被配置并可供执行者使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读