如何选择基于Hadoop的SQL引擎

作者&投稿:钟冉 (若有异议请与网页底部的电邮联系)
基于Hadoop的SQL引擎怎么挑~

SQL语言
支持的SQL语言越多,能使用的应用程序也就越多。并且,支持的语言越丰富,Hadoop能运行的查询程序就越多,应用和报表工具要做的就越少。
节点连接
在大表上快速有效地执行节点连接并不容易,尤其是在SQL引擎不知道数据存储在哪的情况下。效率低下的连接过程会导致大量的I/O,以及不同节点之间巨大的数据传输,最终影响处理速度。
非结构化数据
SQL是为结构化数据设计的。表中的每一条记录都位于同一列,每一列都有同样的属性。但在大数据时代,并不是所有的数据都是结构化的。Hadoop文件中可能包含嵌套的数据、可变的数据(具有层级结构)、无模式的数据和自我描述的数据。基于Hadoop的SQL引擎必须能够把所有数据都转换为关系数据,并优化这些数据之间的查询。

Spark SQL主要的推动者是Databricks。提到Spark SQL不得不提的就是Shark。Shark可以理解为Spark社区这边搞的一个”Hive on Spark”,把Hive的物理执行计划使用Spark计算引擎去执行。这里面会有一些问题,Hive社区那边没有把物理执行计划到执行引擎这个步骤抽象出公共API,所以Spark社区这边要自己维护一个Hive的分支,而且Hive的设计和发展不太会考虑到如何优化Spark的Job。但是前面提到的Hive on Spark却是和Hive一起发布的,是由Hive社区控制的。
所以后来Spark社区就停止了Shark的开发转向Spark SQL(“坑了”一部分当时信任Shark的人)。Spark SQL是把SQL解析成RDD的transformation和action,而且通过catalyst可以自由、灵活的选择最优执行方案。对数据库有深入研究的人就会知道,SQL执行计划的优化是一个非常重要的环节,Spark SQL在这方面的优势非常明显,提供了一个非常灵活、可扩展的架构。但是Spark SQL是基于内存的,元数据放在内存里面,不适合作为数据仓库的一部分来使用。所以有了Spark SQL的HiveContext,就是兼容Hive的Spark SQL。它支持HiveQL, Hive Metastore, Hive SerDes and Hive UDFs以及JDBC driver。这样看起来很完美,但是实际上也有一些缺点:Spark SQL依赖于Hive的一个snapshot,所以它总是比Hive的发布晚一个版本,很多Hive新的feature和bug fix它就无法包括。而且目前看Spark社区在Spark的thriftserver方面的投入不是很大,所以感觉它不是特别想朝着这个方向发展。还有一个重要的缺点就是Spark SQL目前还不能通过分析SQL来预测这个查询需要多少资源从而申请对应的资源,所以在共享集群上无法高效地分配资源和调度任务。

在Hadoop和NoSQL技术中,人们逐渐把焦点转移到了Hadoop上的SQL引擎。今天,可选择的引擎越来越多,反倒让组织陷入了选择困境。本文将罗列几点选择引擎时需要考量的因素,供您参考。
基于Hadoop的SQL技术一大优势在于可以使用熟悉的SQL语言,访问存储在Hadoop中的大数据集。
用户几乎可以应用任何报表或工具来分析和研究数据。在Hadoop上还不能应用SQL的时候,要访问Hadoop中的大数据集,需要十分了解Hadoop
的技术应用程序界面,比如HDFS、MapReduce或HBase。现在有了基于Hadoop的SQL引擎,每个人都可以使用他喜欢的工具了。对企业而
言,相当于Hadoop开放了更大的窗口,有更多的企业可以应用Hadoop处理大数据。
有哪些技术可以选择

第一个基于Hadoop的SQL引擎是Apache Hive,不过过去一年里,有很多新产品出现,包括CitusDB、Cloudera
Impala、Concurrent Lingual、Hadapt、InfiniDB、 JethroData、MammothDB、Apache
Drill、MemSQL、Pivotal HawQ、Progress DataDirect、ScleraDB、Simba和Splice
Machine。
除了上述引擎之外,数据虚拟化服务器也应在此列,因为它们对Hadoop数据实现了SQL访问。虚拟化服务器可以访问所有数据源,包括Hadoop,不同的数据源都可以集成。数据虚拟化服务器有很多,包括Cirro Data Hub、Cisco/Composite

