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

dzjeubhm  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(295)

我想知道是否有可能安装一个“后台”hadoop集群。我的意思是,毕竟它意味着能够处理节点不可用或有时速度慢。
假设某所大学有一个计算机实验室,比如说,100个盒子,都有高档的桌面硬件,千兆以太网,甚至可能是相同的软件安装。linux在这里也很流行。
然而,这100个盒子当然是学生的桌面系统。有的时候实验室会满,也有的时候实验室会空。用户数据主要存储在中央存储器(比如nfs)上,因此本地磁盘没有被大量使用。
在我看来,在空闲时间将系统用作hadoop集群是个好主意。最简单的设置当然是让cron作业在晚上启动集群,然后在早上关闭。不过,白天也会有很多电脑闲置。
但是,当任何用户登录时,hadoop会对节点关闭做出什么React?是否可以轻松地“暂停”(抢先!)hadoop中的一个节点,并在需要时将其移动到交换位置?理想情况下,我们会给hadoop一个机会,在挂起任务之前转移计算(同时释放内存)。怎么做这样的设置?有没有办法向hadoop发出一个节点将被挂起的信号?
据我所知,datanodes不应该停止,也许复制需要增加到3个以上。使用yarn还可能存在一个问题,即通过将任务跟踪器移动到任意节点,它可能在某个点被挂起。但也许可以控制有一小部分节点始终处于打开状态,并运行任务跟踪器。
只是 stop 这个 tasktracker 或发送 SIGSTOP (然后继续 SIGCONT )? 第一种可能会让hadoop有机会做出React,第二种可能会在用户很快注销时继续进行(因为作业可以继续)。Yarn怎么样?

yqyhoc1h

yqyhoc1h1#

首先,hadoop不支持“抢占”,正如您所描述的那样。hadoop只是简单地重新启动任务,如果它检测到任务跟踪器死机的话。所以在您的情况下,当用户登录到主机时,一些脚本只是终止tasktracker,而jobtracker会将在终止的tasktracker上运行的所有Map器/还原器标记为失败。之后,这些任务将在不同的节点上重新安排。
当然,这样的场景不是免费的。通过设计,Map器和还原器将所有中间数据保存在本地主机上。此外,reducer直接从tasktrackers获取mappers数据,在tasktrackers中执行mappers。所以,当tasktracker被杀死时,所有的数据都会丢失。对于mapper来说,这并不是一个大问题,mapper通常处理相对较少的数据量(千兆字节?),但是reducer会受到更大的影响。reducer运行shuffle,这在网络带宽和cpu方面非常昂贵。如果tasktracker运行某些reducer,则重新启动此reducer意味着所有数据都应重新下载到新主机上。我记得,那个工作追踪者不会马上看到,那个工作追踪者已经死了。因此,终止的任务不应该立即重新启动。
如果您的工作负载很轻,那么datanodes可以永远存在,在用户登录时不要将其脱机。datanode消耗的内存量很小(256m应该足够,以防数据量很小),如果工作负载很轻,就不要消耗太多cpu和磁盘io。
最后,您可以设置这样的配置,但不要依赖于在缓和的工作负载上良好且可预测的作业执行。

相关问题