精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SparkSQL 在企業級數倉建設的優勢

原創 精選
大數據 Spark
隨著企業的業務發展越來越復雜,需要更加靈活、更加高效的數倉架構,在這樣的業務驅動背景下,Hive 的局限變得越來越明顯,而基于 Spark SQL 靈活構建數倉的方案將會變得越來越主流。

前言

Apache Hive 經過多年的發展,目前基本已經成為業界構建超大規模數據倉庫的事實標準和數據處理工具,Hive 已經不單單是一個技術組件,而是一種設計理念。Hive 有 JDBC 客戶端、支持標準 JDBC 接口訪問的 HiveServer2 服務器、管理元數據服務的 Hive Metastore,以及任務以 MapReduce 分布式任務運行在 YARN 上。

標準的 JDBC 接口、標準的 SQL 服務器、分布式任務執行以及元數據中心,這一系列組合讓 Hive 完整地具備了構建一個企業級數據倉庫的所有特性,并且 Hive 的 SQL 服務器是目前使用最廣泛的標準服務器。

雖然 Hive 有非常明顯的優點,可以找出完全替代 Hive 的組件寥寥無幾,但是并不等于 Hive 在目前階段是一個完全滿足企業業務要求的組件,很多時候選擇 Hive 出發點并不是因為 Hive 很好地支持了企業需求,單單是因為暫時找不到一個能支撐企業訴求的替代服務。

企業級數倉構建需求

數倉架構通常是一個企業數據分析的起點,在數倉之下會再有一層數據湖,用來做異構數據的存儲以及數據的冷備份。但是也有很多企業,特別是幾乎完全以結構化數據為主的企業在實施上會把數據湖和企業數倉庫合并,基于某個數倉平臺合二為一。

企業在考慮構建自身數倉體系的時候,雖然需要參考現有的行業技術體系,以及可以選擇的組件服務,但是不能太過于局限于組件本身,尋找 100%開箱即用的產品。太過局限于尋找完全契合的組件服務必然受限于服務本身的實現,給未來擴展留下巨大的約束。企業數據倉庫架構必然不等于一個組件,大部分企業在數倉架構實施的都是基于現有的部分方案,進行基于自己業務合適的方向進行部分開發與定制,從而達到一個半自研的穩態,既能跟上業務變化的速度,又不過于依賴和受限于組件自身的發展。

一般來說企業級數倉架構設計與選型的時候需要從以下幾個維度思考:

  • 開發的便利性:所選擇的數倉架構是否具有很好的開發生態,可以提供不同類型的開發態接口,不限于 SQL 編輯器,代碼提交,以及第三方工具整合。
  • 生態:所選擇實現引擎自身是否有很好的生態功能,或者是否可以很好的與其他服務集成,例如數據湖引擎 delta lake,icebeg,hudi 等優秀組件出現,但是 Hive 集成的節奏卻非常慢。
  • 解耦程度:分布式任務必然需要多個組件的協調,例如分布式存儲,資源管理,調度等,像 Hive 就重度依賴于 YARN 體系,計算引擎也與 MR 強綁定,在解耦方面較弱,如果企業考慮在 K8S 上構建自己的計算引擎,Hive 面臨的局限會更加明顯。
  • 性能:整體架構是否擁有更好的性能。
  • 安全:是否支持不同級別,不同力度的用戶訪問和數據安全鑒權體系。

對于企業數倉架構來說,最重要的是如何基于企業業務流程來設計架構,而不是基于某個組件來擴展架構。

一個企業數倉的整體邏輯如上圖所示,數倉在構建的時候通常需要 ETL 處理和分層設計,基于業務系統采集的結構化和非結構化數據進行各種 ETL 處理成為 DWD 層,再基于 DWD 層設計上層的數據模型層,形成 DM,中間會有 DWB/DWS 作為部分中間過程數據。

從技術選型來說,從數據源的 ETL 到數據模型的構建通常需要長時任務,也就是整個任務的運行時間通常是小時及以上級別。而 DM 層主要是支持業務的需求,對時效性要求比較高,通常運行在 DM 層上的任務時間以分鐘作為單位。

基于如上的分層設計的架構圖可以發現,雖然目前有非常多的組件,像 Presto、Doris、ClickHouse、Hive 等等,但是這些組件各自工作在不同的場景下,像數倉構建和交互式分析就是兩個典型的場景。

交互式分析強調的是時效性,一個查詢可以快速出結果,像 Presto、Doris、ClickHouse 雖然也可以處理海量數據,甚至達到 PB 及以上,但主要還是用在交互式分析上,也就是基于數據倉庫的 DM 層,給用戶提供基于業務的交互式分析查詢,方便用戶快速進行探索。由于這類引擎更聚焦在交互式分析上,因此對于長時任務的支持度并不友好,為了達到快速獲取計算結果,這類引擎重度依賴內存資源,需要給這類服務配置很高的硬件資源,這類組件通常有著如下約束:

  • 沒有任務級的重試,失敗了只能重跑 Query,代價較高。
  • 一般全內存計算,無 shuffle 或 shuffle 不落盤,無法執行海量數據。
  • 架構為了查詢速度快,執行前已經調度好了 task 執行的節點,節點故障無法重新調度。

一旦發生任務異常,例如網絡抖動引起的任務失敗、機器宕機引起的節點丟失,再次重試所消耗的時間幾乎等于重新提交一個任務。在分布式任務的背景下,任務運行的時間越長,出現錯誤的概率越高。對于此類組件的使用,業界最佳實踐的建議也是不超過 30 分鐘左右查詢使用這類引擎是比較合適的。