当然,还有一些SQL数据库管理系统也支持多种数据源。它们在自己的SQL数据库或Hadoop中存储数据,提供对Hadoop数据的SQL访问。比如
EMC/Greenplum UAP、 HP Vertica (on MapR)、Microsoft PolyBase、Actian
ParAccel 和Teradata Aster Database (via SQL-H)。
这么多基于Hadoop的SQL工具可以使用,可以说是让组织眼花缭乱。那么该如何选择呢?它们彼此的差别又在哪呢?
事实上,不同的技术之间差别很大,比如说,CitusDB知道数据存储在哪里,可以更快地访问数据;JethroData存储索引,可以直接访问数据;Splice Machine提供交易型SQL界面。
要选择正确的技术,需要比对细节。以下是具体的考虑因素:
SQL语言
支持的SQL语言越多,能使用的应用程序也就越多。并且,支持的语言越丰富,Hadoop能运行的查询程序就越多,应用和报表工具要做的就越少。
节点连接
在大表上快速有效地执行节点连接并不容易,尤其是在SQL引擎不知道数据存储在哪的情况下。效率低下的连接过程会导致大量的I/O,以及不同节点之间巨大的数据传输,最终影响处理速度。
非结构化数据
SQL是为结构化数据设
计的。表中的每一条记录都位于同一列,每一列都有同样的属性。但在大数据时代,并不是所有的数据都是结构化的。Hadoop文件中可能包含嵌套的数据、可
变的数据(具有层级结构)、无模式的数据和自我描述的数据。基于Hadoop的SQL引擎必须能够把所有数据都转换为关系数据,并优化这些数据之间的查
询。
存储模式
Hadoop支持一些标准存储格式,比如Parquet、Avro和ORCFile。基于Hadoop的SQL技术使用的格式越多,其他引擎和技术能够读取的格式也就越多。这极大地减少了复制数据的工作。
用户定义函数
要在SQL上执行复杂的分析函数,比如高斯判别分析和购物篮分析等,很重要的前提是SQL对该函数的支持。这样的函数被称为用户定义函数(UDF)。基于Hadoop的SQL引擎需要能够在多节点上分部执行用户定义函数。
多用户工作负载

还需要考量的一个因素是,引擎应该如何在不同的查询和不同类型的查询之间划分资源。比如,不同应用程序的查询有不同的处理优先级;需要运行较长时间的查询
应该让位于需要立即处理的查询;如果计划外的或资源密集型的查询占用很多资源的话,应该被取消或暂停查询。基于Hadoop的SQL技术需要更加智能的工
作负载管理。
数据联合
并不是所有的数据都存储在Hadoop中。大部分企业数据还存储在其他数据源中,比如SQL数据库。基于Hadoop的SQL引擎需要支持存储在不同类型数据源中的数据的连接。换言之,它必须支持数据联合。
应用Hadoop的企业部署SQL引擎是大势所趋。企业在选择不同技术的时候,希望能考虑到上述因素。

在Hadoop和NoSQL技术中,人们逐渐把焦点转移到了Hadoop上的SQL引擎。今天,可选择的引擎越来越多,反倒让组织陷入了选择困境。本文将罗列几点选择引擎时需要考量的因素,供您参考。
基于Hadoop的SQL技术一大优势在于可以使用熟悉的SQL语言,访问存储在Hadoop中的大数据集。
用户几乎可以应用任何报表或工具来分析和研究数据。在Hadoop上还不能应用SQL的时候,要访问Hadoop中的大数据集,需要十分了解Hadoop
的技术应用程序界面,比如HDFS、MapReduce或HBase。现在有了基于Hadoop的SQL引擎,每个人都可以使用他喜欢的工具了。对企业而
言,相当于Hadoop开放了更大的窗口,有更多的企业可以应用Hadoop处理大数据。
有哪些技术可以选择

