“make”就像调度任务序列一样

时间:2009-06-24 15:13:38

标签: makefile batch-processing

我工作的公司有很多“复杂”的基于文件的批处理过程,文件序列如下:

  • 取文件A
  • 获取文件B
  • 将文件A中的字段连接到文件B以生成文件C
  • 在文件C上运行一些启发式方法以生成文件D
  • 将文件D上传到服务器X
  • 根据文件D和A构建报告并将其邮寄至user.name@example.com

每个步骤可能需要花费数小时才能运行(文件可能包含数十亿行数据)。同时,它与GNU Makefile融合在一起,其中的部分如下:

fileC:fileD     run-analysis $ ^> $ @

Makefile对于对步骤之间的依赖关系进行建模非常有用,并且允许在某个步骤之后重复所有内容(如果步骤出现问题,或者启发式更改等等)。

使用Makefiles总是对我不好,因为它们用于构建软件,而不是运行批处理。此外,Makefile不提供任何形式的测试框架。

我的问题是,如何协调像这些大型序列的大型操作?

3 个答案:

答案 0 :(得分:6)

Makefile可用于building software 但是,它们并不局限于那种活动。

Makefiles can help sequence many things
哪个includes test frameworks

您是否使用过基于Makefile的构建,测试,安装顺序?
tools to make Makefiles

以下是一些用途,

stackoverflow中的其他引用,

答案 1 :(得分:4)

Makefiles实际上非常适合这类事情并且被广泛使用。它们可以用于涉及依赖性跟踪的任何事情(我听说过关于作为makefile实现的专家系统的轶事)。 Gnu make可以并行执行多个作业。

您不应该对makefile感兴趣,因为替代方案是企业调度工具,例如Control-M。这些工具是:

  • 更复杂,更复杂

  • 非常贵

  • 相当不透明,比makefile更难测试

  • 政治上难以在本地计算机上进行设置,因此您可以对其进行测试。

坚持使用makefile,除非你有非常的理由不这样做。如果您拥有数百或数千个异构系统的大型安装,企业系统管理工具将是一个胜利。除非你按照这种规模进行操作,否则有充分的理由不使用那种工具。

反对高端“企业”系统的主要论点是,推出这种类型的基础设施往往会使一些内部的圣殿能够掌握如何运行这些“企业”系统的神圣知识。这个过程在管理文献中被称为“帝国建设”。受到挑战时,帝国建设者可以通过暗示他们拥有特殊知识并且没有其他人有资格对他们的“企业”系统做任何事情来轻松地对科学进行盲目管理,而这些系统对于凡人理解来说太复杂了。

除非您熟悉工具,否则“企业架构”官僚机构可能很难争论。 Makefile是熟悉的,每个人的工具。你可以在平等的基础上争论makefile。

坚持使用makefile。它让混蛋诚实。

答案 2 :(得分:0)

文件中的数据是否超出了文件结构?如果文件中的数据确实结构合理,也许是时候开始考虑新的数据源了。

我感觉到,用数据库中结构良好的数据替换文件A和B不是一种选择。怎么样:

  1. 将结构化数据从文件A加载并将文件B加载到一系列关系数据库表中。
  2. 从表中执行连接以在另一个表(甚至内存)中创建数据。
  3. 运行所需的启发式方法
  4. 从结果数据中创建输出文件D.
  5. 根据结果和初始数据构建报告。
  6. 步骤1 + 4仍然很慢,但我打赌你可以通过使用更有效的数据结构进行实际处理来加快整个过程。

    使用数据库的乐趣在于,在编写连接/处理例程时,您可以使用更多编程选项(选择您喜欢的语言)。您无需专门依赖make文件。