问题描述
在LocalNodeFirstLoadBalancingPolicy的documentation中提到-
先选择本地节点,然后以随机顺序选择本地 DC 中的节点。从不从其他 DC 中选择节点。对于写入,如果语句具有路由键集,则此 LBP 是令牌感知的 - 它更喜欢作为计算令牌副本的节点而不是其他节点。
但是在我的 spark 作业日志中,我可以找到所有节点都在添加集群。
21/05/05 10:08:40 INFO CassandraWriter$: Setting local_dc: DC1
21/05/05 10:08:40 INFO CassandraWriter$: Writing to DC: DC1,available host ips: x.x.x.54,x.x.x.237,x.x.x.168,x.x.x.197,x.x.x.219
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.219:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.237:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.54:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.238:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.238 (DC2)
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.168:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.42:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.42 (DC2)
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.109:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.109 (DC2)
谁能帮我理解为什么要添加 DC2 节点?根据我的理解,协调器节点总是从 local_dc 中选择。
我也尝试在不设置 spark.cassandra.connection.local_dc 的情况下运行摄取,并且看到了相同的日志。
见下面的写代码:
records.write.cassandraFormat(table,keySpace)
.mode(SaveMode.Append)
.option(CassandraConnectorConf.LocalDCParam.name,cassandraDC.name)
.option(CassandraConnectorConf.ConnectionHostParam.name,cassandraDC.availableHosts.mkString(","))
.save()
PS:我有单独的 spark 和 cassandra 集群,我的用例是将数据从 spark 集群写入 cassandra。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)