我想知道是否可以安装“后台”hadoop集群。我的意思是,毕竟它意味着能够处理节点不可用或有时缓慢。
所以假设一些大学有一个计算机实验室。比方说,100个盒子,都有高档桌面硬件,千兆以太网,甚至可能是相同的软件安装。 Linux在这里也很受欢迎。
然而,这100个盒子当然是学生的桌面系统。有时候实验室会满员,但实验室也会空着。用户数据主要存储在中央存储 - 比如NFS - 因此本地磁盘不会被大量使用。
对我来说,在空闲时间将系统用作Hadoop群集听起来是个好主意。最简单的设置当然是让cron作业在晚上启动集群,并在早上关闭。但是,白天也会使用许多计算机。
但是,Hadoop将如何应对任何用户登录时节点被关闭?是否可以轻松地“暂停”(抢占!)hadoop中的节点,并在需要时将其移动到交换?理想情况下,我们会让Hadoop有机会在暂停任务之前移开计算(也是为了释放内存)。怎么会做这样的设置?有没有办法告诉Hadoop节点将被挂起?
据我所知,不应该停止datanodes,也许复制需要增加到3个以上的副本。对于YARN,可能还存在一个问题,即通过将任务跟踪器移动到任意节点,它可能是在某个时刻被挂起的节点。但也许可以控制一小部分节点始终打开,这将运行任务跟踪器。
仅stop
tasktracker
或发送SIGSTOP
(然后使用SIGCONT
继续)是否合适?第一个可能会让hadoop有机会做出反应,第二个会在用户很快退出时继续更快(因为工作可以继续)。 YARN怎么样?
答案 0 :(得分:0)
首先,hadoop不支持'preempt',你是如何形容的。 Hadoop只是重启任务,如果它检测到,那个任务跟踪器已经死了。 所以在你的情况下,当用户登录到主机时,一些脚本就会杀死 tasktracker和jobtracker将标记所有已运行的映射器/缩减器 在被杀死的tasktracker上,为失败。之后,这些任务将被重新安排 在不同的节点上。
当然这种情况不是免费的。通过设计,映射器和减速器 将所有中间数据保留在本地主机上。此外,reducer获取映射器 数据直接来自任务执行器,执行映射器。所以,什么时候 tasktracker将被杀死,所有这些数据都将丢失。以防万一 对于映射器来说,这不是一个大问题,映射器通常可以相对工作 少量数据(千兆字节?),但减速器将遭受更大的损失。 Reducer运行shuffle,这在网络带宽方面是昂贵的 中央处理器。如果tasktracker运行一些减速器,重启此减速器意味着, 应将所有数据再次重载到新主机上。 我记得,那个职业追踪者并没有立即看到 tasktracker已经死了。因此,被杀死的任务不应该立即重启。
如果您的工作量很轻,那么datanode可以永久存在,不要让它们脱机, 用户登录时Datanode占用少量内存(256M应该足够了 在少量数据的情况下)如果你的工作量很轻,不要吃太多 cpu和disk io。
作为结论,您可以设置此类配置,但不要依赖 在适度的工作负载上执行良好且可预测的作业。