而在離線數倉場景下,幾乎所有任務都是長時任務,也就是任務運行時長在小時級以上,這時就要求執行 ETL 和構建數倉模型的組件服務需要具有較高的容錯性和穩定性,當任務發生錯誤時可以以低成本的方式快速恢復,盡可能避免因為部分節點狀態異常導致整個任務完全失敗。

可以發現在這樣的訴求下類似于 Presto、Doris、ClickHouse 就很難滿足這樣的要求,而像 Hive、Spark 這類計算引擎依托于 Yarn 做資源管理,對于分布式任務的重試、調度、切換有著非常可靠的保證。Hive、Spark 等組件自身基于可重算的數據落盤機制,確保某個節點出現故障或者部分任務失敗后可以快速進行恢復。數據保存于 HDFS 等分布式存儲系統上,自身不管理數據,具有極高的穩定性和容錯處理機制。

反過來,因為 Hive、Spark 更善于處理這類批處理的長時任務,因此這類組件不擅長與上層的交互式分析,對于這種對時效性要求更高的場景,都不能很好地滿足。所以在考慮構建數倉的時候,通常會選擇 Hive、Spark 等組件來負責,而在上層提供交互式分析查詢的時候,通常會使用 Presto、Doris、ClickHouse 等組件。

歸納如下:

  • Presto、Doris、ClickHouse:更注重交互式分析,對單機資源配置要求很高,重度依賴內存,缺乏容錯恢復,任務重試等機制,適合于 30 分鐘以內的任務,通常工作在企業的 DM 層直接面向業務,處理業務需求。
  • Hive、Spark:更注重任務的穩定性,對網絡,IO 要求比較高,有著完善的中間臨時文件落盤,節點任務失敗的重試恢復,更加合適小時級以上的長時任務運行,工作在企業的的 ETL 和數據模型構建層,負責清洗和加工上層業務所需要的數據,用來支撐整個企業的數倉構建。

一個企業在實施數據平臺的時候,由多個不同組件各自工作在不同的架構層中,無法相互取代,相互協作配合,承載整個企業的數據平臺業務。

企業級數倉技術選擇

Google 發表的三篇論文從存儲、計算、檢索三個方向闡述了海量數據下一種新的分布式數據加工處理技術,這三個方向被雅虎 Nutch 團隊實現后貢獻給 Apache,也就是目前大家看到的 HDFS、MapReduce 和 HBase,形成了早期 Hadoop 的三大利器。

然而這三大利器更聚焦在異構數據的信息提取處理上,沒有提供對結構化數據很友好的類似 SQL 語法的分析入口,同時在編程態的支撐也不夠友好,只有 Map 和 Reduce 兩階段,嚴重限制了業務處理的實現,雅虎團隊也是爬蟲相關業務孵化而出,可以看出 Hadoop 早期的三大套件有著如下特點:

  • 門檻高,需要編程實現,并且編程態受限于 MapReduce 的兩階段約束。
  • 以離散數據處理為主,對分析能力、查詢等常用數據分析功能支持不足。
  • 沒有交互式客戶端,無法實現交互式探索。

Hive 就是誕生在這樣的較大的行業背景下,Hive 的出現剛好彌補了 Hadoop 只能用來做離線數據處理這個缺陷,提供了一種常用的分析接口,并且提供了非常好的用戶交互方式。

Hive 整體架構如上圖所示,Hive 提供 JDBC 接口實現支持以編程形式進行交互,同時業內幾乎所有 SQL Client、開源或商業 BI 工具都支持通過標準 JDBC 的方式連接 Hive,可以支持數據探索的動作,極大地豐富了大數據生態圈下的組件多樣性,同時也降低了使用門檻,可以讓熟悉 SQL 的人員低成本遷移。

基于這些設計非常好的特效,加上 Hive 經過多年的逐步完善,發展到今天已經是一個非常穩定成熟的生產環境可用的數據倉庫組件,甚至替代品都很難找到,因此使用 Hive 作為數據倉庫的構建基礎是一個非常好的選擇。

如上圖所示,其中有很多優點:

  • 穩定:穩定性是 Hive 一個非常讓人稱道的特性,很多時候雖然 Hive 的性能,計算速度不及其他引擎,但是 Hive 的穩定性卻一直是非常好的。
  • 低門檻:只需要掌握基本的 SQL 技能,便可使用 Hive 進行開發,相比其他分布式計算引擎引擎成本更低。
  • 生態豐富:Hive 和 Hadoop 生態圈緊密結合,而 Hive 自身的 Metastore 也成了大數據生態圈內的標準元數據服務,大部分引擎都支持直接適配 MetaStore。
  • 擴展方便:Hive 自身的 UDF 機制可以快速基于業務需要擴展功能。
  • 安全:Hive 支持 Kerberos/LDAP 多種認證方式,并且和 Ranger 結合可以做到更細粒度的行列權限級別,擁有較好的數據安全。
  • 集成成本低:MapReduce 只支持編程態的接口,并且不支持迭代計算,Hive 封裝了 MapReduce 提供 SQL 的接口,可以很低成本的和上層數據挖掘,數據分析工具進行集成。

所以,雖然 Hive 出現已經有很長時間了,但依舊是數倉構建的首選,在整個數倉構建中隨處可見 Hive 的身影。盡管 Hive 有種種優點,讓人難以割舍,但是并不等于能很好地支撐企業業務需求。很多時候選擇 Hive 僅僅是因為暫時沒有其他可選的組件,如果自己從頭開發一個,或者基于某個組件改造,成本又會遠超企業預期,因此不得不繼續選擇使用 Hive。