第一个基于Hadoop的SQL引擎是Apache Hive,不过过去一年里,有很多新产品出现,包括CitusDB、Cloudera
Impala、Concurrent Lingual、Hadapt、InfiniDB、 JethroData、MammothDB、Apache
Drill、MemSQL、Pivotal HawQ、Progress DataDirect、ScleraDB、Simba和Splice
Machine。
除了上述引擎之外,数据虚拟化服务器也应在此列,因为它们对Hadoop数据实现了SQL访问。虚拟化服务器可以访问所有数据源,包括Hadoop,不同的数据源都可以集成。数据虚拟化服务器有很多,包括Cirro Data Hub、Cisco/Composite

当然,还有一些SQL数据库管理系统也支持多种数据源。它们在自己的SQL数据库或Hadoop中存储数据,提供对Hadoop数据的SQL访问。比如
EMC/Greenplum UAP、 HP Vertica (on MapR)、Microsoft PolyBase、Actian
ParAccel 和Teradata Aster Database (via SQL-H)。
这么多基于Hadoop的SQL工具可以使用,可以说是让组织眼花缭乱。那么该如何选择呢?它们彼此的差别又在哪呢?
事实上,不同的技术之间差别很大,比如说,CitusDB知道数据存储在哪里,可以更快地访问数据;JethroData存储索引,可以直接访问数据;Splice Machine提供交易型SQL界面。
要选择正确的技术,需要比对细节。以下是具体的考虑因素:
SQL语言
支持的SQL语言越多,能使用的应用程序也就越多。并且,支持的语言越丰富,Hadoop能运行的查询程序就越多,应用和报表工具要做的就越少。
节点连接
在大表上快速有效地执行节点连接并不容易,尤其是在SQL引擎不知道数据存储在哪的情况下。效率低下的连接过程会导致大量的I/O,以及不同节点之间巨大的数据传输,最终影响处理速度。
非结构化数据
SQL是为结构化数据设
计的。表中的每一条记录都位于同一列,每一列都有同样的属性。但在大数据时代,并不是所有的数据都是结构化的。Hadoop文件中可能包含嵌套的数据、可
变的数据(具有层级结构)、无模式的数据和自我描述的数据。基于Hadoop的SQL引擎必须能够把所有数据都转换为关系数据,并优化这些数据之间的查
询。
存储模式
Hadoop支持一些标准存储格式,比如Parquet、Avro和ORCFile。基于Hadoop的SQL技术使用的格式越多,其他引擎和技术能够读取的格式也就越多。这极大地减少了复制数据的工作。
用户定义函数
要在SQL上执行复杂的分析函数,比如高斯判别分析和购物篮分析等,很重要的前提是SQL对该函数的支持。这样的函数被称为用户定义函数(UDF)。基于Hadoop的SQL引擎需要能够在多节点上分部执行用户定义函数。
多用户工作负载

还需要考量的一个因素是,引擎应该如何在不同的查询和不同类型的查询之间划分资源。比如,不同应用程序的查询有不同的处理优先级;需要运行较长时间的查询
应该让位于需要立即处理的查询;如果计划外的或资源密集型的查询占用很多资源的话,应该被取消或暂停查询。基于Hadoop的SQL技术需要更加智能的工
作负载管理。
数据联合
并不是所有的数据都存储在Hadoop中。大部分企业数据还存储在其他数据源中,比如SQL数据库。基于Hadoop的SQL引擎需要支持存储在不同类型数据源中的数据的连接。换言之,它必须支持数据联合。
应用Hadoop的企业部署SQL引擎是大势所趋。企业在选择不同技术的时候,希望能考虑到上述因素。


中国十大原画培训机构
1、王氏教育 王氏教育集团是动漫,插画设计,原画,动画,漫画,影视后期,游戏动画,视频剪辑的CG设计培训机构学校。2、元素动力 元素动力概念艺术是由国内顶尖概念艺术家冯伟先生于2010年创办,是一家专业影视游戏CG概念艺术培训及影视游戏美术外包的概念艺术企业。3、水晶石教育 水晶石教育成立于2003年,是...

