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

时间:2020-04-06 19:19:50

标签: amazon-web-services amazon-s3 pyspark amazon-emr

我正在两个表之间进行简单的内部联接,但是我不断收到如下所示的警告。我在其他帖子中看到可以忽略该警告,但是我的工作以失败而告终,并且没有进展。 这些表非常大(120亿行),但我仅将一个表中的三列添加到另一个表中。 当将数据集减少到几百万行并在Amazon Sagemaker Jupyter笔记本中运行脚本时。它工作正常。但是,当我在整个数据集的EMR群集上运行它时,它会失败。我什至运行了似乎无法运行的特定快照分区,该分区在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] 2006年4月20日15:51:58警告 S3AbortableInputStream:并非从 S3ObjectInputStream,中止HTTP连接。这可能是一个错误 并可能导致行为不佳。仅请求您的字节 使用后需要通过远程GET或耗尽输入流。 2006年4月20日 15:51:58 WARN S3AbortableInputStream:并非从 S3ObjectInputStream,中止HTTP连接。这可能是一个错误 并可能导致行为不佳。仅请求您的字节 使用后需要通过远程GET或耗尽输入流。 2006年4月20日 15:52:03 INFO CoarseGrainedExecutor后端:驱动程序命令 shutdown 20/04/06 15:52:03 INFO MemoryStore:MemoryStore已清除 20/04/06 15:52:03 INFO BlockManager:BlockManager停止了20/04/06 15:52:03 INFO ShutdownHookManager:名为Shutdown的钩子

这是我的代码:

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没有太多输出

Job Stage Job Executions

这是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 INFO CoarseGrainedExecutorBackend:启动守护进程,进程名称: 5653 @ ip-10-210-13-51 20/04/07 05:04:13 INFO SignalUtils:已注册 TERM的信号处理程序2007年4月20日05:04:13 INFO SignalUtils:已注册 HUP的信号处理程序20/04/07 05:04:13 INFO SignalUtils:已注册 INT 20/04/07 05:04:15 INFO的信号处理程序 将视图ACL更改为:纱线,纱线,罩子20/04/07 05:04:15 INFO SecurityManager:将修改ACL更改为:yarn,hadoop 07/04/20 05:04:15 INFO SecurityManager:将视图ACL组更改为:20/04/07 05:04:15 INFO SecurityManager:将修改ACL组更改为: 20/04/07 05:04:15 INFO SecurityManager:SecurityManager: 身份验证已禁用; ui acls已禁用;有视野的用户 权限:Set(yarn,hadoop);具有查看权限的组:Set(); 具有修改权限的用户:Set(yarn,hadoop);修改组 权限:Set()07/04/20 05:04:15 INFO TransportClientFactory: 成功建立与 168 ms(0 ms之后)ip-10-210-13-51.ec2.internal / 10.210.13.51:35863 花在引导程序上)20/04/07 05:04:16 INFO SecurityManager:更改 查看acls到:yarn,hadoop 20/04/07 05:04:16 INFO SecurityManager: 将修改ACL更改为:yarn,hadoop 20/04/07 05:04:16 INFO SecurityManager:将视图ACL组更改为:20/04/07 05:04:16 INFO SecurityManager:将修改ACL组更改为:20/04/07 05:04:16 INFO SecurityManager:SecurityManager:身份验证已禁用; UI ACL已停用;具有查看权限的用户:Set(yarn,hadoop);团体 具有查看权限:Set();具有修改权限的用户: 设置(纱线,Hadoop);具有修改权限的组:Set()07/04/20 05:04:16 INFO TransportClientFactory:成功创建连接 20 ms(0 ms)后转至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 INFO CoarseGrainedExecutor后端:连接到驱动程序: spark://CoarseGrainedScheduler@ip-10-210-13-51.ec2.internal:35863 20/04/07 05:04:17 INFO CoarseGrainedExecutor后端:成功 向驱动程序注册了20/04/07 05:04:17 INFO执行程序:正在启动 主机ip-10-210-13-51.ec2.internal上的执行程序ID 1 20/04/07 05:04:18 INFO Utils:成功启动服务 端口上的“ org.apache.spark.network.netty.NettyBlockTransferService” 34073. 20/04/07 05:04:18 INFO NettyBlockTransferService:在ip-10-210-13-51.ec2.internal:34073上创建的服务器20/04/07 05:04:18 INFO BlockManager:使用 块的org.apache.spark.storage.RandomBlockReplicationPolicy 复制策略20/04/07 05:04:18 INFO BlockManagerMaster: 注册BlockManager BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,None)20/04/07 05:04:18 INFO BlockManagerMaster:注册的BlockManager BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,None)20/04/07 05:04:18 INFO BlockManager:外部洗牌服务端口= 7337 20/04/07 05:04:18 INFO BlockManager:使用本地外部随机播放注册执行器 服务。 20/04/07 05:04:18 INFO TransportClientFactory:成功 建立与ip-10-210-13-51.ec2.internal / 10.210.13.51:7337的连接 19 ms之后(0 ms花费在引导程序中)20/04/07 05:04:18 INFO BlockManager:已初始化BlockManager:BlockManagerId(1, ip-10-210-13-51.ec2.internal,34073,None)20/04/07 05:04:20 INFO CoarseGrainedExecutor后端:已分配任务0 20/04/07 05:04:20 INFO执行程序:在阶段0.0中运行任务0.0(TID 0)07/04/07 05:04:21 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:块 broadcast_0_piece0作为字节存储在内存中(估计大小39.4 KB, 免费3.8 GB)20/04/07 05:04:21 INFO Torrent广播:阅读 广播变量0耗时504毫秒20/04/07 05:04:22信息MemoryStore: 阻止广播_0作为值存储在内存中(估计大小为130.2 KB, 免费3.8 GB)20/04/07 05:04:23 INFO CoarseGrainedExecutor后端: eagerFSInit:在s3:// does / not / exist存在的位置初始化文件系统 5155 ms 20/04/07 05:04:25 INFO执行程序:阶段完成任务0.0 0.0(TID 0)。 53157字节结果发送给驱动程序20/04/07 05:04:25 INFO CoarseGrainedExecutor后端:得到分配的任务2 20/04/07 05:04:25 INFO执行程序:在阶段0.0中运行任务2.0(TID 2)20/04/07 05:04:25 INFO执行程序:在阶段0.0(TID 2)中完成任务2.0。 53114字节 结果发送给驱动程序20/04/07 05:04:25 INFO CoarseGrainedExecutor后端:已分配任务3 20/04/07 05:04:25 INFO执行程序:在阶段0.0中运行任务3.0(TID 3)20/04/07 05:04:25 错误CoarseGrainedExecutor后端:收到的信号条款2007年4月4日 05:04:25 INFO DiskBlockManager:关机钩称为20/04/07 05:04:25 INFO ShutdownHookManager:名为Shutdown的钩子

2 个答案:

答案 0 :(得分:0)

可以切换到使用s3而不是s3a。不建议将ilive s3a用于EMR。另外,您可以在调试中运行作业。

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

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

答案 1 :(得分:0)

因此,在对调试进行故障排除之后,我得出的结论是确实是内存问题。 我正在使用的集群在加载了几天的数据后内存不足。每天大约有20亿行。 因此,我尝试按似乎可以处理的每一天来分析脚本。 但是,在处理数据稍大一些(70亿行)的某几天时,它给了我

executor.CoarseGrainedExecutor后端:收到的信号条款

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

所以,谢谢@Emerson和@Jumpman!