`
zhousheng29
  • 浏览: 150678 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Shark: Real-time queries and analytics for big data

阅读更多
Shark大数据实时查询分析利器
Shark SQL查询比Hive快100倍,机器学习比Hadoop快100倍
作者是Ben Lorica  2012-07-27
Ben Lorica的是O'Reilly Media公司的首席数据科学家,他致力于包括直销,消费者和市场的研究,有针对性的广告,文本挖掘,金融工程中的商业智能,数据挖掘,机器学习和统计分析。他的背景包括任职于一家投资管理公司,互联网创业和金融服务。
原文:http://strata.oreilly.com/2012/11/shark-real-time-queries-and-analytics-for-big-data.html

Hadoop的优势在于批处理,MapReduce不是特别地适合交互式即席查询分析。实时SQL查询(基于Hadoop数据)通常使用特定的MPP(大规模并行处理)数据库连接器而被执行。实践中这也意味着在独立的Hadoop和数据库集群之间有连接器存在。过去几个月中,一些可以快速SQL访问Hadoop集群的系统引起了人们的注意,而Hadoop和快速MPP数据库集群之间的桥梁连接器不会消失。不过人们将越来越大的兴趣转移许多交互式SQL工作到那些系统中,这些系统有着与Hadoop集群共存并在相同的集群上。

Hadoop集群支持快速/交互式SQL查询可以追溯到几年以前,HadoopDB--一个出自耶鲁大学的开源项目。HadoopDB的创造者,因此开办了一个商业软件公司(Hadapt),建立一个统一的Hadoop/ MapReduce和SQL的系统。在Hadapt,Postgres的数据库放置在Hadoop集群的节点上,这个系统因此可以使用MapReduce,SQL和搜索(SOLR)。现在的版本是2.0,Hadapt的是一个有容错能力的系统,并自带分析功能(HDK),人们可以通过SQL使用。

开源系统
本文的剩余部分涉及到两个相对新的开源工具:Impala和Shark. 自从Impala在Strata NYC发布之后,由Cloudera的Impala系统产生的热门话题强调大数据社区有多么的想要一个在Hadoop中的实时查询系统,自从它发布之后,也出现了很多好的文章,所以我就不进入它的设计细节了。我将强调的是由Cloudera公布的令人印象深刻的性能数字。
对于纯粹的I/O限制查询,我们清楚地看到性能提升了3-4倍. 对于那些至少有一个join的查询,我们看到性能提升了7-45倍。如果数据访问是通过来自cache的查询,速度将会更令人激动,感谢Impala的出色效率。在那些情景中,我们看到了比Hive快20-90倍的速度,甚至在一些简单的聚合查询中也能达到。

进入Shark
Shark是Spark的一个组件,一个开源的、分布式的,容错的,基于内存的分析系统。它能被安装在与Hadoop相同的集群上。特别是,Shark完全兼容Hive,并支持HiveQL, Hive数据格式以及udf函数。此外Shark也能被用于查询HDFS, HBase和Amazon S3数据。

Shark的创造者刚刚发表了一篇文章,在这片文章中系统的比较了Shark与Hive, Hadoop和MPP数据库的性能。他们发现在各种查询中Shark比Hive要快得多,大概来说,基于磁盘数据,Shark比Hive快5-10倍,而在内存中Shark快100倍. 值得注意的是,Shark的性能提升可以与那些观察到的MPP数据库相媲美。

在这个阶段用户至少有两个可用的开源系统用于Hadoop中的快速交互SQL查询,而Impala更被人所注意,Shark团队已经一起静静地发布了一个高度可伸缩的系统,具有引人注目的特点,包括数据协同分块,容错,在分析者的工作流中集成了机器学习。

内存中列存储和列压缩
使用Impala的最好性能提升是通过使用Trevni列存储格式获得的。至于Shark,他们定制的列存储和压缩格式减少了大约5倍的存储和查询时间。

控制数据分块,快速分布式Join
Shark让用户分区表使用指定的key. 特别是表如果会被频繁join, 那么我们将这些表用共同的(join)key分区。协同分区是一种被许多MPP数据库为了加快大表joins查询速度而采用的技巧。


容错
Shark能够优雅地从节点失败恢复,在重构丢失数据分区后继续执行查询。在最初大数据集上做的测试指出恢复会有一点小的性能影响(但这还是比重新执行这个查询要快得多)。

SQL优化
Shark已经实现了一个简单的SQL优化器(偏有向无环图partial DAG, partial directed acyclic graph执行或者偏微分方程partial differential equations),当需要时它是利用数据统计(要人,近似直方图)去动态地调整查询计划。有一个例子,Shark的偏微分方程系统为join使用了数据统计去实现运行时间优化。

机器学习支持
弹性分布式数据集(RDD,Resilient Distributed Datasets)是被缓存在内存中的对象,能够在整个集群计算节点使用。他们是使用在Spark中的基础数据对象。用户能创建RDD(使用sql2rdd命令),应用这个到机器学习功能,所有这些都是在Shark内部完成。当前能用Scala和Java写机器学习和分析功能,将来还能支持Python.用户不仅是执行简单SQL查询语句能够得到好处,在相同框架下复杂计算也能加速,Shark比Hadoop快100倍。


集成BI工具
Impala集成了Tableau和Qlikview. 有一些Shark用户用Tableau工具使用它,不过目前,BI集成相对来说还是Shark的“未探索”领域。

总结
Impala和Shark都是Hadoop的交互SQL系统。一份新报纸展现了:比较那些可观察到的MPP数据库,Shark提供了加速。此外比Hive在SQL快100倍,Shark还是在机器学习算法方面(迭代计算)比Hadoop快100倍的一个框架。
分享到:
评论
1 楼 zhuxiaoxiaoup 2014-05-28  
你好,看您讲解的很专业,现在遇到了几个问题,您若知道的话还请不吝赐教:
1、Shark的自定义列存储和压缩格式怎样实现?
2、shark的数据分区:
我现在遇到的问题是:我有一张4千万数据的表,我怎样实现将表分成200个分区,每个表20万数据?这样设想可以实现吗?
3、每次插入一条数据都会导致创建一个新的文件,这个问题怎么解决呀?

相关推荐

Global site tag (gtag.js) - Google Analytics