我们在Hadoop集群2.8上安装了Spark 1.6。我们有一个单独的Datastax Cassandra集群4.8.6(C * 3.x和spark 1.4.2)。我们需要将HDFS文件中的数据复制到DSE cassandra表中。在我们目前的工作中,我们在HDFS + Spark集群上提交了一个spark作业(独立模式下的spark-submit),它将数据加载到DSE cassandra表(单独的集群)中。在这项工作中,我们连接到cassandra集群并在那里使用可用的Spark集群。我们正在尝试找到一种方法来使用Hadoop集群上可用的Spark资源(spark-submit Yarn模式)并写入cassandra表。是否可以在Hadoop集群中仅使用Spark集群并加载到外部cassandra集群?比如使用hadoop Spark将数据加载到RDD或Dataframe中,然后连接到Cassandra加载数据?根据我的理解和研究到目前为止,这是不可能的。任何输入?---
相同的示例代码(不工作) -
class LoadData() extends Serializable {
def ReadHDFSFile() {
val HDFSUrl = "hdfs://hadoopcluster"
val hdfsFile = HDFSUrl+"/testHDFSFile"
// Connecting to Spark on HDFS+Spark cluster
val conf = new SparkConf()
conf.setAppName("DataScala")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "false").option("inferSchema", "true").option("delimiter", "\u0001").load(hdfsFile)
df.registerTempTable("testTable")
// now connect to external cassandra cluster
try{
val cluster = Cluster.builder().addContactPoints(CassandraNodes).withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.ONE)).withCredentials(CassandraUser, CassandraPassword).build
val session= cluster.connect()
// is it possible to use DataFrame from different sc to load data into cassandra?
session.execute("INSERT INTO CassandraTableName SELECT 1, C3, C4, C5, C6, C7, null, C8, C9, null FROM testTable")
} catch {
case e: Exception => println(e.fillInStackTrace())
}