Spark批处理可在2个Cassandra群集之间迁移数据

我正在使用spark将一些数据从一个cassandra表移动到另一个集群上的另一个cassandra表。

我为以下源集群之一指定了cassandra配置:

/*
spark.cassandra.connection.host: 
spark.cassandra.connection.port:
spark.cassandra.auth.username:
spark.cassandra.auth.password:
spark.cassandra.connection.ssl.clientAuth.enabled: true
spark.cassandra.connection.ssl.enabled: true
spark.cassandra.connection.ssl.trustStore.path: 
spark.cassandra.connection.ssl.trustStore.password: 
spark.cassandra.connection.timeout_ms: */

SparkSession spark = SparkSession.builder()
            .config(conf)
            .getOrCreate();

Dataset<Row> df = spark.read()
            .format("org.apache.spark.sql.cassandra")
            .options(config.getsourcetable())
            .load();
df.show();

// *** How/Where do I specify cassandra config in destination cluster? ***
df.write()
        .mode(SaveMode.Append)
        .format("org.apache.spark.sql.cassandra")
        .options(destinationTbl);

如何/在哪里在目标集群(Java Perferred)中指定cassandra配置?

谢谢!

ck19911018 回答:Spark批处理可在2个Cassandra群集之间迁移数据

我还没有测试过,但是基于Russel Spitzer's blog post,您可以执行以下操作(未在Java中进行过测试,但应该可以工作):

  • 设置2个配置选项(或在创建spark实例时添加它们):
spark.setConf("ClusterSource/spark.cassandra.connection.host","127.0.0.1");
spark.setConf("ClusterDestination/spark.cassandra.connection.host","127.0.0.2");
  • options中添加相应集群的名称作为cluster条目。

P.S。另外,请记住,如果您需要迁移数据并在数据上保留WriteTime和/或TTL,则需要使用RDD API,因为DataFrame API不支持这些功能。

,

我有一个类似的用例,但由于某些连接器问题,我无法使用Alex建议的方法建立与第二集群的连接。因此,我不得不将此DataFrame转换为RDD并使用RDD方法将其写入第二个Cassandra群集

将所有Cassandra连接器详细信息传递到另一个sparkConfig文件,并使用CassandraConnector对其进行解析。

{    
val cluster: CassandraConnector = CassandraConnector(sparkConfig)

      implicit val c: CassandraConnector = cluster

      dataFrame
        .rdd
        .saveToCassandra(keySpaceName,tableName,SomeColumns(ListOfColumns)
}
本文链接:https://www.f2er.com/3142255.html

大家都在问