Hazelcast 引入 MapReduce API

  • Michael Hausenblas
  • 马德奎

2014 年 2 月 19 日

话题:DevOps语言 & 开发架构

本文是对 Hazelcast 公司高级软件工程师Christoph Engelbert的采访。

InfoQ:您能向我们简单地介绍一下 Hazelcast 是什么以及您公司的商业模式吗?

Christoph:Hazelcast 是一个遵循 Apache License 2 许可的开源内存数据网格解决方案。它以一种分布式方式实现了许多典型的 Java API,如 Map、List、Set、Queue、Lock、ExecutorService 等,还针对分区的集群环境增加了功能,如分布式查询(Predicate)或者在特定节点上运行 Runnable/Callable。

此外,Hazelcast 公司负责该开源项目的开发、分发和支持。我们会提供商业支持、培训以及为用户在关键任务环境里所需要的一切提供帮助。而且,我们会提供商业扩展,包括集群监控和管理解决方案、更高的性能可预测性、集群安全和其它语言的本地 API 客户端,如 C++ 和 C#。虽然 Hazelcast 完全是用 Java 编写的,但我们通过兼容 Memcached 的 API 以及 RESTful 接口提供多语言支持。

InfoQ:Hazelcast 可以用在哪些应用、领域或者开源项目中,以及开发人员通常如何使用它?

Christoph:Hazelcast 当前在金融领域发展迅猛,用于低延迟交易应用、风险、金融交易和其它类似的应用。大型电信公司、网络设备制造商和云提供商也在用它。我们还看到,它开始应用在诸如互联网和移动支付、游戏和赌博、旅行和餐饮以及电子商务等领域。大部分应用场景是缓存或者应用扩展。此外,许多公司和项目都基于 Hazelcast 构建了自己的解决方案,如OrientDBVert.XMuleSoftWSO2或者Apache Shiro

InfoQ:最近,你们发布了MapReduce API,据我了解,您是主要开发人员。您做这个的动机是什么?

Christoph:开始的时候,我将 CastMapR 当成一个研究项目。我想研究下新的 Hazelcast 3 API,而且由于那会我正致力于另一个针对 MapReduce 的 API(由于我正在使用 JBoss 集群),在我看来,它是个不错的选择。然后,当我在 2013 年底加入 Hazelcast 的时候,我们开始讨论使它成为 Hazelcast 主要发行版的一部分。

InfoQ:这样说,是您将 CastMapR 纳入了 Hazelcast?

Christoph:差不多,是的。最初的想法只是将基本代码移到核心发行版,但随着时间推移,我们觉得想要在反应式编程方面更进一步,因此我重写了大部分内部构件。此外,关于公开的 API,我们讨论了很多。CastMapR 主要是受 Infinispan 的 API 启发,因为我恰恰喜欢它。我们商定,新的 MapReduce API 采用一种更像 Hadoop 的 API(与最初的Google 论文的描述更为相近),但我坚持使用 DSL 方式的作业定义。最终,旧实现中只有很少的部分得到重用。新实现在设计上完全并行。Mapping 和 Reducing 阶段完全并行,而且整个系统以流的方式工作(基于分块处理)。因此,旧实现目前已经停用,所有的精力都投入到 Hazelcast 内部的 MapReduce API。

InfoQ:喔,那很棒。现在,Hazelcast MapReduce API 的典型(预期)应用场景是什么?话说它与MongoDB 的 MapReduce API或者 Hadoop 相比如何?

Christoph:用户想要使用 Hazelcast MapReduce API 的典型场景是分布式计算,在这种情况下,EntryProcessor并不合适。不管他是想要进行数据转换,还是想要使用多数据源。它也非常适合运行时间长的操作,由于当前所有的系统都直接工作在分区的线程上,所以用户不必为数据更新做显式锁定。在接下来的某个版本中,我会增加连续的 map 和 reduce 支持,那样用户就可以运行完全流分析。在这一点上,Twitter 永远是最好的例子,它实时处理微博收集信息,如转发、收藏和其它许多统计信息。它也可以用于风险管理和分析。

它与 Hadoop 的最大不同是在内存中和实时处理。Hadoop 有不同的阶段,每个阶段都是一个接一个的执行,而在 Hazelcast 中,由于内部采用并行设计,mapping 和 reducing 在所有节点上都是并行运行,所以用户可以获得全部性能。阶段本身与 Hadoop 中的非常类似,也有 mapping(和 combining)、shuffling(划分到节点)和 reducing 阶段,但是不像在 Hadoop 里那样分的那么清楚。

与 MongoDB 比较有些困难,因为我从没用过他们的 MapReduce API,但它似乎缺少 Combiner,这对于大型数据集非常有用,不过,我说过我并不了解他们的实现方式。

InfoQ:棒极了,最后一个问题:关于 Hazelcast MapReduce API,您还有什么想与我们的读者分享吗?

Christoph:是的,我有一个个人请求:我希望大家能够试用该 API,并向我们提供尽可能多的反馈。该 API 十分稳定,我对它非常满意。另外,我想了解真实世界的用户体验,以便找到更多需要调整的地方,因为我相信我们可以改善它。

非常感谢您抽出时间来接受我们的采访,Christoph!

查看英文原文:Hazelcast Introduces MapReduce API

DevOps语言 & 开发架构