范围是从HDFS读取,在Spark中过滤并将结果写入Cassandra。 我是包装和SBT运行。使用Spark从Cloudera Hadoop读取Cassandra
这里是问题: 从HDFS到Spark的读取需要在我的sbt构建文件中有以下行。
libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.0.0-cdh4.5.0"
然而,读,通过
val casRdd = sc.newAPIHadoopRDD(
job.getConfiguration(),
classOf[ColumnFamilyInputFormat],
classOf[ByteBuffer],
classOf[SortedMap[ByteBuffer, IColumn]])
写卡桑德拉如果Hadoop的客户端库相关要么忽略或改为0.1或1.2.0或2.2.0不只是工作(非CDH) - 不幸的是HDFS读取是不可能的。 如果添加了Hadoop的客户端线,下面则抛出Error试图从卡桑德拉阅读时:
java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
因此,我的结论是与卡桑德拉问题的读/写,似乎是被Cloudera公司相关的问题吗?请注意,Cassandra的读/写操作只需删除libraryDependencies行即可。
由于HDFS和Cassandra需要在同一个项目中工作,这个问题该如何解决?
(这是@ daumann的问题;我刚刚编辑它以添加Spark标签:)) –