本文是对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构建了自己的解决方案,如OrientDB、Vert.X、MuleSoft、WSO2或者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