说明

通过这三者之间的搭配,可以更好的组织程序,特别是应对长周期运行的,需要弹性变化和复用的场景。

内容

1 Tips

  1. shell命令可以执行python程序。python xxx.py
  2. python可以执行shell命令。os.system('python xxx.py')
  3. 紧耦合与松耦合。规则集(容器)之内是紧耦合的,逻辑整合在对象之内;规则集之间是松耦合的。
  4. 通过argparse, 规则集可以通过简单的参数启动。【可配合遗传算法】
  5. 使用python的apscheduler执行定时任务比cron方便(不用去管权限什么的)

2 规则集(容器)的约定

  • 1 数据有两个文件夹:input / output
  • 1 input:用于存放待处理的左边数据
  • 2 output:用于存放处理后的右边数据
  • 2 元数据有两个文件夹:log / err
  • 1 log: 存放运行时的日志,用于分析流程性能,连通性等
  • 2 err: 存放失败时的数据,用于调试

我怎么把一个python文件要spark集群帮我执行_数据

每个容器的四个部件下面(I/O/L/E)都有一个二级目录,可以区分不同项目制程的内容。

3 主容器

主容器是可以执行宿主机docker命令的容器,通过命令启停容器。

主容器负责组织和调度各容器,完成某个特殊的业务需求。例如:从A库取数,对数据进行清洗,再对数据预处理,再对数据进行预测,再将结果回传这样的操作。在程序上,主容器就是FuncChain

主容器有一个比较重要的工作:为每部分工作建立文件夹,并为相应的文件夹启动并挂载容器,整个过程以数据结果的存放为导向。文件夹的命名按照一定规范用下滑线连接:

  • 1 项目名称 project
  • 2 制程编号 schema
  • 3 流程名称 process
  • 4 流程编号 0,1,2,3
  • 5 分片编号 shard,0,1,2,3

例:

hello_md5xxxxxxxxxxxx_clean_0000_shard_0000

其中制程编号是包含了一系列参数设定的md5码,蕴含了最复杂的变化信息。shard是为了可以进行并发而做的编号。主容器要进行容器启动时会进行规划,如果在执行过程中发生了变化,那么主容器会在「da」时刻更新配置并重启容器。

4 容器的持久运行

4.1 While True

这可能是最土的持久运行了,但这样总归可以避免内外存来回倒数据浪费时间,例如模型数据的初始化。

4.2 使用SimpleAPI

使用Flask启动一个简单接口服务。

4.3 触发运行

服务主体本身是持续运行的,因此真正的入口是一个触发器。

触发可以是一次性的,也可以通过循环的任务无限运行。

5 数据的动态对齐(处理或删除)

对于每个p来说,需要不定期的维护自己的I/O。既要完成新的任务,也要清除无用的任务。以数据hash加上纳秒级时间戳构成任务的唯一标志,作为数据集合元素。
输入集合,或者说左边集合记为Si;输出集合,或者说右边集合记为So。

  • 1 待处理元素集合。 Si - So
  • 2 带删除元素集合。 So - Si

6 效果与效率

在执行一个任务的时候,我们通常会有两方面的想法:

  • 1 是否能通过更好的参数,达到更好的结果
  • 2 是否可以利用更多的资源,更快的完成任务

遗传算法可以进行以上两方面的优化。