Apache Spark写入Cassandra遇QUORUM级超级权限授权异常
问题背景
基于Kubernetes通过Helm Chart部署3节点Cassandra集群(datacenter1),使用Apache Spark写入数据时偶发以下异常导致任务终止:
Caused by: com.datastax.oss.driver.api.core.servererrors.UnauthorizedException: Unable to perform authorization of permissions: Unable to perform authorization of super-user permission: Cannot achieve consistency level QUORUM
集群所有节点状态均为UN(正常可用),且已确认system_auth键空间已复制到所有节点。
原因分析
- system_auth一致性与副本不匹配:默认
system_auth使用QUORUM一致性级别,3节点集群需要至少2个节点响应认证请求。若节点因负载过高、网络延迟无法及时响应,就会触发一致性级别不满足的错误。 - Spark并发请求过载:Spark任务高并发写入时,短时间内产生大量认证请求,Cassandra节点处理能力饱和,部分请求无法完成一致性校验。
- Kubernetes网络偶发抖动:K8s Pod网络存在临时连通性问题,导致节点间
system_auth数据同步或请求响应延迟,破坏一致性校验条件。
解决方法
- 调整system_auth配置
- 查看当前
system_auth复制策略:DESCRIBE KEYSPACE system_auth; - 将复制因子改为3(匹配3节点集群),确保每个节点持有副本:
ALTER KEYSPACE system_auth WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3}; - 单数据中心场景下,将认证请求一致性级别改为
LOCAL_ONE:- Spark配置中添加:
spark.cassandra.auth.conf.factory.class=com.datastax.spark.connector.cql.DefaultAuthConfFactory spark.cassandra.consistency.level=LOCAL_ONE - 或Cassandra Driver配置中设置:
basic.request.consistency=LOCAL_ONE
- Spark配置中添加:
- 查看当前
- 优化Cassandra节点性能
- 调整K8s Pod的资源配额(requests/limits),确保CPU、内存、磁盘IO资源充足,避免节点负载过高。
- 修改Cassandra配置参数(如
concurrent_reads、concurrent_writes),提升节点并发处理能力。
- 优化Spark任务配置
- 降低Spark任务并行度,避免短时间内大量请求压垮Cassandra集群。
- 开启异常重试机制,添加以下配置:
spark.cassandra.query.retry.count=3 spark.cassandra.connection.keep_alive_ms=30000
- 排查Kubernetes网络问题
- 检查集群网络插件(如Calico、Flannel)运行状态,排查节点间是否存在偶发丢包。
- 优化Cassandra Pod的Liveness/Readiness探针配置,确保节点状态判断准确,避免误剔除正常节点。
内容的提问来源于stack exchange,提问作者Pro
相关产品推荐
相关产品推荐

