暂时挂起hadoop节点-后台hadoop群集

暂时挂起hadoop节点-后台hadoop群集,hadoop,parallel-processing,cluster-computing,preemption,yarn,Hadoop,Parallel Processing,Cluster Computing,Preemption,Yarn,我想知道是否有可能安装一个“后台”hadoop集群。我的意思是,毕竟它意味着能够处理节点不可用或有时速度慢的问题 所以假设某所大学有一个计算机实验室,比如说,100个盒子,都有高档桌面硬件,千兆以太网,甚至可能有相同的软件安装。Linux在这里也非常流行 然而,这100个盒子当然是学生的桌面系统。有时实验室将满,但有时实验室将空。用户数据主要存储在中央存储器(比如NFS)上,因此本地磁盘没有被大量使用 对我来说,在空闲时间将系统用作Hadoop集群似乎是个好主意。最简单的设置当然是让cron作业

我想知道是否有可能安装一个“后台”hadoop集群。我的意思是,毕竟它意味着能够处理节点不可用或有时速度慢的问题

所以假设某所大学有一个计算机实验室,比如说,100个盒子,都有高档桌面硬件,千兆以太网,甚至可能有相同的软件安装。Linux在这里也非常流行

然而,这100个盒子当然是学生的桌面系统。有时实验室将满,但有时实验室将空。用户数据主要存储在中央存储器(比如NFS)上,因此本地磁盘没有被大量使用

对我来说,在空闲时间将系统用作Hadoop集群似乎是个好主意。最简单的设置当然是让cron作业在晚上启动集群,然后在早上关闭。然而,在白天,许多计算机也将被闲置

但是,当任何用户登录时,节点被关闭,Hadoop会如何反应?是否可以在hadoop中轻松地“暂停”(抢占!)节点,并在需要时将其移动到交换位置?理想情况下,我们会给Hadoop一个在暂停任务之前转移计算的机会(同时释放内存)。如何进行这样的设置?有没有一种方法可以向Hadoop发出一个节点将被挂起的信号

据我所知,不应该停止datanodes,而且可能需要增加复制以拥有3个以上的拷贝。使用纱线还可能存在一个问题,即通过将任务跟踪器移动到任意节点,它可能在某个点被挂起。但也许可以控制有一小部分节点始终处于打开状态,并运行任务跟踪器


只停止
任务跟踪器
或发送
SIGSTOP
(然后使用
SIGCONT
继续)是否合适?第一种可能会让hadoop有机会做出反应,第二种可能会在用户很快注销时继续进行(因为作业可以继续进行)。纱线怎么样?

首先,hadoop不支持“抢占”,你是如何描述它的。 Hadoop只需重新启动任务,若它检测到任务跟踪器死机。 所以,在您的情况下,当用户登录到主机时,一些脚本会简单地终止 tasktracker和jobtracker将标记所有已运行的映射器/还原器 在已终止的tasktracker上,as失败。在此之后,将重新安排此任务 在不同的节点上

当然,这种情况并非免费的。通过设计,映射器和还原器 将所有中间数据保留在本地主机上。此外,还原程序获取映射程序 数据直接来自TaskTracker,其中执行了映射程序。那么,什么时候 tasktracker将被杀死,所有这些数据都将丢失。万一 对于地图绘制者来说,这不是一个大问题,地图绘制者通常在相对独立的平台上工作 少量数据(千兆字节?),但reducer将遭受更大的损失。 Reducer运行shuffle,这在网络带宽和性能方面非常昂贵 中央处理器。如果tasktracker运行某些减速机,则重新启动此减速机意味着, 所有数据应重新下载到新主机上。 我记得,那个求职者并没有立即看到 tasktracker已经死了。因此,终止的任务不应该立即重新启动

如果您的工作负载很轻,那么数据节点可以永远存在,不要让它们离线, 当用户登录时。Datanode占用少量内存(256M应该足够了 如果数据量很小)并且工作量很轻,不要吃太多 cpu和磁盘io的配置

总之,您可以设置这样的配置,但不要依赖于
在适度的工作负载上执行良好且可预测的作业。

我想,100个节点90%的时间可用,这仍然意味着它会带来一些额外的好处。但显然,这并不是保证响应时间的完美设置。但也许是为了让学生在不购买大量额外硬件的情况下进行实验。对于学生操场来说,这种设置是可行的。我试图描述,如果杀死tasktracker会发生什么。我建议不要为NFS操心,只是不要停止datanodes。