基于實踐來看,Hive 在構建企業數倉過程中存在的主要局限圍繞在以下幾個方面:

  • 性能:Hive 基于 MapReduce 雖然帶來了非常好的穩定性,同時也降低了它的性能,雖然有 TEZ 做一定的優化,但是與同類的計算引擎 Spark 相比依舊有非常大的差距。
  • 資源配置:由于 Hive 底層使用 MapReduce 作為計算引擎,而 MapReduce 對 SQL 不友好,因此 Hive 在 HiveServer2 層面實現了 SQL 的轉換處理,再生成基于 MapReduce 的物理計劃,從而導致 HiveServer2 需要非常高的配置,才能維持足夠好的穩定性。
  • 并發:Hive 的并發受限于 HiveServer2,企業需要維護多個高配的 HiveServer2 實例才能支持更好的并非,通常 Hive 的瓶頸都在 HiveServer2 而不是更底層的分布式計算。
  • 容錯成本:Hive 基于 HiveServer2 進行 SQL 的分析處理,多個 HiveServer2 之間相互獨立不共享信息,因此當 HiveServer2 掛掉后,整個 HiveServer2 的任務都會結束,需要客戶端自行重試,為整個作業級別的容錯重啟。
  • 事務支持:Hive 的事務設置在 HiveServer2 上,一旦 HiveServer2 實例開啟事務后,整個通過該 HiveServer2 的請求都會開啟事務,整個事務成本過高。
  • 部署:如果企業的計算引擎部署是基于 K8S 等容器架構,Hive on K8S 將會帶來非常大的部署成本。

雖然 Hive 在以上局限層面也做了很多嘗試(Hive On Spark),但是受限于 Hive 的架構,HiveServer2 自身有自己的 SQL 解析引擎,為了兼容架構將解析后的結果直接翻譯成 Spark 最底層的接口,整體性能反而提升不大。

除了 Hive 之外,還有非常多其他的優秀組件。然而,從企業數倉技術選型的視角來看,適合用來構建數據倉庫的,目前只有 Hive 和 Spark SQL 相對更加合適,在這兩個組件中,Spark SQL 相對 Hive 的優勢又更加明顯。

SparkSQL 如何支撐企業級數倉

Spark 引擎因為自身強大的生態和方便的編程接口被廣泛應用在數據處理場景下,Spark 提供的 Spark SQL 模塊更是為使用 Spark 支撐企業數據倉庫提供了一個良好的基礎設施。

如上圖所示,一個典型的數據倉庫架構需要包含不同層次的模型構建。由于數據量大、數據結構異構等多種原因,大數據架構下的企業數倉構建拋棄了基于關系型數據庫下的 Cube 設計,直接采用基于分布式任務進行處理來構建多層數據模型。因此對于構建企業數倉的服務來說,有著如下要求:

  • 支持長時任務,通常是小時以上,天級別居多。
  • 支持多任務,也就是高并發。
  • 穩定性必須被保障。
  • 速度快。
  • 支持 SQL 的交互式接口。
  • 易于集成。
  • 支持任務的重跑和容錯以及快速任務失敗恢復。

基于以上特性可以發現,在目前可選擇的組件范圍內,Spark SQL 相比其他組件(乃至 Hive)更加適合承擔這類任務。但是很多企業在進行架構設計的時候割舍不掉 Spark SQL 帶來的豐富特性,又愁于 Spark SQL 缺乏類似 Hive 這樣的 SQL 服務器,于是退而求其次變成 Hive 與 Spark SQL 兩個組件共存的形態,Hive 退化為僅僅提供 MetaStore 服務,因此從很多實踐的現象來看,Hive 構建企業數倉已是過去式,采用 Spark SQL 進行數據倉庫的構建是眾多的選擇。

如上圖所示,企業在構建數倉的時候,通過一個 Spark SQL Server 提供基于 SQL 接口的常駐服務,同時也可以采用 Spark Submit 的方式直接提交 Jar 任務去運行,既能達到提供標準 SQL 交互式接口,又能提供更靈活的編程態接口。

從不同的企業級數倉構建視角來看,Hive 帶來的約束都越來越大,而 Spark SQL 的成熟度和發展趨勢已經完全具備取代 Hive 來構建整個數倉,Spark SQL 的優勢集中體現在如下方面:

  • 豐富的生態:Spark 不僅可以和很多組件集成,其自身擁有生態已經涵蓋各個方面,從數據分析到機器學習和圖計算。
  • 開放:Spark 架構設計上非常開放,可以快速整合其他產品,例如相比 Hive,在集成 Iceberg,Hudi 等特性方面就會開放很多。
  • 部署:Spark 既可以部署在 ECS 虛擬機上,也可部署在 K8S 架構上,多種部署形態非常靈活。
  • 性能:Spark 的機制的流批處理性能非常合適用來構建企業數倉。
  • 易于開發:Spark SQL 既有 SQL 接口,也支持靈活的可迭代編程接口,非常方便不同場景下的數據開發。
  • 安全:Spark SQL 可和不同的安全服務集成,實現細粒度的鑒權。

因此,完全基于使用 Spark SQL 來支撐企業級的數倉是完全可行的,并且在目前也被眾多企業實踐驗證。

