範圍是從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標籤:)) –