天天看點

Spark SQL概述

一、Spark SQL介紹

1、為什麼需要SQL

1) 事實上的标準

2) 易學易用

3) 閱聽人面大

2、Shark(已經停止維護,不建議在生産上使用。)

Shark産生的目的就是為了讓hive跑在spark之上。

   Hive: 類似于sql的Hive QL語言, sql 翻譯成 mapreduce

     特點: 使用mapreduce作為引擎

      改進: hive on tez、hive on spark、hive on mapreduce

Spark: hive on spark ===> (也就是)shark

   shark剛推出時,很受歡迎。計算速度快,基于spark、基于記憶體的列式存儲,與hive能夠相容。

缺點: hive ql的解析、邏輯執行計劃生成、執行計劃優化都要依賴于hive

    僅僅隻是把實體執行計劃從mr作業替換成spark作業。

Shark終止以後,産生了2個分支

1) hive on spark

   Hive社群,源碼是在Hive中

2) Spark SQL

   Spark社群,源碼是在Spark中

 支援多種資料源,多種優化技術,擴充性好很多。

二、SQL on Hadoop常用架構介紹

常用的架構如下圖所示,包括HIVE,Impala,DRILL,Spark,presto,都是基于Hadoop的。

Spark SQL概述

 1、HIVE(facebook開源)

  将sql裝換成mapreduce

  提出了metastore(中繼資料)概念,例如Hive表的名字,表裡有什麼列,每個列的資料類型,資料存放在hdfs的路徑上。這些中繼資料,在Spark也能使用。

2、Impala(cloudera公司開發的, hadoop常用版本cdh也是這家公司開發的,也是生産上建議使用的cdh版本)

    提供了cm,web方式安裝hadoop。

   Impala提供了sql,有自己的守護程序執行的,非mr,基于記憶體的,對記憶體的要求比較高。

   metastore(中繼資料)

3、presto (facebook開源)

國内用的比較多的如京東

4、DRILL

     基于sql

     通路hdfs, rdbms,json、hbase,mangodb,s3、hive

5、Spark SQL

      sql

       dataframe/dataset api

  metastore

      通路hdfs, rdbms,json、hbase,mangodb,s3、hive  ==> 外部資料源

三、Spark SQL概述

1、Spark Sql是Spark的核心元件,在Spark1.0中開始出現(April 2014)

2、能有運作SQL和Hive QL,包括UDFs UDAFs 和SerDes。

3、通過JDBC的方式連接配接已經存在的BI工具

Spark SQL概述

4、能夠支援多種語言,包括Python,Scala,Java 和R語言。

5、Spark SQL能處理結構化的資料。不僅僅有通路或者操作SQL的功能,還提供了 其他豐富的操作:外部資料源、優化

總結:

1) Spark SQL的應用不局限于SQL

2) 通路hive、json、parquet等檔案資料

3) SQL隻是Spark SQL的一個功能而已。

 4) Spark SQL提供了SQL的api、DataFrame和Dataset的API。

四、Spark SQL願景

Write less code: 寫更少的代碼

Read less data: 讀更少的資料(優化引擎去掉不必要的資料)

Let the optimizer do the hard work: 将優化的工作交給底層的優化器。

繼續閱讀