代码之家  ›  专栏  ›  技术社区  ›  Fallenreaper

尝试跨集群分布数据处理,然后将其聚合到master中

  •  0
  • Fallenreaper  · 技术社区  · 4 年前

    我对自己说,既然这是一个有50个线程的简单Python应用程序,我如何才能创建一个集群来分发更多的数据处理?例如:让每个工作节点处理主节点给它的一个子集。听起来很简单,只需将主应用程序切片生成的数据集,然后通过负载平衡将其推送到工作人员。

    但是我如何得到结果呢?我想要所有的结果(输出.csv在本例中)并将它们返回到主节点并合并它们以创建1个主节点_输出.csv

    现在,我有一个简单的文件结构:

    app/
      __init__.py (everything is in this file)
      dataset.xlxs
      out.csv
    

    我想创建一个docker映像,这样我就可以把这个应用程序移到映像中,更新/升级,安装python3(如果还没有),然后运行这个应用程序。

    我开始深入研究处理过程,并意识到可能有一些内置的方法来处理这个问题。创建一个flask应用程序来处理摄取,然后在master上创建一个flask应用程序在完成时接受文件,等等。。。。但是主人需要了解所有的工人等等。

    • 主节点可以访问包含我需要处理的文件的卷。

    所以集群会启动,当准备就绪时会运行所有的东西,然后在最后去皮。由于他们希望集群可能是分布式的,我不确定这将如何工作,尽管处理有IP地址限制。这似乎在本地集群上不起作用,因为被用来引用的机器在足够多的请求之后会碰到cloudflare(或类似的)墙,所以我试图想出一个独特的IP解决方案。

    我有一个架构的想法,但我不确定是否应该为此创建一个dockerfile,然后找出kube可以为我处理所有这些问题的方法。尽管我认为在kube配置文件中,我们可以将远程aws实例登录凭据放在一起,这样它就可以启动所有远程服务器。

    虽然我一直在做一些与蜂群有关的事情,但库贝似乎是真正工作的地方,因为蜂群似乎更适合做其他事情。

    考虑到这些信息,这个概念让我想起的不是负载平衡,而是像Kubeflow一样,在Kubeflow中,您可以专门为ML创建一个云,但是它不是ML,而是任何分布式处理。

    0 回复  |  直到 4 年前
        1
  •  1
  •   David Maze    4 年前

    这个问题中有趣的问题与多克无关,让我们暂时把它放在一边。

    1. 如果任务需要的话,您将把输入保存在哪里以便任务可以读取它?
    2. 你如何把工作单位转嫁给工人?如果工人失败了怎么办?
    3. 如何传达输出?你把它们放在哪里?它们是否需要与输入的顺序相同?

    这里有用的工具是工作队列; RabbitMQ

    对于某些规模的问题,一种简单的方法是说原始输入和最终输出是单个系统上的单个文件。您可以将其分解为足够小的部分,使它们能够容纳在消息有效负载中,并且响应也可以容纳消息有效负载。运行一个进程来读取输入并填充工作队列;运行一些worker,然后运行一个进程来读回输出。

    Input handler      +------+ --> worker --> +------+
    dataset.xlsx  ---> +------+ --> worker --> +------+ --> Output handler
                       +------+ --> worker --> +------+     out.csv
                       +  ... +      ...       + ...  +
    

    如果您使用Python作为实现语言,也要考虑 Celery 作为一个管理框架。

    要运行这个,您需要运行三个独立的进程。

    export RABBITMQ_HOST=localhost RABBITMQ_PORT=5672
    ./input_handler.py dataset.xlsx
    ./output_handler.py out.csv
    ./worker.py
    

    Docker或Kubernetes会如何融入这张照片?需要注意的是,这两种技术都不能提供类似于工作队列的功能,而且共享文件系统可能是不稳定的。尽管如此,我在上面提到了三个不同的进程,您可以将它们打包成三个Docker映像,然后将它们部署到Kubernetes中。我说过您不必只运行一个worker,Kubernetes部署将允许您运行5个、10个或50个相同的worker副本,RabbitMQ将负责确保它们都有工作要做。

    推荐文章