【发布时间】: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"
但是,通过
读取和写入 Cassandraval 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