繁体   English   中英

使用Spark从Cassandra和Cloudera Hadoop读取

[英]Read from Cassandra with Cloudera Hadoop using Spark

范围是从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有关? 请注意,只需删除libraryDependencies行即可进行Cassandra读/写。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM