[英]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.