我需要在大约1400万用户上运行DBSCAN集群,每个用户都有1k数据点。每个用户都是不同的集群案例,与其他用户完全不同。基本上,我有很多小的群集任务。
即使在使用python多处理模块并行执行任务的情况下,也无法在单台计算机上运行它,因为IO和群集需要很长时间。
我曾考虑过使用Spark管理集群上的并行运行,但是由于DBSCAN不是在MLlib中实现的,而且我不需要并行运行每个集群任务,因此我认为这可能不适合我的情况,但分别运行每个。每当我尝试使用Spark本机RDD或Dataframe之外的任何东西时,显然都必须将所有数据收集到驱动程序节点。
我的问题是,比每个节点都选择一个用户子集的情况下,在不同的节点上简单地运行许多独立的进程,有一种更聪明的解决方案吗?
谢谢
答案 0 :(得分:0)
由于您的用户都是独立的,因此这显然是一个令人尴尬的并行问题。您想运行同一任务(DBSCAN)数百万次。有很多方法可以实现这一目标。您可能可以使用Spark(尽管我会考虑使用基于Java的工具,例如ELKI,并且您可能需要确保对用户进行并行化处理,而不是在每个用户的内部进行并行化),MapReduce,如果您的网络文件系统具有锁定功能,那么甚至是具有锁定功能的Makefile。 关键因素是数据的组织方式。无论您是可以并行读取所有工作线程,还是将所有数据路由到主节点(错误),都将产生巨大的差异。您需要将数据有效地提供给工作人员,并需要存储聚类结果。