3000左右买什么手机好,主要玩游戏?
nubia UI 5.0(基于Android 7.1)用户界面nubia UI 5.0 CPU频率2.45GHz(大四核),1.9GHz(小四核)RAM容量8GB 存储卡不支持容量扩展 电池容量3200mAh 荣耀9 EMUI 5.1(基于Android 7.0)用户界面EMUI 5.1 CPU型号海思 Kirin 960 CPU频率2.4GHz(大四核),1.8GHz(小四核)+微智核I6...

巩留县15549147614: 如何选择基于Hadoop的SQL引擎 -
貊莘迪克: 我建议你能考虑以下因素然后进行选择:SQL语言 支持的SQL语言越多,能使用的应用程序也就越多.并且,支持的语言越丰富,Hadoop能运行的查询程序就越多,应用和报表工具要做的就越少.节点连接 在大表上快速有效地执行节点连接并...

巩留县15549147614: 基于Hadoop的SQL引擎怎么挑 -
貊莘迪克: SQL语言 支持的SQL语言越多,能使用的应用程序也就越多.并且,支持的语言越丰富,Hadoop能运行的查询程序就越多,应用和报表工具要做的就越少.节点连接 在大表上快速有效地执行节点连接并不容易,尤其是在SQL引擎不知道数据存...

巩留县15549147614: 如何使用hadoop 开发搜索引擎 -
貊莘迪克: 这个很复杂且很耗人力,如果是个人就放弃吧.如果是团队还可以.你可以用nutch做爬虫,用solr做索引,都是开源的软件.我的集成搜索站http://search.qinggl.com

巩留县15549147614: 如何选择满足需求的SQL on Hadoop系统 -
貊莘迪克: Spark SQL主要的推动者是Databricks.提到Spark SQL不得不提的就是Shark.Shark可以理解为Spark社区这边搞的一个”Hive on Spark”,把Hive的物理执行计划使用Spark计算引擎去执行.这里面会有一些问题,Hive社区那边没有把物理执...

巩留县15549147614: 如何选择满足需求的SQL on Hadoop系统 -
貊莘迪克: 现在用的比较多的有hive,sparksql,impala,presto等.hive以mr为主,作业启动速度会慢一些,但也是最稳定的.impala和presto比较吃配置,很吃集群的资源.sparksql和sql相差比较大,相对来说还是更期待hive on spark

巩留县15549147614: Hadoop 用Hive还是HBase -
貊莘迪克: 这个要根据自己处理数据的方式来选择.1、Hive是支持SQL语句的,执行会调用mapreduce,所以延迟比较高;2、HBase是面向列的分布式数据库,使用集群环境的内存做处理,效率会比hive要高,但是不支持sql语句.Hadoop开发和运行处理大规模数据,需要用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的 hql查询,hive也即做数据仓库.

巩留县15549147614: hadoop能使用哪些数据库 -
貊莘迪克: 框架本身提供一个DBInputFormat.支持MySql和PostgreSQL(需要自己提供驱动jar包).需要使用其他数据库可以自己实现相应的InputFormat;实现起来也不难参照DBInputFormat即可.只要将拼接的sql语句改成适用的语法即可.

巩留县15549147614: 如何引入 org.apache.spark.sql.sparksession 在哪个jar包中 -
貊莘迪克: 在eclipse中,依次选择“File” –>“New” –> “Other…” –> “Scala Wizard” –> “Scala Project”,创建一个Scala工程,并命名为“SparkScala”.右击“SaprkScala”工程,选择“Properties”,在弹出的框中,按照下图所示,依次选择...

巩留县15549147614: hadoop,Storm该选哪一个 -
貊莘迪克: 首先整体认识:Hadoop是磁盘级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数据直接通过网络导入内存.读写内存比读写磁盘速度快n个数量级.根据Harvard CS61课件,磁盘访问延迟约为内存访问延迟的75000...

巩留县15549147614: 如何使用Hadoop读写数据库 -
貊莘迪克: 1、选择开始菜单中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打开【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份验证建立连接.2、在【对象资源管理器】窗口中...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网