如何将列家庭从一个cassandra集群复制到另一个?
情境:
任何帮助将不胜感激。谢谢。
答案 0 :(得分:3)
在现有群集上拍摄快照,并在目标群集上使用批量加载器,不需要Spark(尽管你可以这样做)。
以下是关于程序的the docs,但我将提供您需要做的事情的高级概述。
scp
)到新群集上的节点答案 1 :(得分:3)
经过大量努力,我们找到了解决方案。这个解决方案非常简单和疯狂。我们可以使用spark来做到这一点,让我们看看。
我们在做什么(哪些没效果):
// Reading from first cassandra cluster
dataframe = cassandraSQLContext.read().format("org.apache.spark.sql.cassandra").options("otherOptionsMap").option("spark.cassandra.connection.host","firstClusterIP").load();
// Writing to second cassandra cluster
dataframe.write.mode("saveMode").options("otherOptionsMap").option("spark.cassandra.connection.host","secondClusterIP").save();
什么工作正常:
// Reading from first cassandra cluster
dataframe = cassandraSQLContext.read().format("org.apache.spark.sql.cassandra").options("otherOptionsMap").option("spark_cassandra_connection_host","firstClusterIP").load();
// Writing to second cassandra cluster
dataframe.write.mode("saveMode").options("otherOptionsMap")option("spark_cassandra_connection_host","secondClusterIP").save();
是的,这是正确的,您只需将期间(.
) 更改为下划线(_
),以获取spark-cassandra主机中的属性属性。我不知道这是不是spark-cassandra连接器中的错误。
答案 2 :(得分:2)
如果您正在使用spark-cassandra-connector,则默认情况下它支持连接多个群集。相关的代码段如下:
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql._
import org.apache.spark.SparkContext
def twoClusterExample ( sc: SparkContext) = {
val connectorToClusterOne = CassandraConnector(sc.getConf.set("spark.cassandra.connection.host", "127.0.0.1"))
val connectorToClusterTwo = CassandraConnector(sc.getConf.set("spark.cassandra.connection.host", "127.0.0.2"))
val rddFromClusterOne = {
// Sets connectorToClusterOne as default connection for everything in this code block
implicit val c = connectorToClusterOne
sc.cassandraTable("ks","tab")
}
{
//Sets connectorToClusterTwo as the default connection for everything in this code block
implicit val c = connectorToClusterTwo
rddFromClusterOne.saveToCassandra("ks","tab")
}
}
Here是相关文档和示例代码段。