hadoop - 使用 Spark 通过 Cloudera Hadoop 从 Cassandra 读取数据

标签 hadoop cassandra cloudera apache-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 相关的问题?请注意,Cassandra 读/写只需删除 libraryDependencies 行即可。

由于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 构建上。

关于hadoop - 使用 Spark 通过 Cloudera Hadoop 从 Cassandra 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086820/

相关文章:

docker - 如何在Docker Compose多容器应用程序中使用GoCQL连接到bitnami/cassandra?

hadoop - 没有hadoop apache spark可以运行吗?

hadoop - 使用Phoenix Driver将数据保存到Hbase时的时区问题

mongodb - 统计系统的最佳数据库

sql - 以可通过Impala查询的方式在包含复杂类型的配置单元表上创建日期限制 View ?

java - Map Reduce 作业从 Windows 提交到 Linux 时失败(Cent OS)

performance - Impala 上的多维数据集运算符

hadoop - 在HDFS上载期间可以读取数据吗?

hadoop - 使用unixODBC/isql将数据加载到HDFS

database - 模型 M :M relations in Cassandra? 有哪些替代方法