2

スコープは、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 クライアントのライブラリ依存関係が除外されているか、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 の読み取りは同じプロジェクトで動作する必要があるため、この問題はどのように解決できますか?

4

1 に答える 1