0

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

所以假设一些大学有一个计算机实验室。比如说,100 个盒子,全部配备高档桌面硬件、千兆以太网,甚至可能安装相同的软件。Linux 在这里也很受欢迎。

但是,这 100 个盒子当然是为学生准备的桌面系统。有时实验室会满员,但有时实验室会空着。用户数据主要存储在中央存储设备上——比如 NFS——因此本地磁盘的使用并不多。

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

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

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

只发送或发送(然后用 恢复)stop是否合适?第一个可能会让 hadoop 有机会做出反应,第二个会在用户很快注销时继续更快(因为工作可以继续)。纱线怎么样?tasktrackerSIGSTOPSIGCONT

4

1 回答 1

0

首先,hadoop 不支持“抢占”,您如何描述它。Hadoop 只是重新启动任务,如果它检测到,该任务跟踪器已死。因此,在您的情况下,当用户登录主机时,一些脚本会简单地杀死 tasktracker,并且 jobtracker 会将在杀死的 tasktracker 上运行的所有映射器/减速器标记为 FAILED。之后,这些任务将在不同的节点上重新安排。

当然,这样的场景不是免费的。按照设计,映射器和化简器将所有中间数据保存在本地主机上。此外,reducers 直接从执行 mappers 的 tasktrackers 获取 mappers 数据。因此,当 tasktracker 被杀死时,所有这些数据都将丢失。而对于mapper来说,这不是什么大问题,mapper通常工作在相对较小的数据量(千兆字节?)上,但reducer会受到更大的影响。Reducer 运行 shuffle,这在网络带宽和 cpu 方面成本很高。如果 tasktracker 运行了一些 reducer,重启这个 reducer 意味着所有数据都应该重新下载到新主机上。我记得,那个jobtracker没有立即看到,那个tasktracker已经死了。所以,被杀死的任务不应该立即重新启动。

如果你的工作量很轻,数据节点可以永远存在,当用户登录时不要将它们离线。Datanode消耗少量内存(256M应该足够了,以防数据量小),如果你的工作量很轻,不要吃太多的cpu和磁盘io。

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

于 2012-09-27T12:56:04.673 回答