从 AED S3 存储桶读取时警告导致失败

Posted

技术标签:

【中文标题】从 AED S3 存储桶读取时警告导致失败【英文标题】:Warning results in failure when reading from AED S3 bucket 【发布时间】:2020-04-06 19:19:50 【问题描述】:

我正在两个表之间进行简单的内部连接,但我不断收到如下所示的警告。我在其他帖子中看到,可以忽略警告,但我的工作以失败告终并且没有进展。 这些表非常大(120 亿行),但我只将一个表中的三列添加到另一个表中。 当将数据集减少到几百万行并在 Amazon Sagemaker Jupyter 笔记本中运行脚本时。它工作正常。但是当我在整个数据集的 EMR 集群上运行它时,它失败了。我什至运行了它似乎失败的特定 snappy 分区,它在 sagemaker 中工作。 这项工作从其中一张表中读取没有问题,似乎是另一张表出现了问题

INFO FileScanRDD:读取文件路径: s3a://path/EES_FD_UVA_HIST/date=2019-10-14/part-00056-ddb83da5-2e1b-499d-a52a-cad16e21bd2c-c000.snappy.parquet, 范围:0-102777097,分区值:[18183] 20/04/06 15:51:58 WARN S3AbortableInputStream:并非所有字节都从 S3ObjectInputStream,中止 HTTP 连接。这很可能是一个错误 并可能导致次优行为。只请求你的字节 需要通过远程 GET 或在使用后排空输入流。 20/04/06 15:51:58 WARN S3AbortableInputStream:并非所有字节都从 S3ObjectInputStream,中止 HTTP 连接。这很可能是一个错误 并可能导致次优行为。只请求你的字节 需要通过远程 GET 或在使用后排空输入流。 20/04/06 15:52:03 信息 CoarseGrainedExecutorBackend:驱动程序命令 关机 20/04/06 15:52:03 信息 MemoryStore:MemoryStore 已清除 20/04/06 15:52:03 信息 BlockManager:BlockManager 已停止 20/04/06 15:52:03 INFO ShutdownHookManager:已调用关闭挂钩

这是我的代码:

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
uvalim=spark.read.parquet("s3://path/UVA_HIST_WITH_LIMITS")
uvaorg=spark.read.parquet("s3a://path/EES_FD_UVA_HIST")
config=uvalim.select('SEQ_ID','TOOL_ID', 'DATE' ,'UL','LL')
uva=uvaorg.select('SEQ_ID', 'TOOL_ID', 'TIME_STAMP', 'RUN_ID', 'TARGET', 'LOWER_CRITICAL', 'UPPER_CRITICAL', 'RESULT', 'STATUS')

uva_config=uva.join(config, on=['SEQ_ID','TOOL_ID'], how='inner')

uva_config.write.mode("overwrite").parquet("s3a://path/Uvaconfig.parquet")

有没有办法调试这个?

更新:根据艾默生的建议:

我使用调试日志运行它。在我终止纱线应用程序之前,它运行了 9 个小时,失败了。 由于某种原因,stderr 没有太多输出

这是标准错误输出:

