Spark Scala中TransportRequestHandler异常:Cassandra集群作业提交失败
解决DataStax Cassandra集群上Spark作业提交的ClosedChannelException问题
这个问题我之前在提交Spark作业到DataStax Cassandra集群时也碰到过,从你给出的日志来看,是在把大jar包传输到worker节点(10.73.115.11)时连接意外关闭了,ClosedChannelException通常和网络、资源超时或者节点状态有关,给你几个具体的排查和解决方向:
检查节点间网络连通性
首先确认提交作业的driver节点和目标worker节点之间没有网络障碍:- 用
telnet 10.73.115.11 35656或者nc -zv 10.73.115.11 35656测试端口是否能正常连通 - 排查防火墙、安全组规则,确保Spark节点间的通信端口(包括随机端口)没有被拦截,DataStax Spark集群通常需要开放Spark默认的端口范围以及节点间的双向通信权限
- 用
调整Spark网络超时参数
你的jar包有100MB+,传输过程中很容易因为默认超时时间太短导致连接断开。提交作业时可以添加这些参数来延长超时时间:spark-submit \ --class your.main.class \ --master spark://<master-node>:7077 \ --conf spark.network.timeout=300s \ --conf spark.executor.heartbeatInterval=60s \ --conf spark.driver.maxResultSize=2g \ OLVOracleDataExtraction-0.0.1-jar-with-dependencies.jarspark.network.timeout:全局网络超时时间,覆盖所有节点间通信的超时spark.executor.heartbeatInterval:executor向driver发送心跳的间隔,避免被误判为失联spark.driver.maxResultSize:driver能接收的最大数据量,确保大jar包传输不会触发限制
检查worker节点磁盘空间
Worker节点需要把接收的jar包写入本地磁盘,如果/home/cassandra/deploy/olv_extraction/所在的磁盘空间不足,会直接导致传输中断。登录到10.73.115.11节点,执行df -h查看磁盘使用情况,清理日志、冗余文件等释放空间后再重试。优化jar包传输方式
单个大jar包传输失败概率更高,可以尝试:- 拆分jar包:把项目代码和依赖jar分开,提交时用
--jars参数指定依赖的位置(比如放在集群共享存储上) - 使用分布式存储:把jar包上传到HDFS或者DataStax的分布式文件系统,提交作业时引用分布式路径,避免节点间直接传输大文件
- 拆分jar包:把项目代码和依赖jar分开,提交时用
确认worker节点状态
登录Spark Master的Web UI(默认端口8080),检查10.73.115.11这个worker节点是否处于Alive状态。如果节点曾经重启或者内存不足被kill,也会导致传输过程中连接关闭,需要确保worker节点稳定运行。
内容的提问来源于stack exchange,提问作者Chandra
相关产品推荐
相关产品推荐

