一、什麼是 Spark SQL? (官方定義)
Spark SQL
* A Spark module for structured data processing(known set of fields for each record - schema) ;
1. Spark SQL是Spark中專門用來處理結構化數據(每一行數據都遵循Schema信息 —— 建表時表的字段及其 類型)的一個模塊;
* Provides DataFrames/Dataset as an abstraction for distributed data processing ;
2. 提供了 DataFrame/Dataset 的對分佈式數據處理的基本抽象;
* Acts as a distributed SQL engine ;
3. 其實之上是一個分佈式的 SQL 引擎。
二、什麼是 Hive? (官方定義)
Hive
* The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL.
1. 數據倉庫,能使用 SQL 讀取、寫入和管理存在於分佈式存儲架構上的大數據集;
* Structure can be projected onto data already in storage.
2. 結構可以映射到已經存儲的數據上;
* A command line tool and JDBC driver are provided to connect users to Hive.
3. 用戶連接 Hive 可以使用命令行工具和 JDBC 驅動。
三、兩者的區別
都支持ThriftServer服務,爲JDBC提供解決方案,區別如下:
Spark SQL
=> 是Spark的一個庫文件;
=> Spark SQL 元數據可有可無;
=> Spark SQL 中 schema 是自動推斷的;
=> 支持標準 SQL 語句,也支持 HQL 語句等(可以用普通話、方言來對比理解);
=> 從開發角度來講,即支持SQL方式開發,也支持HQL開發,還支持函數式編程(DSL)實現SQL語句。
Hive
=> 是一個框架;
=> Hive中必須有元數據,一般由 MySql 管理,必須開啓 metastore 服務;
=> Hive 中在建表時必須明確使用 DDL 聲明 schema;
=> 只支持 HQL 語句。
Hive:處理海量數據,比如一個月、一個季度、一年的數據量,依然可以處理,雖然很慢;
Spark SQL:這種情況下 Spark SQL 不支持,無法處理;
所以在企業中,Hive 和 Spark SQL 能夠共存,互爲彌補。
原文鏈接:https://blog.csdn.net/weixin_44196083/article/details/92404776