Spark SQL入门

背景

SQL:结构化查询语言,主要用来进行统计分析。

Oracle、MySQL、DB2、SQLserver等关系型数据库都用SQL。但是这些关系型数据库对数据量是有限制的。

但是随着互联网的发展,数据量越来越大,关系型数据库越来越难操作这些大数据量的数据。越来越多的传统行业,比如银行、保险等会把原来传统的数据库逐渐’云化’,转到大数据上面来进行操作。但是传统的那些语句分析、优化等的SQL,不会轻易改变,如果发生改变就意味着很多业务逻辑的修改,所以在传统向大数据平台迁移到过程中尽可能保持原有的SQL不发生改变。但是不可能都不会改变,就算Oracle和MySQL数据库,也有些SQL不一样的语法。传统的数据库SQL在大数据里面的SQL,比如hiveSQL,如果找不到相关的,就是说hiveSQL不支持传统数据库的SQL,那么就需要开发大量的udf函数了,udf函数支持原有RDBMS内置的一些函数。当然udf还有其它比如业务需要的专门的udf函数的。

一个框架如果最终不能落地到SQL,那么这个框架是不太行的

大数据平台数据库比如:SQL on Hadoop(广义)

从传统关系型数据库向大数据平台数据库迁移需要考虑以下几点:

  • SQL
  • 存储
    关系型数据库里的数据是存在本地的文件上的,对数据的大小有限制。
    大数据平台上的数据库,数据可以存储在分布式文件系统上,比如HDFS上面。
  • 计算
    关系型数据库,比如MySQL数据库引擎:ISAM、MyISAM、InnoDB、MEMORY、HEAP,用这些进行计算分析处理
    大数据平台上的数据库,比如MapReduce或者Spark等计算框架,用这些进行计算分析处理

在传统向大数据平台迁移到过程中尽可能保持原有的SQL不发生改变,而去修改优化存储框架和计算框架。

SQL on Hadoop框架介绍

1.Hive SQL

Hive:它运用的计算框架可以是:MapReduce、Tez、Spark(可以通过配置来切换)
在Hive上运行SQL,它会把SQL转换为底层的MapReduce作业、Tez作业、Spark作业。

metastore元数据信息:很多SQL on Hadoop框架都共用metastore的,比如hive上面创建的表,用spark SQL等框架也可以访问,因为它们共用一个metastore。

数据地图,hive元数据整个体系的UML图,通过这个数据地图可以知道整个集群上所有的,一个数据存储量,比如哪个业务占用多少存储空间。这个对公司的成本控制有很大帮助的,你可以知道最近数据存储量增加了多少。

2.Impala

它为了解决hive中交互式查询比较慢的问题。它也是用SQL,它的底层是有自己的一些守护进程的。它和hive共享metastore。hive里面有的,在Impala里面也可以访问。Impala推荐使用的数据存储格式为parquet。但是其它比如hive的存储不是parquet格式的,现在用Impala来查询,肯定需要先转换一下的。可以用Spark SQL来进行转换。
相对来说,Impala是很消耗资源的,比如memory。所以一般机器最好不要用。

3.Presto

目前京东就在用
Distributed SQL Query Engine for Big Data
Presto is an open source distributed SQL query engine for running interactive analytic queries against data sources of all sizes ranging from gigabytes to petabytes.
Presto was designed and written from the ground up for interactive analytics and approaches the speed of commercial data warehouses while scaling to the size of organizations like Facebook.

4.Drill

Schema-free SQL Query Engine for Hadoop, NoSQL and Cloud Storage
Drill supports a variety of NoSQL databases and file systems, including HBase, MongoDB, MapR-DB, HDFS, MapR-FS, Amazon S3, Azure Blob Storage, Google Cloud Storage, Swift, NAS and local files. A single query can join data from multiple datastores. For example, you can join a user profile collection in MongoDB with a directory of event logs in Hadoop.
Drill’s datastore-aware optimizer automatically restructures a query plan to leverage the datastore’s internal processing capabilities. In addition, Drill supports data locality, so it’s a good idea to co-locate Drill and the datastore on the same nodes.

5.Phoenix

OLTP and operational analytics for Apache Hadoop

http://phoenix.apache.org/
https://github.com/apache/phoenix

Spark SQL概述

Spark SQL是Spark 1.0出来的,1.3毕业的。

Spark SQL is Apache Spark’s module for working with structured data.
Spark SQL是Apache Spark中的一个模块,用来处理结构化数据的。

需要注意的是:Spark SQL只是用来处理结构化数据的一种渠道而已。并不是简简单单的写SQL。Spark SQL是通过sql、DataFrame、DataSet来处理结构化的数据,其中SQL只是占到Spark SQL其中一点点的部分。

结构化数据:可以理解为类似表一样的,有列、有列名。表是结构化数据,ORC和Parquet格式的数据也是结构化数据。JSON也是。

Spark SQL框架在一开始分的时候分为两个分支:

  • Spark分支:Spark SQL
  • Hive on Spark:这个意思是:Hive跑在Spark之上,之前学的是跑在MapReduce之上,只需要set hive.execution.engine=spark;这样设置一下即可。这个生产上面慎用,里面有很多缺陷。

特点:

1.Integrated 集成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值