0

我想知道是否可以安装“后台”hadoop集群。我的意思是,毕竟它意味着能够处理有时不可用或缓慢的节点。临时挂起hadoop节点 - 后台hadoop集群

因此,假设某所大学设有计算机实验室。比方说,100个盒子都装有高档桌面硬件,千兆以太网,甚至可能是相同的软件安装。 Linux在这里也很受欢迎。

但是,这100个盒子当然是学生桌面系统。有些时候实验室将会是满的,但也有时候实验室是空的。用户数据大多存储在中央存储设备上 - 比如说NFS--因此本地磁盘使用量不大。

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

但是,Hadoop会如何对例如节点在任何用户登录时关闭?是否可以轻松地“暂停”(抢占!)hadoop中的节点,并在需要时将其移动到交换位置?理想情况下,我们会让Hadoop有机会在暂停任务之前移除计算(也释放内存)。如何做这样的设置?有没有办法向Hadoop发信号通知节点将被暂停?

据我所知,datanodes不应停止,也许复制需要增加到有超过3个副本。使用YARN还可能存在一个问题,即通过将任务跟踪器移动到任意节点,它可能会在某个时间点被暂停。但也许可以控制,有一小部分节点始终处于打开状态,并且会运行任务跟踪器。

只适用于stoptasktracker或发送SIGSTOP(然后用SIGCONT恢复)?第一个可能会让hadoop有机会作出反应,第二个会在用户很快退出时继续更快(因为工作可以继续)。 YARN怎么样?

回答

0

首先,hadoop不支持'抢占',你是如何描述它的。 Hadoop只需重新启动任务(如果检测到),该任务跟踪器就会死机。 因此,在您的情况下,当用户登录到主机时,某些脚本只会杀死 tasktracker,并且jobtracker会将所有在死亡的tasktracker上运行 的mappers/reducers标记为FAILED。之后,这些任务将在不同节点上重新安排 。

当然这种情况并不是免费的。根据设计,映射器和减速器 保留本地主机上的所有中间数据。此外,reducers直接从执行mapper的tasktrackers获取mapper 数据。所以,当 tasktracker将被杀死,所有这些数据将会丢失。并且在映射器的 的情况下,它不是一个大问题,映射器通常在相对较小的数据量(千兆字节?)上工作,但减速器将受到更大的影响。 Reducer运行shuffle,这在网络带宽和cpu中是昂贵的。如果tasktracker运行某个reducer,则重新启动这个reducer意味着,所有数据都应该再次重新加载到新主机上。 我记得,那个jobtracker没有立即看到,那个 tasktracker已经死了。所以,杀死的任务不应该立即重启。

如果你的工作负载很轻,datanodes可以永远活着,不要让它们脱机, 当用户登录时。 Datanode吃少量的内存(如果数据量很小,256M应该足够 ),如果你的工作量很轻,不要吃太多的cpu和磁盘io的 。

作为结论,您可以设置此类配置,但不要依赖 良好且可预测的作业执行在已审核的工作负载上。

+0

那么,90%的时间可用的100个节点仍然意味着它会带来一些额外的好处,我想。但显然这不是保证响应时间的完美设置。但也许可以让学生在没有购买大量额外硬件的情况下进行实验。 –

+0

在学生操场的情况下,这种设置将起作用。我试图描述在杀掉tasktracker的情况下会发生什么。我建议不要打扰NFS,只是不要停止datanode。 – octo