標籤:

TiSpark (Beta) 用戶指南

TiSpark 是 PingCAP 推出的為了解決用戶複雜 OLAP 需求的產品。藉助 Spark 平台本身的優勢,同時融合 TiKV 分散式集群的優勢,和 TiDB 一起為用戶一站式解決 HTAP (Hybrid Transactional/Analytical Processing)需求。 TiSpark 依賴 TiKV 集群和 PD 的存在。當然,TiSpark 也需要你搭建一個 Spark 集群。本文簡單介紹如何部署和使用 TiSpark。本文假設你對 Spark 有基本認知。你可以參閱 Apache Spark 官網 了解 Spark 相關信息。

一、概述

TiSpark 是將 Spark SQL 直接運行在 TiDB 存儲引擎 TiKV 上的 OLAP 解決方案。TiSpark 架構圖如下:

  • TiSpark 深度整合了 Spark Catalyst 引擎, 可以對計算提供精確的控制,使 Spark 能夠高效的讀取 TiKV 中的數據,提供索引支持以實現高速的點查;
  • 通過多種計算下推減少 Spark SQL 需要處理的數據大小,以加速查詢;利用 TiDB 的內建的統計信息選擇更優的查詢計劃。
  • 從數據集群的角度看,TiSpark + TiDB 可以讓用戶無需進行脆弱和難以維護的 ETL,直接在同一個平台進行事務和分析兩種工作,簡化了系統架構和運維。
  • 除此之外,用戶藉助 TiSpark 項目可以在 TiDB 上使用 Spark 生態圈提供的多種工具進行數據處理。例如使用 TiSpark 進行數據分析和 ETL;使用 TiKV 作為機器學習的數據源;藉助調度系統產生定時報表等等。

二、環境準備

現有 TiSpark 版本支持 Spark 2.1,對於 Spark 2.0 及 Spark 2.2 還沒有經過良好的測試驗證。對於更低版本暫時無法支持。

TiSpark 需要 JDK 1.8+ 以及 Scala 2.11(Spark2.0+ 默認 Scala 版本)。

TiSpark 可以在 YARN,Mesos,Standalone 等任意 Spark 模式下運行。

三 、推薦配置

3.1 部署 TiKV 和 TiSpark 集群

3.1.1 TiKV 集群部署配置

對於 TiKV 和 TiSpark 分開部署的場景,建議參考如下建議

  • 硬體配置建議

普通場景可以參考 TiDB 和 TiKV 硬體配置建議,但是如果是偏重分析的場景,可以將 TiKV 節點增加到至少 64G 內存,如果是機械硬碟,則推薦 8 塊。

  • TiKV 參數建議

3.1.2 Spark / TiSpark 集群獨立部署配置

關於 Spark 的詳細硬體推薦配置請參考官網,如下是根據 TiSpark 場景的簡單闡述。

Spark 推薦 32G 內存以上配額。請在配置中預留 25% 的內存給操作系統。

Spark 推薦每台計算節點配備 CPU 累計 8 到 16 核以上。你可以初始設定分配所有 CPU 核給 Spark。

Spark 的具體配置方式也請參考官方說明。下面給出的是根據 spark-env.sh 配置的範例:

3.1.3 TiSpark 與 TiKV 集群混合部署配置

對於 TiKV、TiSpark 混合部署場景,請在原有 TiKV 預留資源之外累加 Spark 所需部分並分配 25% 的內存作為系統本身佔用。

四、部署 TiSpark

TiSpark 的 jar 包可以在這裡下載。

4.1 已有 Spark 集群的部署方式

在已有 Spark 集群上運行 TiSpark 無需重啟集群。可以使用 Spark 的 --jars 參數將 TiSpark 作為依賴引入:

spark-shell --jars $PATH/tispark-0.1.0.jar

如果想將 TiSpark 作為默認組件部署,只需要將 TiSpark 的 jar 包放進 Spark 集群每個節點的 jars 路徑並重啟 Spark 集群:

${SPARK_INSTALL_PATH}/jars

這樣無論你是使用 Spark-Submit 還是 Spark-Shell 都可以直接使用 TiSpark。

4.2 沒有 Spark 集群的部署方式

如果你沒有使用中的 Spark 集群,我們推薦 Saprk Standalone 方式部署。我們在這裡簡單介紹下 Standalone 部署方式。如果遇到問題,你可以去官網尋找幫助;也歡迎在我們的 GitHub 上提 issue。

4.2.1 下載安裝包並安裝

你可以在這裡下載 Apache Spark。

對於 Standalone 模式且無需 Hadoop 支持,請選擇 Spark 2.1.x 且帶有 Hadoop 依賴的 Pre-build with Apache Hadoop 2.x 任意版本。如你有需要配合使用的 Hadoop 集群,請選擇對應的 Hadoop 版本號。你也可以選擇從源代碼自行構建以配合官方 Hadoop 2.6 之前的版本。請注意目前 TiSpark 僅支持 Spark 2.1.x 版本。

假設你已經有了 Spark 二進位文件,並且當前 PATH 為 SPARKPATH。

請將 TiSpark jar 包拷貝到 ${SPARKPATH}/jars 目錄下。

4.2.2 啟動 Master

在選中的 Spark Master 節點執行如下命令:

在這步完成以後,屏幕上會列印出一個 log 文件。檢查 log 文件確認 Spark-Master 是否啟動成功。 你可以打開 http://spark-master-hostname:8080 查看集群信息(如果你沒有改動 Spark-Master 默認 Port Numebr)。在啟動 Spark-Slave 的時候,你也可以通過這個面板來確認 Slave 是否已經加入集群。

4.2.3 啟動 Slave

類似地,可以用如下命令啟動 Spark-Slave節點:

命令返回以後,你就可以通過剛才的面板查看這個 Slave 是否已經正確的加入了 Spark 集群。 在所有 Slave 節點重複剛才的命令。在確認所有的 Slave 都可以正確連接 Master,這樣之後你就擁有了一個 Standalone 模式的 Spark 集群。

五、一個使用範例

假設你已經按照上述步驟成功啟動了 TiSpark 集群, 下面簡單介紹如何使用 Spark SQL 來做 OLAP 分析。這裡我們用名為 tpch 資料庫中的 lineitem 表作為範例。

在 Spark-Shell 里輸入下面的命令, 假設你的 PD 節點位於 192.168.1.100,埠 2379:

之後你可以直接調用 Spark SQL

結果為:

六、FAQ

Q. 是獨立部署還是和現有 Spark/Hadoop 集群共用資源?

A. 你可以利用現有 Spark 集群無需單獨部署,但是如果現有集群繁忙,TiSpark 將無法達到理想速度。

Q. 是否可以和 TiKV 混合部署?

A. 如果 TiDB 以及 TiKV 負載較高且運行關鍵的線上任務,請考慮單獨部署 TiSpark;並且考慮使用不同的網卡保證 OLTP 的網路資源不被侵佔而影響線上業務。如果線上業務要求不高或者機器負載不大,可以考慮與 TiKV 混合部署。

作者:馬曉宇 楊哲軒


推薦閱讀:

好書一起讀(168):重學資料庫之事務
金融級資料庫的未來發展方向
資料庫工程師需要具備什麼樣的能力和素質?
用 python 寫的爬蟲,有哪些提高的技能?
redis4.0、codis、阿里雲redis 3種redis集群對比分析

TAG:数据库 | TiDB |