当aws emr核心节点在hadoop环境中死亡时会发生什么

时间:2017-10-30 10:29:13

标签: hadoop apache-spark amazon-emr

我有一个包含1个主节点和2个核心节点的EMR集群。这会自动将复制因子设置为1.所以我从文档中读到的这意味着当文件在节点上传时,它只存储在该节点上。在我的情况下,我有一个火花应用程序运行良好,直到其中一个核心节点因某些原因而死亡,我仍在调查。当该节点死亡时,我的应用程序也会因以下错误而死亡:

  

诊断:无法获得阻止:BP-1346795555-172.31.18.53-1503395276403:blk_1073762933_22444 file = / user / hadoop / .sparkStaging / application_1503580640490_3075 / __ spark_libs__1454218958107463026.zip

所以我用以下方式解释这个:Spark libs位于死亡的节点上,当复制因子为1时,它们没有存储在别处。这会导致文件损坏。我在推理中是否正确,还是对发生的事情有另一种解释?如果我能纠正什么是避免这种情况的最佳方法?最容易想到的是拥有更多核心节点并增加复制因子,这将导致将数据放在更多节点上。

2 个答案:

答案 0 :(得分:1)

Spark的临时目录不在分布式文件系统上,根本不会复制。这只是机器的本地存储。如果执行程序丢失,它也会丢失,但在设计良好的应用程序中,它不会导致永久性数据丢失。

答案 1 :(得分:0)

你大多是对的。

如果一个节点死亡,那么您所能做的就是添加3个以上的节点,因此复制因子将为2 手动将 dfs.replication 设置为2 ,即使您有2个节点,您的数据也会被复制2次。

还要注意,由于内存不足以及块无法使用的原因,可能会发生此类错误。当Linux内存不足时,它会运行一个名为OOM Killer的东西,它有时会杀死重要的进程。为防止这种情况发生,您可以:

  1. 在具有更多内存的实例上运行
  2. 调整群集配置以在每个节点上运行更少的任务
  3. 修改您的应用程序以更有效地使用内存并避免随机播放