當前位置:首頁 » 編程語言 » sparksql與hive的區別
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sparksql與hive的區別

發布時間: 2022-09-12 16:53:35

⑴ Hadoop,Hive,Spark 之間是什麼關系

用hadoop -> hive ->spark ->報表工具(brio)的架構打通數據通路之後,做數據分析會變得非常簡單(just like 圖形化開發-拖拉拽)。
在構建spark離線數據分析平台之前,先簡單說明傳統的離線數據分析平台。

傳統離線數據分析工作,一般把數據結構化存儲在RDBMS,可通過sql代碼、報表工具、挖掘工具快速對數據進行分析。因為數據進行了結構化,進行數據分析時,可專注於業務過程。此模式最大的問題在於機器和軟體成本高,性能提升不能橫向擴展。

為了降低機器和軟體的投入,解決性能的橫向擴展問題,Hadoop、spark得以長足發展。目前介紹spark做數據分析的課程,多數是介紹spark做計算引擎,hadoop做數據存儲,用Java或者Scala進行分析數據工作。在實際應用中,這種做法會導致編碼量急劇上升,分析人員無法專注於業務,容易形成業務和技術的疲於應對。

為了簡化數據分析工作,需要加強對數據規范化的工作,為此,引入hive做數據結構化管理,開啟spark-thrift的ODBC/JDBC介面,數據分析工具(報表工具/挖掘工具)通過ODBC/JDBC接入。此架構的壓力在於數據規范化過程,或者說是日常數據加工過程,需以spark-sql、h-sql作為開發基礎,開發通用java介面模板調用spark-sql生成數據,h-sql負責數據入庫。此方法執行效率不是最高,但數據處理方法是規范了,降低了日常開發難度(以SQL編程為主),同時減少開發人員水平不一致導致的技術問題,另外數據分析人員可透明的使用數據進行分析(無需關心數據來源於RDBMS還是SPARK)。

⑵ hive和sparksql的區別

歷史上存在的原理,以前都是使用hive來構建數據倉庫,所以存在大量對hive所管理的數據查詢的需求。而hive、shark、sparlSQL都可以進行hive的數據查詢。shark是使用了hive的sql語法解析器和優化器,修改了執行器,使之物理執行過程是跑在spark上;而sparkSQL是使用了自身的語法解析器、優化器和執行器,同時sparkSQL還擴展了介面,不單單支持hive數據的查詢,可以進行多種數據源的數據查詢。

⑶ SparkSQL和Hive在做cast boolean存在的不同

今天在看一些數據的時候發現,一些SparkSQL與Hive之間在進行cast轉化時候存在一些差異。
HiveVersion 1.2.1
SparkSQL 1.6.0
總結:
在Hive中, boolean類型的隱式轉化,Hive中非boolean非null轉化默認為True,
而在SparkSQL中,則根據傳入的不同數據類型判斷值後返回結果.
Hive
Converts the results of the expression expr to . For example,
cast(『1』 as BIGINT) will convert the string 『1』 to its integral representation.
A null is returned if the conversion does not succeed.
If cast(expr as boolean) Hive returns true for a non-empty string.
hive> select cast('false' as boolean) from default.le;
OK
true123

SparkSQL
在SparkSQL中如果是string的話,會檢查StringUtils中枚舉的;其他原子類型數據進行是否不等於0,不等於0返回true,否則為false
具體代碼邏輯如下
classname: org.apache.spark.sql.catalyst.expressions.Cast

// UDFToBoolean
private[this] def castToBoolean(from: DataType): Any => Any = from match {
case StringType =>
buildCast[UTF8String](_, s => {
if (StringUtils.isTrueString(s)) {
true
} else if (StringUtils.isFalseString(s)) {
false
} else {
null
}
})
case TimestampType =>
buildCast[Long](_, t => t != 0)
case DateType =>
// Hive would return null when cast from date to boolean
buildCast[Int](_, d => null)
case LongType =>
buildCast[Long](_, _ != 0)
case IntegerType =>
buildCast[Int](_, _ != 0)
case ShortType =>
buildCast[Short](_, _ != 0)
case ByteType =>
buildCast[Byte](_, _ != 0)
case DecimalType() =>
buildCast[Decimal](_, !_.isZero)
case DoubleType =>
buildCast[Double](_, _ != 0)
case FloatType =>
buildCast[Float](_, _ != 0)
}

