Spark读取同区域多个S3桶异常问题求助
问题分析与解决方案
我帮你仔细看了代码和错误日志,一眼就发现了导致第二个桶读取失败的关键问题!
核心错误点
在你的主流程代码中,处理第二个桶时,调用parseEvents函数传入的参数有误:
// 错误的代码 bucketTwoEvents: RDD[Event] <- parseEvents(config.bucketTwo.name, config.service)
而处理第一个桶时,你正确传入了预先构建好的完整S3路径bucketOnePath:
// 正确的代码 bucketOneEvents: RDD[Event] <- parseEvents(bucketOnePath, config.service)
这就导致第二个桶的路径没有带上s3://前缀和后续的文件匹配模式(/*/*/*/*/*.gz),Spark无法识别这是S3路径,就默认使用了HDFS作为文件系统,所以抛出了Path does not exist: hdfs:someBucket2的错误。
修复步骤
只需要把第二个桶的parseEvents调用改成传入构建好的bucketTwoPath即可:
// 修正后的代码 bucketTwoEvents: RDD[Event] <- parseEvents(bucketTwoPath, config.service)
额外排查建议
- 可以在日志中打印
bucketTwoPath的具体值,确认它是类似s3://someBucket2/*/*/*/*/*.gz的完整路径 - 如果后续还要读取更多桶,务必统一传入通过
buildBucketPath生成的完整路径,避免直接传入桶名 - 确认
buildBucketPath函数的逻辑是正确的,能为每个桶生成符合要求的S3路径格式
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

