快速的Hadoop分析(Cloudera Impala vs Spark/Shark vs Apache Drill)

43
我希望你能为我翻译一下这段话。需要进行“准实时”的数据分析(类似于OLAP),使用HDFS中的数据。我的研究表明,相比Apache Hive,这三个提到的框架都有显著的性能提升。是否有人对其中任意一个框架有实际经验?不仅涉及性能,还包括稳定性方面的考虑。
2个回答

60
比较Hive和Impala或Spark或Drill有时对我来说听起来不合适。开发Hive和这些工具的目标是不同的。Hive从来没有为实时、基于内存的处理而开发,并且基于MapReduce。它是为离线批处理等类型的长时间运行数据密集型操作而构建的,最适合处理非常大的数据集上的联接等操作。
另一方面,这些工具是针对实时性开发的。当您需要查询不是非常庞大并且可以放入内存中的数据的实时性时,请选择使用它们。我并不是说您不能使用这些工具在您的大数据上运行查询,但如果您正在对PB级别的数据运行实时查询,则会达到极限,我的想法是。
很多时候,您可能已经看到(或读到)某个公司拥有数PB的数据,并且他们成功地满足了客户的实时需求。但实际上,这些公司大部分时间并不查询他们的全部数据。因此,重要的是适当的规划,“何时使用什么”。我希望您能理解我的意思。
回到您的实际问题,在我看来,目前很难提供一个合理的比较,因为这些项目大多尚未完成。除非您愿意自己做一些(或者很多)工作,否则它们还不具备生产能力。对于每个项目,都有某些非常特定于该特定项目的目标。
例如,Impala是为了利用现有的Hive基础设施而开发的,这样您就不必从头开始。它使用与Hive相同的元数据。它的目标是在现有的Hadoop仓库之上运行实时查询。而Drill的开发目的是成为“不仅仅是Hadoop”的一个项目,并提供跨多个大数据平台(包括MongoDB、Cassandra、Riak和Splunk)的分布式查询功能。Shark与Apache Hive兼容,这意味着您可以使用与Hive相同的HiveQL语句查询它。不同之处在于Shark可以比在Hive上运行相同查询快30倍返回结果。

Impala目前表现良好,并且有些人在使用它,但我对另外两个工具并不太有信心。所有这些工具都很好,但只有在您尝试将其应用于您的数据和处理需求后,才能进行公正的比较。但根据我的经验,Impala目前是最好的选择。我并不是说其他工具不好,但它们还没有足够的成熟度。但如果您希望将其与已运行的Hadoop集群(例如Apache的Hadoop)一起使用,您可能需要进行一些额外的工作,因为几乎每个人都将Impala用作CDH功能。

注意:所有这些都基于我的经验。如果您发现有错误或不适当之处,请告诉我。欢迎评论和建议。我希望这回答了您的一些疑问。


2
感谢您提供的全面答案。它似乎在大多数方面都证实了我的研究结果。现在我正在使用Spark进行一些POC,以获得一些实践经验。对我来说,它的文档比Impala好得多(所有关于它的学术论文都可以获得),而且API清晰简洁。但我们会看到的..此外,我将Hive与实时框架进行了比较,因为它们倾向于将自己与Hive进行比较,而不是相互之间进行比较。可能是为了展示出良好的性能提升.. - user2306380
哦,绝对没错..你说得对 :)..祝你的POC好运。 - Tariq
1
有一件事需要记住——Impala有一个重大的限制:你的中间查询必须适合内存。因此,如果你的分组查询超过30GB(例如,你机器上的RAM),在应用HAVING子句之前,它会被有效地修剪到1MB的数据,否则查询将失败。这在其他MPP引擎(如Apache Drill)中并不是这样的。 - Asaf Mesika
如果您想查询MongoDB,您可以使用外部表在Hive上使用SerDer来执行此操作,对吧?因此,Apache Drill在这个可插拔格式方面并没有比Impala更具优势。另外,您现有的Hadoop仓库也可以使用这种方法进行查询。 - Asaf Mesika
2
我认为“它们还不够成熟”这种说法并没有什么用。你能指出一些可验证的事实吗?我甚至不确定这意味着什么。太多的错误?不兼容性?社区太小?我只从列表中使用Spark,但我不会说我经历过这些问题。 - Daniel Darabos
Spark SQL、Drill和其他工具现在都有支持的版本和许多有趣的用例,因此我认为现在是时候解释每个工具的适当使用场景了。 - nealmcb

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接