【问题标题】:Read from Cassandra with Cloudera Hadoop using Spark使用 Spark 从 Cassandra 和 Cloudera Hadoop 读取
【发布时间】:2014-01-31 22:26:30
【问题描述】:

范围是从 HDFS 读取,在 Spark 中过滤并将结果写入 Cassandra。 我正在使用 SBT 打包和运行。

问题来了: 从 HDFS 读取到 Spark 需要我的 sbt 构建文件中的以下行。

libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.0.0-cdh4.5.0"

但是,通过

读取和写入 Cassandra
val casRdd = sc.newAPIHadoopRDD(
  job.getConfiguration(),
  classOf[ColumnFamilyInputFormat],
  classOf[ByteBuffer],
  classOf[SortedMap[ByteBuffer, IColumn]])

只有在 hadoop-client 的库依赖被忽略或更改为 0.1 或 1.2.0 或 2.2.0(非 CDH)时才有效 - 不幸的是,HDFS 读取是不可能的。 如果添加了 hadoop-client 行,尝试从 Cassandra 读取时会抛出以下错误:

java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

因此,我得出结论,Cassandra 读/写问题似乎是与 Cloudera 相关的问题?请注意,Cassandra 读/写只需删除 libraryDependencies 行即可。

由于HDFS和Cassandra读取需要在同一个项目中工作,这个问题如何解决?

【问题讨论】:

    标签: hadoop cassandra cloudera apache-spark


    【解决方案1】:

    您似乎正在尝试使用 Spark 中针对 CDH 构建的 Apache Hadoop 发行版。

    您的项目永远不必像 Spark 那样依赖 hadoop-client。在我们的 Sppark + Cassandra 集成库 Calliope 中,我们依赖于 Spark -

    "org.apache.spark" %% "spark-core" % SPARK_VERSION % "provided"
    

    我们一直在将此库与 Apache Hadoop HDFS、CDH HDFS 和我们自己的 SnackFS 一起使用。您只需确保部署在正确的 Spark 版本上。

    【讨论】:

    • (这是@daumann 的问题;我刚刚编辑它以添加 Spark 标签 :))
    猜你喜欢
    • 2015-12-03
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多