如何解决在aws emr上运行配置单元查询时设备上没有剩余空间的问题

2vuwiymt  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(361)

我有aws-emr安装程序,可以运行配置单元查询。到目前为止,硬件设置如下。
一个主设备-m3.xlarge 8 vcpu、15 gib内存、80 gb ssd存储ebsstorage:none
15核节点-m3.xlarge 8 vcpu、15 gib内存、80 gb ssd存储ebsstorage:none
我的查询处理大约5亿条记录,它们成为内部配置单元表的一部分。我对这些内部表执行合并查询。
现在我知道了一个解决方案,如果我增加核心节点的数量,问题就会消失。但我需要帮助理解为什么会发生这个错误,以及如何调试和解决它。我没有任何参考资料可供参考。
这是stacktrace。

For Reason - org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Map 1, vertexId=vertex_1507712059631_0734_1_01, diagnostics=[Task failed, taskId=task_1507712059631_0734_1_01_000066, diagnostics=[TaskAttempt 0 failed, info=[Container container_1507712059631_0734_01_000056 finished with diagnostics set to [Container failed, exitCode=-100. Container released on a *lost* node]], TaskAttempt 1 failed, info=[Container container_1507712059631_0734_01_000038 finished with diagnostics set to [Container failed, exitCode=-100. Container released on a *lost* node]], TaskAttempt 2 failed, info=[Error: Encountered an FSError while executing task: attempt_1507712059631_0734_1_01_000066_2:org.apache.hadoop.fs.FSError: java.io.IOException: No space left on device
at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.write(RawLocalFileSystem.java:253)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:60)
at java.io.DataOutputStream.write(DataOutputStream.java:107)
at org.apache.tez.runtime.library.common.sort.impl.IFileOutputStream.write(IFileOutputStream.java:120)
at
xpszyzbs

xpszyzbs1#

带有mapreduce引擎的配置单元将中间结果存储在磁盘上。如果中间结果大小超过了可用磁盘空间(这在连接操作期间很容易发生),那么这将导致一个错误。
您可以改用sparksql,它会在中执行之前优化查询。hive命令可以重复使用。
https://aws.amazon.com/blogs/big-data/using-spark-sql-for-etl/
作为前端,您可以使用齐柏林飞艇或jupyter笔记本,或者用java或scala编写一些小的spark作业。

相关问题