如上圖所示,一個基于 Spark SQL 構建的企業數倉架構邏輯架構設計上包含以上幾個部分,每一個 Spark SQL 引擎都是一個服務器,Spark SQL 引擎將自己的信息注冊到 Zookeeper 中,SQL 服務器基于 Zookeeper 中的 Spark SQL 引擎來執行客戶端過來的請求,SQL 服務器是一個兼容 Hive JDBC 接口的服務器,在使用 Spark SQL 來支撐數倉構建的時需要重點考慮的實施點是:

  • 如何提供一個交互服務用來支撐不同的客戶端來連接,包括交互式的 beeline,以及編程態的 JDBC 和工具接口。
  • 如何打通權限對接,如果是 Ranger 的話需要的是 Spark SQL Ranger Plugin。
  • 如何支持跨多個隊列的任務提交。

使用 Spark SQL 支撐企業級數倉的核心之處還是在于如何提供一個好用的任務服務器,用來支撐任務的管理。任務管理服務器在邏輯上與 HiveServer2 相似,但是更加的輕量,沒有 HiveServe2 中復雜而繁重的 SQL 解析,同時又沒有 Spark Thrift Server 這種自身就是一個 YARN 作業的約束。企業可以基于自身的業務流程,開發一個輕量的服務器,在這方面字節有非常深的實踐經驗,同時也有自己的 Spark SQL 引擎服務器,可關注后續的動態。同時業界也有其他企業做了類似的工作,例如網易開源的 Kyuubi。

Kyuubi 整個架構圖如上所示,Kyuubi 基于 Spark SQL 之上,較好地彌補了 Spark Thrift Server 在多租戶、資源隔離和高可用等方面的不足,是一個真正可以滿足大多數生產環境場景的開源項目。但是 Kyuubi 在設計時考慮的是如何彌補 Spark Thrift Server 的不足,目的在于增強 Spark SQL 的能力,而不是對等設計一個可以替換 Hive 組件的服務。因此對于遺留項目來說遷移成本較高,Spark SQL 與 Hive 有著兩套不兼容的 SQL,在使用 Kyuubi 的時候如何降低遺留系統的遷移成本將是一個非常大的工作量。

而行業也有開源的 Spark Thrift Server,該思路是非常優秀的,但是因為開發過程中有點太過于局限,導致依舊存在很多問題,主要體現在:

  • Driver 單點:整個 Spark thrift server 以一個 Spark 任務的形式運行在 YARN 上,所有的請求都運行在一個 Driver 中,一旦 Driver 掛掉后,所有任務都會同時失敗。
  • 資源隔離:因為 Spark thrift server 是以 Spark 任務的形式運行在 YARN 上,因此提交的任務如果有跨隊列提交需求的時候,Spark thrift server 很難支撐,其次多個任務運行在同一個 Driver 之中,資源使用會相互影響,很難更精細化的進行資源的管理。
  • 多租戶:Spark thrift server 從請求層面是可以支持多用戶的,但是從架構層面來看 Spark thrift server 是一個運行在 Yarn 上的任務,它也有自己的 Application Id 有自己的任務提交者,因此它實際上是以一個超級管理員的身份運行,再做二次租戶隔離,必然存在一定的資源安全問題。
  • 高可用:Spark thrift server 本身是沒有高可用涉及的,因此它的高可用需要自行單獨設計,且還得考慮客戶端的兼容,例如 Hive JDBC 將 HA 信息存儲在 ZK 中,而 Spark thrift server 沒有這樣的機制,因此高可用的實施成本較高。

因此雖然 Spark 提供了 Spark thrift server 服務用來提供類似 JDBC 這樣的接口交互方式,但是目前依舊缺乏很多生成功能,導致在生產環境使用的情況非常少,Spark thrift server 更像是一個小眾的半成品,小修小補地嘗試著解決部分問題,但是沒有給予一個徹底的方案,導致現在有點缺乏實際的生產應用。

字節跳動 EMR 產品在 Spark SQL 的優化實踐

數據湖引擎集成

Hudi、Iceberg 等數據湖引擎目前使用的越來越廣泛,很多 B 端客戶在使用 Spark SQL 的時候也存在需要使用數據湖引擎的需求,因此字節 EMR 產品需要將數據湖引擎集成到 Spark SQL 中,在這個過程中遇到了非常多的問題。

首先在與 Iceberg 集成的時候,對體驗和易用的問題進行了優化,用戶在使用 Spark SQL 過程中,需要手動輸入很多指令,并且需要找到對應的 spark-iceberg 依賴包,這個也是目前集成 Iceberg 最常用的方案。我們的解決方式是在預先安裝的過程中,提前把 iceberg 的相關 jar 包放到 spark jars 目錄下,這樣用戶只需要指定 catalog 即可,無需再手動輸出很多指令。

其次在 Spark 與 Hive 跨引擎分析場景下使用 Iceberg,Spark 正常創建表,Presto/Trono 可以正常讀寫,但 Hive 無法正常讀寫,這個問題官方的文檔也沒有清晰的描述,解決方案是需要修改 Spark 的配置文件或者修改 Hive 的 hive-site-spark override 配置,確保初始化出來的 Spark Session 中的配置項 iceberg.engine.hive.enable 的值為 true,Hive 才能正常地讀取 Spark 創建的表。

問題本質上是由于 Iceberg 為了支持 Hive 引擎,在整體的設計上做了一些妥協,使用了 Storage Handler 的方式去實現 Hive 對 Iceberg 格式的表的讀寫,需要顯式的指定 Hive 的 Input/Output Format 實現,而 Presto/Trono 則可以基于 Hive 的 format_type 自動識別表的格式進行識別。

