使用安装在同一群集上的apache spark将数据从HDFS文件插入另一个群集中的DSE cassandra表

时间:2017-02-04 01:05:14

标签: hadoop apache-spark datastax cassandra-2.0 spark-cassandra-connector

我们在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())

} 

0 个答案:

没有答案