Apache spark spark如何在cassandra表之间复制数据?
在cassandra中,当从一个表中读取数据并将其写入另一个表时,有人能解释一下spark的内部工作原理吗 以下是我的用例: 我通过卡夫卡主题将来自物联网平台的数据输入卡桑德拉。我有一个小的python脚本,它解析来自kafka的每条消息以获得它所属的表名,准备一个查询并使用datastax的cassandra python驱动程序将其写入cassandra。有了这个脚本,我可以每分钟摄取大约300000条记录到cassandra中。然而,我的传入数据速率是510000条记录/分钟,因此卡夫卡消费者延迟持续增加 Python脚本已经在并发调用cassandra。如果我增加python执行器的数量,cassandra驱动程序就会开始失败,因为cassandra节点对它不可用。我假设我在那里每秒打卡桑德拉电话的次数是有限的。以下是我收到的错误消息:Apache spark spark如何在cassandra表之间复制数据?,apache-spark,pyspark,cassandra,cassandra-3.0,spark-cassandra-connector,Apache Spark,Pyspark,Cassandra,Cassandra 3.0,Spark Cassandra Connector,在cassandra中,当从一个表中读取数据并将其写入另一个表时,有人能解释一下spark的内部工作原理吗 以下是我的用例: 我通过卡夫卡主题将来自物联网平台的数据输入卡桑德拉。我有一个小的python脚本,它解析来自kafka的每条消息以获得它所属的表名,准备一个查询并使用datastax的cassandra python驱动程序将其写入cassandra。有了这个脚本,我可以每分钟摄取大约300000条记录到cassandra中。然而,我的传入数据速率是510000条记录/分钟,因此卡夫卡消
ERROR Operation failed: ('Unable to complete the operation against any hosts', {<Host: 10.128.1.3 datacenter1>: ConnectionException('Pool is shutdown',), <Host: 10.128.1.1 datacenter1>: ConnectionException('Pool is shutdown',)})"
版本:
- 卡桑德拉3.9
- 火花2.1.0
- Datastax的spark cassandra连接器2.0.1
- Scala版本2.11
- 使用3个辅助节点和1个主节点进行Spark设置
- 3个工作节点还安装了cassandra群集。(每个cassandra节点都有一个spark worker节点)
- 每个工人允许使用10 GB ram和3个内核
- spark是先从cassandra读取所有数据,然后将其写入新表,还是spark cassandra connector中存在某种优化,允许它在cassandra表中移动数据而不读取所有记录
- 如果我将python脚本替换为spark streaming作业,在该作业中我解析数据包以获取cassandra的表名,这会帮助我更快地将数据摄取到cassandra中吗
- 用于提交请求。您只需要确保您提交了更多可以由一个连接处理的请求(但您也可以增加这个数字——我不知道如何在Python中实现,但请检查一下以了解情况)
- 使用正确的一致性级别(
应该会给您带来非常好的性能)LOCAL\u ONE
- 正确使用
- 您可以并行运行脚本的多个副本,确保它们都在同一个卡夫卡消费者组中
df = spark.read\
.format("org.apache.spark.sql.cassandra")\
.options(table=sourcetable, keyspace=sourcekeyspace)\
.load().cache()
df.createOrReplaceTempView("data")
query = ("select dev_id,datetime,DATE_FORMAT(datetime,'yyyy-MM-dd') as day, " + field + " as value from data " )
vgDF = spark.sql(query)
vgDF.show(50)
vgDF.write\
.format("org.apache.spark.sql.cassandra")\
.mode('append')\
.options(table=newtable, keyspace=newkeyspace)\
.save()