在兼容性上,由于 Iceberg 0.12 版本不支持 Spark 3.2,由于升級 Spark 的影響范圍非常大,于是更新了 Iceberg,使用了社區的一個 master 的 snapshot 版本進行編譯,與 Spark 3.2 進行集成。

Spark SQL 服務器

雖然行業針對 Spark SQL 提供一個 SQL 服務器已經有 Spark Thrift Server 或者 Kyuubi 這樣的工具,但是在某些 B 端客戶的業務背景下,這些工具并不能完全滿足要求,因此字節跳動 EMR 團隊自己設計實現了 Spark SQL Server,主要聚焦解決的是如下場景:

  • 兼容 Hive 語義:由于大部分 B 端客戶早期是基于 Hive 構建的數據倉庫,后續逐步全部替換為 Spark SQL,中間必然面臨大量的系統遷移,而由于 Hive 與 Spark SQL 語義不盡相同,重寫 SQL 實現的工作量非常大,因此在字節 EMR 產品中的 Spark SQL Server 中實現 Hive 語義和 Spark SQL 語義的兼容,在實現方案上采用的時候講 Hive SQL 解析注入到 Spark 引擎中,形成一個 SQL Parser Chain,最終會匹配到某一個解析器,實現對 SQL 的解析,從而達到對整個 SQL 語義的兼容。
  • 提前初始化 Spark SQL 引擎:在業務請求到達前提前在 YARN 上提交 Spark 任務,初始化資源信息,讓整個引擎處于等待的狀態,可以減少任務提交消耗的時間,在用戶較多的情況下可以提示整體的任務執行時間。
  • 跨 Yarn 隊列的任務提交:用戶可以指定 Yarn 隊列執行任務。

如上圖所示,SQL 服務器是一個實現了 Thrift 接口的服務器,提供標準的 JDBC 訪問接口,Spark SQL 引擎同樣實現了 Thrift 接口,Spark SQL 引擎在服務啟動的時候便已經被提交至 Yarn,處于等待狀態。當業務任務到達的時候,由 SQL 服務器實現引擎的篩選,匹配一個已經存在的引擎,或者重新提交一個全新的引擎用來執行任務。

SQL 服務器支持 OpenLDAP、Kerberos 等常用的權限認證,同時支持多種不同的隔離級別,例如 Session 級別則每一個業務 SQL 都會初始化一個 Spark SQL 引擎用來接收任務,任務執行結束后,引擎從 Yarn 中銷毀。而 User 級別則針對用戶會初始性 0-N 個引擎,常駐于 Yarn 中,處于交替執行任務。

這樣的服務器設計打破了 Spark Thrift Server 的單 Driver 所帶來的局限,解耦了 SQL 服務和任務執行。也就支持更細粒度的資源管理和跨隊列的任務提交。

同時也兼容了 Hive 的接口,用戶可以通過如下方式訪問服務器:

HA 訪問鏈接:

./bin/beeline -u 
"jdbc:hive2://emr-5fqkwudj144d2gc1k8hi-master-1/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=midas/ha;auth=LDAP"
-n emr_dev -pEMR123456emr

非 HA 訪問鏈接:

./bin/beeline -u "jdbc:hive2://emr-master-2:10005/default;auth=LDAP” -n 
test_sub -pEMR123456emr

HA 模式下的信息被記錄在 Zookeeper 中,保存的內容格式與 HiveServer2 的內容一致,能確保使用 Hive 的客戶端可以直接訪問 HA 模式下的服務器。

Spark SQL 多租戶

在 Hive 任務執行過程中,HiveServer2 服務承擔了提供 SQL 服務器進行用戶身份認證、權限判斷,以及解析 SQL 生成最終的執行計劃,再由 MR 引擎執行具體的分布式任務。

在這個過程中 HiveServer2 承擔了非常重的職責,因此需要消耗非常大的資源,因此會很大程度的影響用戶的并發。對于分布式任務運行來說,它的資源約束來自于 Yarn 作為資源管理器所分配的資源,但是在 Hive 架構下卻受限于 HiveServer2 的影響,導致用戶并發的數量無法隨著 Yarn 資源的提升而提升。

而在 Spark SQL 引擎中,SQL 解析是下推到引擎內部,與具體的分布式任務執行合為一體,不需要單獨的服務器去做 SQL 解析。也正因為 Spark SQL 與 Hive 在解析模塊的架構存在差異,Hive On Spark 的模式會變得非常難。

針對如上的場景,字節跳動 EMR 團隊重新設計的 SQL 服務器只負責任務的接收,進行用戶資源、權限和身份的判斷,然后將任務發送給運行在 Yarn 中的 Spark SQL 服務器。打破了 Hive 這種并發受制于 HiveServer2 和 Yarn 兩層約束的局面,只由 Yarn 的資源決定用戶的并發程度,從而極大的降低了 Spark SQL 服務器的資源需求,增強了其穩定性,在用戶并發上有了非常大的提升。

其次通過引擎預熱的功能減少任務執行的時間,提升整體速度,引擎預熱指的是在服務啟動的時候便向 Yarn 提交 Spark SQL 引擎,處于等待的狀態,當業務請求到達的時候,基于業務類型從已經處于就緒的引擎中選擇一個引擎來執行任務。

