我一直在尝试Cascading,但是我看不出相对于经典的map reduce方法来编写作业有什么优势。

Map Reduce的工作给了我更多的自由,而Cascading似乎带来了很多障碍。

对于使简单的事情变得简单而复杂的事情,可能会做得很好。

有什么我想念的吗?与经典方法相比,层叠有明显的优势吗?

在哪种情况下,我应该选择层叠而不是经典方法?有人使用它感到高兴吗?

最佳答案

我已经使用Cascading几年了。我发现它非常有帮助。最终,这与生产力的提高有关。与纯Java代码相比,我在创建和维护M / R作业方面效率更高。原因如下:

  • 已经为您编写了许多用于开始工作的样板代码。
  • 可组合性。通常,将代码编写为缝合在一起的组件(操作)以执行一些更复杂的处理时,代码更易于阅读和重用。
  • 我发现单元测试更加容易。级联包中有一些示例,演示了如何编写简单的单元测试以直接测试流的输出。
  • Tap(源和接收器)范例可轻松更改作业的输入和输出,因此,例如,您可以从输出到STDOUT开始进行开发和调试,然后切换到用于批处理作业的HDFS序列文件,然后切换到HBase接头以进行伪实时更新。
  • 编写级联作业的另一个巨大优势是,您实际上在编写更多的工厂来创建作业。当您需要动态构建某些东西时(这是一项工作的结果控制着您创建和运行的后续工作),这可能是一个巨大的优势。或者,在另一种情况下,我需要为6个二进制变量的每种组合创建一个作业。这是64个非常相似的工作。仅仅使用hadoop map reduce类会很麻烦。

  • 尽管可以将许多预先构建的组件组合在一起,但是如果看起来处理逻辑的特定部分看起来像只用纯Java编写就容易了,则始终可以创建一个Cascading函数来包装它。这使您可以享受Cascading的好处,但是可以将非常自定义的操作编写为直接的Java函数(实现Cascading接口(interface))。

    09-26 08:46