SLF4J:类路径包含多个 SLF4J 绑定。 SLF4J:找到 绑定在 [jar:file:/mnt/yarn/usercache/hadoop/filecache/301/__spark_libs__1712836156286367723.zip/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:发现绑定 [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:见http://www.slf4j.org/codes.html#multiple_bindings 解释。 SLF4J:实际绑定是类型 [org.slf4j.impl.Log4jLoggerFactory] ​​20/04/07 05:04:13 信息 CoarseGrainedExecutorBackend:启动守护进程,进程名称: 5653@ip-10-210-13-51 20/04/07 05:04:13 信息 SignalUtils:已注册 TERM 20/04/07 05:04:13 的信号处理程序信息 SignalUtils:已注册 HUP 的信号处理程序 20/04/07 05:04:13 INFO SignalUtils:已注册 INT 20/04/07 05:04:15 INFO SecurityManager 的信号处理程序: 将视图 acls 更改为:yarn,hadoop 20/04/07 05:04:15 INFO SecurityManager:将修改 acls 更改为:yarn,hadoop 20/04/07 05:04:15 INFO SecurityManager:将视图 acls 组更改为:20/04/07 05:04:15 INFO SecurityManager:将修改 acls 组更改为: 20/04/07 05:04:15 信息安全管理器:安全管理器: 身份验证已禁用; ui acls 禁用;有视野的用户 权限:设置(纱线,hadoop);具有查看权限的组:Set(); 具有修改权限的用户:Set(yarn, hadoop);带有修改的组 权限:Set() 20/04/07 05:04:15 INFO TransportClientFactory: 成功创建连接到 ip-10-210-13-51.ec2.internal/10.210.13.51:35863 168 毫秒后(0 毫秒 花费在引导程序中)20/04/07 05:04:16 INFO SecurityManager:正在更改 查看访问权限:yarn,hadoop 20/04/07 05:04:16 INFO SecurityManager: 将修改 acls 更改为:yarn,hadoop 20/04/07 05:04:16 INFO SecurityManager:将视图 acls 组更改为:20/04/07 05:04:16 INFO SecurityManager:将修改 acls 组更改为:20/04/07 05:04:16 INFO SecurityManager:SecurityManager:身份验证已禁用;用户界面 acls 禁用;有查看权限的用户:Set(yarn, hadoop);团体 有查看权限:Set();具有修改权限的用户: 设置(纱线,hadoop);具有修改权限的组:Set() 20/04/07 05:04:16 INFO TransportClientFactory:成功创建连接 20 毫秒(0 毫秒)后到 ip-10-210-13-51.ec2.internal/10.210.13.51:35863 花费在引导程序中)20/04/07 05:04:16 INFO DiskBlockManager:已创建 本地目录在 /mnt1/yarn/usercache/hadoop/appcache/application_1569338404918_1241/blockmgr-2adfe133-fd28-4f25-95a4-2ac1348c625e 20/04/07 05:04:16 INFO DiskBlockManager:在 /mnt/yarn/usercache/hadoop/appcache/application_1569338404918_1241/blockmgr-3620ceea-8eee-42c5-af2f-6975c894b643 20/04/07 05:04:17 INFO MemoryStore:MemoryStore 以容量启动 3.8 GB 20/04/07 05:04:17 信息 CoarseGrainedExecutorBackend:连接到驱动程序: spark://CoarseGrainedScheduler@ip-10-210-13-51.ec2.internal:35863 20/04/07 05:04:17 INFO CoarseGrainedExecutorBackend:成功 向驱动程序注册 20/04/07 05:04:17 INFO 执行者:开始 主机 ip-10-210-13-51.ec2.internal 20/04/07 05:04:18 上的执行程序 ID 1 INFO Utils: 成功启动服务 端口上的“org.apache.spark.network.netty.NettyBlockTransferService” 34073. 20/04/07 05:04:18 信息 NettyBlockTransferService:在 ip-10-210-13-51.ec2.internal:34073 20/04/07 05:04:18 上创建的服务器信息 块管理器:使用 org.apache.spark.storage.RandomBlockReplicationPolicy 块 复制策略 20/04/07 05:04:18 信息 BlockManagerMaster: 注册 BlockManager BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,无)20/04/07 05:04:18 信息 BlockManagerMaster:注册的BlockManager BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,无)20/04/07 05:04:18 信息 BlockManager:外部 shuffle 服务端口 = 7337 20/04/07 05:04:18 INFO BlockManager:使用本地外部 shuffle 注册执行程序 服务。 20/04/07 05:04:18 INFO TransportClientFactory:成功 创建到 ip-10-210-13-51.ec2.internal/10.210.13.51:7337 的连接 19 毫秒后(0 毫秒花费在引导程序中)20/04/07 05:04:18 信息 BlockManager: 初始化 BlockManager: BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,无)20/04/07 05:04:20 信息 CoarseGrainedExecutorBackend:已分配任务 0 20/04/07 05:04:20 INFO 执行器:在阶段 0.0 (TID 0) 20/04/07 05:04:21 中运行任务 0.0 INFO TorrentBroadcast:开始读取广播变量 0 20/04/07 05:04:21 INFO TransportClientFactory:成功创建连接 17 ms (0 ms) 后到 ip-10-210-13-51.ec2.internal/10.210.13.51:38181 花费在引导程序中)20/04/07 05:04:21 INFO MemoryStore: Block broadcast_0_piece0 以字节形式存储在内存中(估计大小为 39.4 KB, 免费 3.8 GB) 20/04/07 05:04:21 INFO TorrentBroadcast: 阅读 广播变量 0 耗时 504 毫秒 20/04/07 05:04:22 INFO MemoryStore: 块 broadcast_0 作为值存储在内存中(估计大小 130.2 KB, 免费 3.8 GB) 20/04/07 05:04:23 信息 CoarseGrainedExecutorBackend: eagerFSInit:在 s3://does/not/exist 中急切地初始化 FileSystem 5155 毫秒 20/04/07 05:04:25 INFO 执行器:已完成任务 0.0 在阶段 0.0 (TID 0)。 53157 字节结果发送到驱动程序 20/04/07 05:04:25 INFO CoarseGrainedExecutorBackend:已分配任务 2 20/04/07 05:04:25 INFO 执行器:在阶段 0.0 (TID 2) 20/04/07 05:04:25 中运行任务 2.0 INFO 执行者:在阶段 0.0 (TID 2) 中完成了任务 2.0。 53114 字节 结果发送给司机 20/04/07 05:04:25 INFO CoarseGrainedExecutorBackend:已分配任务 3 20/04/07 05:04:25 INFO 执行器:在阶段 0.0 (TID 3) 20/04/07 05:04:25 中运行任务 3.0 错误 CoarseGrainedExecutorBackend:收到信号期限 20/04/07 05:04:25 INFO DiskBlockManager:关闭挂钩调用 20/04/07 05:04:25 INFO ShutdownHookManager:已调用关闭挂钩

【问题讨论】:

【参考方案1】:

你能切换到使用 s3 而不是 s3a。我相信不建议在 EMR 中使用 s3a。另外,您可以在调试中运行您的作业。

sc = spark.sparkContext
sc.setLogLevel('DEBUG') 

阅读以下有关 s3a 的文档 https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html

【讨论】:

我确实尝试使用 s3 而不是 s3a 运行它,但遇到了同样的问题。我将尝试 DEBUG 方法,看看我得到了什么。我可以在哪里访问调试日志? 如果您正在执行 spark 提交,它将基于默认 log4j 设置在您的控制台上可用【参考方案2】:

所以在对 Debugs 进行故障排除后,我得出的结论是确实是内存问题。 我使用的集群在加载了几天的数据后内存不足。每天大约有 20 亿行。 所以我尝试每天解析我的脚本,它似乎能够处理。 然而,当处理一些数据稍大(70 亿行)的日子时,它给了我一个

executor.CoarseGrainedExecutorBackend:收到信号期限

错误。 Jumpman 的这个post 通过简单地扩展spark.dynamicAllocation.executorIdleTimeout 值解决了这个问题

非常感谢@Emerson 和@Jumpman!

【讨论】:

以上是关于从 AED S3 存储桶读取时警告导致失败的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 中的 S3 存储桶读取 JSON 时没有“Access-Control-Allow-Origin”错误

在 emr 中使用 spark 从 S3 读取 avro 失败

Pyspark 从 S3 存储桶的子目录中读取所有 JSON 文件

scala- 从 S3 存储桶读取文件

通过火花数据框读取 S3 文件时,胶水书签不起作用

从 S3 存储桶中读取大量 CSV 文件