并不是每一個預熱提交的引擎都會被選擇執行,在 SQL 服務器中存在如下三種引擎隔離級別:

  • Session:基于每一個 connection 都會全新提交 Spark SQL 引擎,在鏈接斷開后,引擎從 Yarn 上銷毀。
  • User:同一個用戶可以共享多個 Spark SQL 引擎,具體的 Spark SQL 引擎個數由該用戶提交的任務資源需求決定,引擎在連接斷開后不會銷毀,直到引擎空閑時長到達上限。
  • Open:所有用戶都可共享的 Spark SQL 引擎,通常是用來應對大賬號,或者集群不需要做權限管理的場景。

由此可見只有在 User、Open 的級別下引擎預熱才會產生價值,預熱省去了 Spark Submit 的時間,當用戶數量足夠多,群體為統計單位所節省的時間越多。

Spark SQL 事務支持

Hive 的事務力度是基于 HiveServer2 實現的,例如通過如下語法:

CREATE TABLE tm (a int, b int) stored as orc TBLPROPERTIES
('transactional'='true', 'transactional_properties'='insert_only')

可開啟事務,但是由于對事務的管理是在服務器上,因此需要開啟 ACID 的時候受影響的是整個 HiveServer2 的所有請求,而 Spark SQL 很好地集成和支持了 Hudi,Iceberg 等數據湖格式,因此在 Spark SQL 服務器中不需要實現類似 HiveServer2 的事務機制,只需要在最終讀取處理數據的時候,采用 Hudi、Iceberg 等特性便可達到支持事務的效果。

例如對于 Icdberg 數據格式的表已支持 update、delete 操作:

MERGE INTO prod.nyc.taxis ptUSING (SELECT * FROM staging.nyc.taxis) stON 
pt.id = st.idWHEN NOT MATCHED THEN INSERT *;

因此當 Spark SQL 集成了 Iceberg 后,便具有了事務能力,再配合 SQL 服務器,便可在很低的成本上具有和 Hive 事務能力同等的效益,同時也沒有 Hive 下的一些約束,從這樣的架構設計上來看,能夠完整地替換 Hive。另外一個方面當用戶數量變多,同時數據會發生修改、更新等操作,很容易造大量的小廣播傳輸,從而引起 Driver 的 OOM。雖然大廣播也會存在 OOM 的問題,但是大廣播可以通過閾值控制,而小廣播閾值對其不生效,一旦說數量變多,很容易引起 Driver 的 OOM。字節 EMR 團隊通過對小廣播進行合并廣播,解決大量小廣播進行傳播,導致打爆 Driver 的情況出現。

尾聲

隨著企業的業務發展越來越復雜,需要更加靈活、更加高效的數倉架構,在這樣的業務驅動背景下,Hive 的局限變得越來越明顯,而基于 Spark SQL 靈活構建數倉的方案將會變得越來越主流。所以企業在考慮數據倉庫構建體系的時候,可以考慮如何基于 Spark SQL 構建自身數據體系,Spark 完善和開放的生態在未來必然會有更多優秀的服務圍繞 Spark 形成強大的優勢。

責任編輯:未麗燕 來源: 51CTO.com
相關推薦

2022-10-13 09:38:01

數據建設

2025-03-10 00:13:00

數據庫脫敏日志脫敏出脫敏

2021-06-21 11:57:04

數據中臺數字化轉型數字化

2012-04-13 13:58:52

數據加密

2010-12-14 19:56:32

IBM

2009-03-19 09:49:00

華為數據備份賽門鐵克

2010-04-26 15:27:07

互聯網

2013-07-19 10:21:02

數據中心四維模型評價

2022-01-04 20:34:00

數據安全Relay

2024-09-03 14:59:00

2019-11-06 10:43:20

HBaseSpark數據處理平臺

2022-01-06 20:00:39

數據企業安全

2011-02-24 10:58:16

數據庫開源

2009-01-18 16:08:30

數據倉庫商務智能數據提取層

2010-05-24 09:04:08

2022-01-05 20:16:52

Sentry Relay 數據安全

2022-01-09 21:46:22

安全數據Sentry

2022-01-08 15:08:17

項目配置Sentry

2014-08-18 09:01:09

Teradata數據倉庫
點贊
收藏

51CTO技術棧公眾號

