一套数据,多种引擎(impala/Hive/kylin) – 大数据和云计算技术 (欢迎关注同名微信公众号) – ITeye技术网站
http://jiezhu2007.iteye.com/blog/2153589
SQL on hadoop目前最成熟的应该是Hive,发展早,使用多。Hive是目前互联网企业中处理大数据、构建数据仓库最常用的解决方案,甚至在很多公司部署了Hadoop集群不是为了跑原生MapReduce程序,而全用来跑Hive SQL的查询任务。目前Hive的主要缺点:
1,data shuffle时网络瓶颈,Reduce要等Map结束才能开始,不能高效利用网络带宽
2,一般一个SQL都会解析成多个MR job,Hadoop每次Job输出都直接写HDFS,性能差
3,每次执行Job都要启动Task,花费很多时间,无法做到实时
4,由于把SQL转化成MapReduce job时,map,shuffle和reduce所负责执行的SQL功能不同。那么就有Map->MapReduce或者MapReduce->Reduce这样的需求。这样可以降低写HDFS的次数,从而提高性能。很明显,由于架构上的天然涉及,Hive只适合批处理。
//
Cloudera的impala是另外一个典型的代表,Impala可以看成是Google Dremel架构和MPP (Massively Parallel Processing)结构的混合体,根据Cloudera公司的宣传,也是目前业界开源的最快的引擎,相关测试结果可以参考http://blog.cloudera.com/blog/2014/05/new-sql-choices-in-the-apache-hadoop-ecosystem-why-impala-continues-to-lead/。
当能impala也不是包打天下,对批量数据的处理如数据挖掘分析,还是不如HIVE稳定可靠。而impala天然是继承Hive的元数据,所以完全可以综合两者的优点,同一套数据,多个引擎。Impala应对秒级的交互查询,Hive应对批量数据的分析。
//
如果需要更高的OLAP分析速度,可以考虑kylin,最近有ebay开源的OLAP引擎。核心思路,数据提取建模,通过HIVE将数据转换成cube,存入HBASE中方便查询。这个就是要求提前建立cube,智能应对特定的模型。
//
三、需要做的工作:
要做到HIVE/impala共一套数据,其实也有很多工作。目前impala主要在Parquet格式下性能高,HIVE主要使用的是ORCFile。两种存储格式都是列式存储,各有优势。Parquet主要是支持嵌套式数据,ORCFile的每个strip中有一段index data。Index data包含每列的最大和最小值以及每列所在的行。行索引里面提供了偏移量,它可以跳到正确的压缩块位置。具有相对频繁的行索引,使得在stripe中快速读取的过程中可以跳过很多行,尽管这个stripe的大小很大。所以需要两个引擎各自兼容对ORCFile/Parquet的支持,或者融合两种存储格式的优点,让HIVE/impala支持。