classname: org.apache.spark.sql.catalyst.util.StringUtils
//
private[this] val trueStrings = Set("t", "true", "y", "yes", "1").map(UTF8String.fromString)
private[this] val falseStrings = Set("f", "false", "n", "no", "0").map(UTF8String.fromString)

def isTrueString(s: UTF8String): Boolean = trueStrings.contains(s.toLowerCase)
def isFalseString(s: UTF8String): Boolean = falseStrings.contains(s.toLowerCase)

⑷ 為什麼sparkSQL

Shark和sparkSQL 但是,隨著Spark的發展,其中sparkSQL作為Spark生態的一員繼續發展,而不再受限於hive,只是兼容hive;而hive on spark是一個hive的發展計劃,該計劃將spark作為hive的底層引擎之一,也就是說,hive將不再受限於一個引擎,可以採用map-rece、Tez、spark等引擎。

Shark為了實現Hive兼容,在HQL方面重用了Hive中HQL的解析、邏輯執行計劃翻譯、執行計劃優化等邏輯,可以近似認為僅將物理執行計劃從MR作業替換成了Spark作業(輔以內存列式存儲等各種和Hive關系不大的優化);同時還依賴Hive Metastore和Hive SerDe(用於兼容現有的各種Hive存儲格式)。這一策略導致了兩個問題,第一是執行計劃優化完全依賴於Hive,不方便添加新的優化策略;二是因為MR是進程級並行,寫代碼的時候不是很注意線程安全問題,導致Shark不得不使用另外一套獨立維護的打了補丁的Hive源碼分支(至於為何相關修改沒有合並到Hive主線,我也不太清楚)。

此外,除了兼容HQL、加速現有Hive數據的查詢分析以外,Spark SQL還支持直接對原生RDD對象進行關系查詢。同時,除了HQL以外,Spark SQL還內建了一個精簡的SQL parser,以及一套Scala DSL。也就是說,如果只是使用Spark SQL內建的SQL方言或Scala DSL對原生RDD對象進行關系查詢,用戶在開發Spark應用時完全不需要依賴Hive的任何東西。

⑸ sparkSQL用jdbc連接hive和用元數據連接hive的區別,各自優缺點

spark on hive : 是spark 通過spark-sql 使用hive 語句操作hive ,底層運行的還是 spark rdd.
*(1)就是通過sparksql,載入hive的配置文件,獲取到hive的元數據信息
* (2)spark sql獲取到hive的元數據信息之後就可以拿到hive的所有表的數據
* (3)接下來就可以通過spark sql來操作hive表中的數據
hive on spark: 是hive 等的執行引擎變成spark , 不再是maprece. 相對於上一項,這個要實現責麻煩很多, 必須重新編譯你的spark. 和導入jar包,

⑹ spark sql和sql的區別

Shark和sparkSQL 但是,隨著Spark的發展,其中sparkSQL作為Spark生態的一員繼續發展,而不再受限於hive,只是兼容hive;而hive on spark是一個hive的發展計劃,該計劃將spark作為hive的底層引擎之一,也就是說,hive將不再受限於一個引擎,可以採用map-rece、Tez、spark等引擎。

⑺ spark sql能替代hive嗎

Spark SQL解決了這兩個問題。 第一,Spark SQL在Hive兼容層面僅依賴HQL parser、Hive Metastore和Hive SerDe。也就是說,從HQL被解析成抽象語法樹(AST)起,就全部由Spark SQL接管了。執行計劃生成和優化都由Catalyst負責。藉助Scala的模式匹配...

⑻ spark on hive和hive on spark的區別

spark on hive : 是spark 通過spark-sql 使用hive 語句操作hive ,底層運行的還是 spark rdd.
*(1)就是通過sparksql,載入hive的配置文件,獲取到hive的元數據信息
* (2)spark sql獲取到hive的元數據信息之後就可以拿到hive的所有表的數據
* (3)接下來就可以通過spark sql來操作hive表中的數據
hive on spark: 是hive 等的執行引擎變成spark , 不再是maprece. 相對於上一項,這個要實現責麻煩很多, 必須重新編譯你的spark. 和導入jar包,
======================下面是送的=============
而 hive on spark 是把hive查詢從maprece 的mr (hadoop 計算引擎)操作替換為spark rdd 操作. 不過目前大部分使用的是spark on hive
======================================
後面補充的:: 我去了某通之後, 知道了 把 hive的執行引擎換成spark 的也挺多的. 主要是為了使用類 sql 和相關腳本來完成任務.
為了真理,我要把那個垃圾的回答給頂下去...