Spark连接Cassandra存储CSV文件时遇连接失败错误求助
看起来你遇到了Spark与Cassandra连接的典型问题——无法建立到本地Cassandra 9042端口的原生连接。我帮你一步步排查和解决:
先确认Cassandra服务是否正常运行
首先排除最基础的问题:Cassandra有没有启动?- 如果是Linux系统用systemd管理,执行命令:
systemctl status cassandra,看输出里的状态是不是active (running) - 或者用Cassandra自带工具:
nodetool status,如果能返回节点状态,说明服务正常;如果提示“Connection refused”,先启动服务:systemctl start cassandra
- 如果是Linux系统用systemd管理,执行命令:
测试9042端口的连通性
确认Cassandra的CQL端口(默认9042)是否能被本地访问:- 执行
telnet 127.0.0.1 9042,如果能进入空白界面,说明端口没问题;如果提示“Connection refused”,继续往下排查 - 或者用
nc -zv 127.0.0.1 9042,输出显示succeeded才是正常的
- 执行
检查Cassandra的配置文件
打开Cassandra的配置文件cassandra.yaml(通常在/etc/cassandra/或安装目录的conf下),检查几个关键配置:rpc_address:这个是CQL服务监听的地址,要设置为127.0.0.1或者0.0.0.0(允许所有地址访问),如果设成其他IP,本地Spark就连接不上native_transport_port:确认是不是9042,如果改了端口,Spark连接时也要对应修改端口配置
改完配置后需要重启Cassandra服务生效
验证Spark Connector版本兼容性
Spark和Cassandra的版本必须与Spark Connector版本匹配,这是很多人踩坑的点:- 比如Spark 3.4.x要搭配
spark-cassandra-connector_2.12:3.4.1,Spark 2.4.x要搭配spark-cassandra-connector_2.11:2.4.3这类对应版本
你可以在Spark提交命令或代码里检查依赖的Connector版本是否正确,比如--packages com.datastax.spark:spark-cassandra-connector_2.12:3.4.1
- 比如Spark 3.4.x要搭配
检查Spark的连接配置
确保你的Spark代码或提交命令里的Cassandra连接参数正确:
比如在SparkSession里设置:val spark = SparkSession.builder() .appName("SparkCassandraExample") .config("spark.cassandra.connection.host", "127.0.0.1") .config("spark.cassandra.connection.port", "9042") // 如果Cassandra开了认证,还要加下面两行 // .config("spark.cassandra.auth.username", "your_username") // .config("spark.cassandra.auth.password", "your_password") .getOrCreate()如果用spark-submit提交,要把这些配置通过
--conf参数传递:spark-submit --conf spark.cassandra.connection.host=127.0.0.1 ...排查本地防火墙/安全组
本地防火墙可能会阻止Spark访问9042端口:- 如果是ufw防火墙,执行
ufw allow 9042开放端口,或者临时关闭防火墙测试:ufw disable - 如果是iptables,执行
iptables -A INPUT -p tcp --dport 9042 -s 127.0.0.1 -j ACCEPT允许本地访问
- 如果是ufw防火墙,执行
查看详细日志定位问题
如果上面的步骤都没解决,看看更详细的日志:- Cassandra的
system.log(通常在/var/log/cassandra/),搜索关键词native_transport,看有没有启动失败、端口被占用的信息 - Spark的日志,找到完整的错误堆栈,里面可能会有更具体的原因,比如认证失败、版本不兼容的提示
- Cassandra的
你提供的错误信息:
java.io.IOException: Failed to open native connection to Cassandra at {127.0.0.1}:9042 at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:168) at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$8.apply(CassandraConnector.scala:154) at com.datastax.spa...
内容的提问来源于stack exchange,提问作者Real tiger

