You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EMR-6.7.0 Spark添加Redis驱动Jar后连接AWS Redis集群报错求助

EMR集群连接AWS Redis集群失败求助

我尝试从EMR集群连接AWS Redis集群,操作步骤如下:

  • 将spark-redis-2.3.0.jar上传至S3存储桶,通过引导操作把Jar包复制到集群节点:
aws s3 cp s3://sparkbcuket/spark-redis-2.3.0.jar /home/hadoop/spark-redis-2.3.0.jar
  • 编写Spark测试应用代码:
import sys
from pyspark.sql import SparkSession

if __name__ == "__main__":
    spark = SparkSession.builder\
    .config("spark.redis.host", "testredis-0013.vb4vgr.00341.eu1.cache.amazonaws.com")\
    .config("spark.redis.port", "6379")\
    .appName("Redis_test").getOrCreate()

    df = spark.read.format("org.apache.spark.sql.redis").option("key.column", "key").option("keys.pattern","*").load()

    df.write.csv(path='s3://sparkbucket/',sep=',')
    
    spark.stop()
  • 用以下命令提交应用:
spark-submit --deploy-mode cluster --driver-class-path /home/hadoop/spark-redis-2.3.0.jar s3://sparkbucket/testredis.py

运行后出现错误:

ERROR Client: Application diagnostics message: User application exited with status 1 Exception in thread "main" org.apache.spark.SparkException: Application application_1658168513779_0001 finished with failed status

不清楚问题出在哪里,求排查方向和解决办法。


排查与解决建议

1. 依赖Jar包分发问题

你通过引导操作把Jar包复制到了/home/hadoop/目录,但集群模式下Executor节点无法访问该路径,且--driver-class-path仅对Driver生效,Executor需要单独指定依赖。解决方式:

  • 改用--jars参数直接指定S3上的Jar包路径,Spark会自动将Jar包分发至所有节点:
    spark-submit --deploy-mode cluster --jars s3://sparkbcuket/spark-redis-2.3.0.jar s3://sparkbucket/testredis.py
    
  • 或者在引导操作中将Jar包复制到Spark默认依赖目录/usr/lib/spark/jars/,这样所有节点的Spark都能加载到该Jar包。

2. 网络连通性验证

  • 检查EMR集群安全组是否允许出站访问Redis集群的6379端口,同时Redis集群的安全组是否允许EMR集群所在IP段的入站访问。
  • 在EMR任意节点执行nc -zv testredis-0013.vb4vgr.00341.eu1.cache.amazonaws.com 6379,确认网络连接正常。

3. 权限配置检查

  • 确认Spark应用运行用户拥有S3存储桶s3://sparkbucket/的读写权限,尤其是写入CSV文件的权限。
  • 如果Redis集群设置了密码认证,需在SparkSession配置中添加认证参数:
    spark = SparkSession.builder\
    .config("spark.redis.host", "testredis-0013.vb4vgr.00341.eu1.cache.amazonaws.com")\
    .config("spark.redis.port", "6379")\
    .config("spark.redis.auth", "你的Redis密码")\
    .appName("Redis_test").getOrCreate()
    

4. 查看详细日志定位根因

当前错误仅为顶层提示,需查看Driver和Executor的详细日志:

  • 登录EMR控制台,找到对应应用ID,查看具体的异常堆栈信息(如类找不到、连接超时、权限报错等),这是定位问题的核心依据。

内容的提问来源于stack exchange,提问作者billie class

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:16:06