Apache Hadoop: Shark与Impala相比(翻译)
内容来自Reynold Xin
Berkeley的博士,此人领导了Shark的开发(在加州伯克利分校AMP实验室)。
本文只做翻译,不对两个系统的优劣做评价。
总体上Shark扩展了Apache Hive,大大加快在内存和磁盘上的查询。而Impala是企业级数据仓库系统, 可以很好地使用Hive/ HDFS,从架构层来说,类似于传统的并行数据库。这两个系统有着很多共同的目标,但也有很大差异。
与现有系统的兼容性Shark直接建立在Apache/Hive代码库上,所以它自然支持几乎所有Hive特点。它支持现有的Hive SQL语言,Hive数据格式(SerDes),用户自定义函数(UDF),调用外部脚本查询。因为Impala使用自定义的C++运行,它不支持Hive UDF。这两个系统将会与许多BI工具整合,这一直是Impala的主要目标。Shark正在被用于一些BI工具,如Tableau,不过这并没有被探索更多。
内存中的数据处理Shark允许用户显式地加载在内存中的数据,以加快查询处理,其内存使用有效率的,压缩的面向列的格式。Impala还没有提供在内存中的存储。
容错Shark被设计为支持短期和长时间运行的查询。它可以从查询故障恢复(感谢底层Spark引擎)。Impala目前是更侧重于短查询,不容错(如果节点发生故障,查询必须重新启动,对短查询来说这无疑是可以接受的)。
性能做全面的比较太早了点。Shark和Impala都报告比Hive快10-100倍,但这都依赖具体情况和系统负载。两个项目也都在未来6个月内会做重要优化。以我们的经验来看,Sharkr当前版本,如果是内存的数据一般比Hive快100倍,如果是磁盘上的数据一般快5-10倍,这取决于查询(带关联连接的查询,能比Hive快很多)。
目标用户在我们的理解中,Impala是相当专注于传统企业客户和OLAP和数据仓库工作负载。Shark支持传统OLAP,但也投入了精力,以支持更复杂的Hive使用(如UDF),非结构化数据处理(如ETL),机器学习等先进的分析(通过集成Spark)。Shark的长期目标是有一个统一的系统,既支持SQL也支持高级分析(机器学习,统计等等)。
开发语言Shark是用Java和Scala写的,运行在JVM上。Impala是用c++写的。Impala会将查询编译成LLVM(底层虚拟机)中间表示法,它可以由即时编译器做进一步优化。Shark查询被编译成JVM字节码。
开放源码这两个系统都是开源(Apache许可)。Shark开始于加州大学伯克利分校,已经从公司如雅虎接受了重大贡献资助。Impala是在Cloudera开发的,并于最近发布。