91嫩草在线| 久久综合免费视频影院| 久草青青在线观看| 成年人在线观看网站| 国产乱人伦精品一区二区在线观看| 伦理中文字幕亚洲| 30一40一50老女人毛片| 欧美一级免费| 激情久久av一区av二区av三区| 日本一区二区三不卡| 精品人妻aV中文字幕乱码色欲| 日韩午夜一区| www.久久久久| 免费a级黄色片| 国产一区二区高清在线| 黄色精品在线看| 椎名由奈jux491在线播放| 香蕉视频黄在线观看| 国产一区二区三区综合| 庆余年2免费日韩剧观看大牛| chinese全程对白| 亚洲最好看的视频| 精品福利一区二区三区免费视频| 宅男噜噜噜66国产免费观看| а√在线中文网新版地址在线| 亚洲国产精品黑人久久久| 国产日韩一区欧美| 99在线精品视频免费观看20| 日本va欧美va精品发布| 97人人做人人爱| 欧美精品久久久久久久久46p| 亚洲高清极品| 亚洲高清在线观看| 少妇性l交大片7724com| 成人午夜亚洲| 色狠狠色噜噜噜综合网| 日本www在线播放| 日本动漫同人动漫在线观看| 综合久久国产九一剧情麻豆| 色狠狠久久av五月综合| 婷婷婷国产在线视频| 成人国产精品视频| 99高清视频有精品视频| 国产精品自产拍| 久久国产综合精品| 国产伦精品一区二区三区精品视频| 亚洲黄色免费观看| 欧美亚洲在线| 欧美孕妇与黑人孕交| 亚洲天堂日韩av| 在线播放一区| 午夜精品一区二区三区在线| 一区二区三区免费高清视频| 午夜欧美理论片| 欧美成年人视频网站| 日韩成人短视频| 91九色精品| 久久久av亚洲男天堂| 精品无码一区二区三区蜜臀| 97精品国产| 久久综合色88| 国产在线观看成人| 最新亚洲视频| 538国产精品一区二区在线| 日韩久久精品视频| 香蕉久久夜色精品| 国产成人亚洲综合| 在线观看xxxx| 国产美女一区二区三区| 岛国视频一区免费观看| 午夜视频www| 久久精品一区二区三区av| 神马影院午夜我不卡影院| 99精品老司机免费视频| 中文字幕亚洲区| 成人午夜免费剧场| 超碰中文在线| 欧美最猛性xxxxx直播| 亚洲欧美自偷自拍另类| 国产精品1区| 亚洲国产天堂久久国产91| 免费的av网站| av亚洲免费| 成人444kkkk在线观看| 免费中文字幕在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 日韩av电影手机在线观看| 这里只有久久精品视频| 国产精品性做久久久久久| 精品一区在线播放| aⅴ在线视频男人的天堂| 一区二区三区在线免费观看| 国产亚洲综合视频| 99视频这里有精品| 亚洲国产成人91精品| 尤物视频最新网址| 中文字幕免费一区二区| 日本免费久久高清视频| 国产人妖一区二区三区| 91视视频在线直接观看在线看网页在线看 | 欧美性视频一区二区三区| 亚洲综合123| 少妇精品久久久一区二区三区| 久久久精品视频在线观看| 国产又色又爽又黄的| 麻豆精品国产91久久久久久| 国产区日韩欧美| 麻豆传媒免费在线观看| 欧美日韩免费区域视频在线观看| 中文字幕线观看| 特黄特色欧美大片| 久青草国产97香蕉在线视频| 久久精品视频2| 国产成人精品aa毛片| 手机看片福利永久国产日韩| brazzers在线观看| 欧美一区二区网站| 日韩影视一区二区三区| 日韩午夜高潮| 国产美女99p| 麻豆传媒在线免费| 日韩欧美在线视频| 无码人妻精品一区二区三| 91精品国产91久久久久久黑人| 欧洲亚洲女同hd| 免费观看的毛片| 亚洲免费在线视频| 色婷婷.com| 美女亚洲一区| 欧美专区第一页| 午夜福利视频一区二区| 亚洲高清在线精品| 熟女人妻一区二区三区免费看| 欧美激情偷拍自拍| 国产aⅴ夜夜欢一区二区三区| 全部免费毛片在线播放一个| 亚洲一区国产视频| 成人做爰69片免费| 欧美a级片一区| 91系列在线播放| 精品美女在线观看视频在线观看| 欧美影视一区二区三区| 一区二区黄色片| 久久久xxx| 久久偷窥视频| 国产日韩电影| 亚洲香蕉成视频在线观看| 色屁屁影院www国产高清麻豆| 91麻豆视频网站| 欧美国产激情视频| 九九免费精品视频在线观看| 国产成+人+综合+亚洲欧洲| 久久久久久女乱国产| 色综合色综合色综合色综合色综合| 欧美xxxxx精品| 99精品国产99久久久久久福利| 国产嫩草一区二区三区在线观看| 国产夫妻在线播放| 亚洲国产精久久久久久| 久久亚洲精品国产| 久久久久久久久久久99999| 欧美 日韩 国产 高清| 西瓜成人精品人成网站| 国产成人精品网站| 成人在线免费视频| 欧美另类高清zo欧美| 中文字幕五月天| 风间由美性色一区二区三区| 国产免费观看高清视频| 免费精品国产| 国产精品自产拍高潮在线观看| 国产原厂视频在线观看| 欧美成人国产一区二区| 日本va欧美va国产激情| 国产亚洲福利社区一区| 国产欧美一区二| 最新精品国产| 欧美精品一区在线| 黄色成人在线观看网站| 欧美激情在线观看| 日韩三级电影网| 欧美疯狂性受xxxxx喷水图片| 国产一二三四区| 99精品国产91久久久久久| 国产情侣av自拍| 午夜精品久久| 欧美大香线蕉线伊人久久| 日韩三级成人| 韩国美女主播一区| 国产三级视频在线播放线观看| 91精品国产综合久久久蜜臀图片| 国产无精乱码一区二区三区| 国产欧美一区二区精品性色| 亚洲av无码成人精品区| 丝袜美腿成人在线| 日本老太婆做爰视频| 国产欧美高清视频在线| 7777精品伊久久久大香线蕉语言 | 国产在线91| 日韩一区二区三区电影| 亚洲 欧美 中文字幕| 曰韩精品一区二区| 国产美女永久免费无遮挡| 粉嫩欧美一区二区三区高清影视| 九九热在线免费| 日韩亚洲国产欧美| 国产911在线观看| 精品久久成人| 国内精品视频免费| 国产精品欧美一区二区三区不卡| 日韩暖暖在线视频| 91黄页在线观看| 欧美精品情趣视频| 午夜免费播放观看在线视频| 日韩精品福利网站| 精品人妻伦一区二区三区久久| 欧美伊人久久久久久久久影院| 成人免费看片98| 亚洲精选视频免费看| 人妻熟人中文字幕一区二区| 91蜜桃免费观看视频| 苍井空张开腿实干12次| 韩国视频一区二区| 视频二区在线播放| 久久午夜电影| 成人免费在线小视频| 在线成人国产| 日本黄大片在线观看| 亚洲精品在线观看91| 亚洲综合av一区| 欧洲美女日日| 午夜精品一区二区在线观看的| 色婷婷久久久| 精品乱色一区二区中文字幕| 97视频一区| eeuss一区二区三区| 精品国产18久久久久久二百| 国产在线拍揄自揄视频不卡99| 欧美少妇激情| 国产精品久久一| 欧美性片在线观看| 国产精品69精品一区二区三区| 三级在线看中文字幕完整版| 91a在线视频| 日本在线影院| 欧美影院在线播放| 久久人体大尺度| 国产v综合v亚洲欧美久久| 美女18一级毛片一品久道久久综合| 8x拔播拔播x8国产精品| 蜜桃麻豆av在线| 欧日韩在线观看| 欧美aaa大片视频一二区| 国产精品www| 婷婷久久免费视频| 91一区二区三区| av综合网页| 精品国产免费一区二区三区 | 成人小视频在线| 无码av免费精品一区二区三区| 成人国产精品免费观看| 性久久久久久久久久久| 91麻豆国产自产在线观看| 最近中文字幕在线mv视频在线| 久久久精品人体av艺术| 99久久精品免费视频| 国产精品青草久久| 538精品在线视频| 亚洲一区二区偷拍精品| 1级黄色大片儿| 色欧美片视频在线观看在线视频| 奴色虐av一区二区三区| 欧美日韩免费视频| 99热这里只有精品在线| 亚洲精品xxxx| 在线日本中文字幕| 另类色图亚洲色图| 人成在线免费网站| 国产精品免费看久久久香蕉| 99综合99| 久久精品一区二区三区不卡免费视频| 国产探花一区二区| 中文字幕一区二区三区在线乱码| 伊人久久亚洲影院| 天天爱天天操天天干| 国产成人av影院| 爱爱免费小视频| 亚洲欧美日韩中文播放| 国产午夜福利片| 欧美影片第一页| 人妻少妇精品无码专区| 中文字幕在线观看亚洲| 成人影音在线| 成人国产精品一区| 日韩一级电影| 欧洲金发美女大战黑人| 日日夜夜免费精品| 国产精品欧美性爱| 国产欧美久久久精品影院| 久草国产在线观看| 欧美性生活一区| 香蕉国产在线视频| 久久国产精品影片| 久久爱91午夜羞羞| 国产精品麻豆免费版| 91久久国产| 亚洲人成无码www久久久| 国产xxx精品视频大全| 长河落日免费高清观看| 高潮白浆女日韩av免费看| 国产av无码专区亚洲a∨毛片| 亚洲午夜小视频| 天堂中文av在线资源库| 97人人模人人爽人人喊38tv| 国产一区二区观看| 国产午夜福利在线播放| 国产成人免费视| 希岛爱理中文字幕| 欧美亚洲综合色| 欧美白人做受xxxx视频| 97高清免费视频| 97品白浆高清久久久久久| 中文字幕中文字幕99| 蜜桃av一区二区三区| 好吊视频在线观看| 五月激情六月综合| 免费av网站观看| 久久6免费高清热精品| 99久久久国产| 中文字幕日韩一区二区三区| 美女免费视频一区| 人人妻人人澡人人爽| 色婷婷一区二区| 男人的天堂在线| 人体精品一二三区| 香蕉久久精品日日躁夜夜躁| 日韩欧美不卡在线| 波多野结衣精品在线| 国产真实夫妇交换视频| 日韩欧美国产电影| 污视频免费在线观看| 91福利入口| 欧美色一级片| 最新国产精品自拍| 亚洲一区二区三区影院| www.国产免费| 久久久久国产精品一区| 都市激情亚洲| 好吊妞无缓冲视频观看| 99天天综合性| 久久久成人免费视频| 精品呦交小u女在线| 成人小电影网站| 日韩中文不卡| 精品一区二区国语对白| 欧美三级免费看| 亚洲国产欧美自拍| 成人欧美大片| 一区二区精品视频| 国产精品亚洲成人| 日本三级黄色大片| 亚洲欧美在线免费| 成人精品动漫| 国产一区一区三区| 国产91在线看| 精品国产一区二区三区四| 国产一区二区美女视频| 综合久草视频| 久久精品视频16| 国产偷国产偷亚洲高清人白洁 | 欧美色图亚洲天堂| 亚洲国产精品视频在线观看| 91精品影视| 在线观看18视频网站| 成人禁用看黄a在线| 四虎影院在线免费播放| 日韩三级影视基地| 91精品短视频| 无人在线观看的免费高清视频| 日韩美女久久久| 亚洲av成人无码久久精品老人| 国产精品久久久久久久久久久不卡 | 色妞久久福利网| 91精品人妻一区二区三区果冻| 国产不卡视频在线观看| 国产在线一区二区三区欧美| 午夜激情在线| 国产精品免费视频一区二区| 蘑菇福利视频一区播放| 亚洲av无一区二区三区| 精品美女被调教视频大全网站| 超碰aⅴ人人做人人爽欧美| 一本一生久久a久久精品综合蜜| 国产成人午夜精品影院观看视频 | 欧美日韩性视频在线| 日本中文字幕伦在线观看| 国产综合色一区二区三区| 奇米四色…亚洲| 国产精品suv一区二区69| 色青青草原桃花久久综合|