開發與維運

數據湖實操講解【 JindoTable 計算加速】第二十講:Spark 對 OSS 上的 ORC 數據進行查詢加速

本期導讀 :【JindoTable 計算加速】第二十講

主題:Spark 對 OSS 上的 ORC 數據進行查詢加速uid + JindoFSOSS 上數據進行訓練加速

講師:健身,阿里巴巴計算平臺事業部 EMR 技術專家

內容框架:

  • ORC 簡介
  • JindoFS 列存加速
  • 性能對比
  • 演示

直播回放鏈接:(20講)

https://developer.aliyun.com/live/247100

一、ORC 簡介

ORC:Hadoop 生態的列存系統      

  • 來自 Hive 的列式存儲
  • 支持列裁剪
  • 包含類型信息,自描述
  • 支持 Encoding/壓縮

image.png

Spark 與 ORC

  • Spark Hive 表

• CREATE TABLE tablename … STORED AS ORC;

• 使用 Hive ORC

• spark.sql.hive.convertMetastoreOrc

  • Spark Datasource 表

• CREATE TABLE tablename … USING ORC;

使用Apache ORC

二、JindoFS 列存加速

痛點

  • 對象存儲水平擴展能力強,但請求延時高
  • 本地盤/雲盤帶寬有限,中間數據越少越好
  • IO 需要與 shuffle 數據競爭網絡資源
  • 計算越快越好


JindoFS 列存加速

  • JindoTable Native Engine

高速讀取

• 查詢計劃下推(高速計算)

• 表/分區/列級別的數據緩存,消除帶寬瓶頸和性能波動

  • 支持 JindoFS/OSS
  • 支持 ORC / Parquet 格式
  • 高效的預計算(規劃)
  • 可插拔,兼容開源

用法

  • 命令行參數

• --conf spark.sql.extensions=com.aliyun.emr.sql.JindoTableExtension

  • 配置到 spark-defaults

• spark.sql.extensions       com.aliyun.emr.sql.JindoTableExtension

  • Spark Hive 表需要確保 spark.sql.hive.convertMetastoreOrc = true
  • EMR-3.35/4.9/5.2 之後的版本

加速原理

  • Native Engine 直接把數據排在內存中供上層引擎使用
  • Spark 通過 Unsafe 直接訪問數據,無需拷貝數據
  • Native Engine 異步讀取文件

• 數據讀取不等待上層引擎消費,性能更高

  • 高併發

• 文件級別併發

• 列級別併發

  • Native 實現算子
  • 相比 Java 性能更優

加速架構

  • 一套 Native Engine 支持不同引擎
  • AliORC 提供 ORC 支持
  • Native Engine 運行在 executor/Presto Worker 中(客戶端)

image.png

三、性能對比

Spark 性能對比 – 配置

image.png

Spark 性能對比 – 結果

  • 端到端總時間縮短23.6%

image.png

四、演示

  • 配置 Spark
  • 讀取鳶尾花數據集以 ORC 格式寫入 OSS 路徑
  • 從 OSS 查詢鳶尾花數據集


相關文檔鏈接:

  • Jindodata 相關文檔:

https://github.com/aliyun/alibabacloud-jindodata

  • 計算加速使用文檔:

https://help.aliyun.com/document_detail/213329.html




點擊回放鏈接,直接觀看第20講視頻回放,獲取講師實例講解:

   https://developer.aliyun.com/live/247100




Github鏈接:

https://github.com/aliyun/alibabacloud-jindofs

不錯過每次直播信息、探討更多數據湖 JindoFS+OSS 相關技術問題,歡迎掃碼加入釘釘交流群!

69c0a02cc68742fca5d49d92413dc67a.png

Leave a Reply

Your email address will not be published. Required fields are marked *