TiSpark (Beta) 用戶指南
TiSpark 是 PingCAP 推出的為了解決用戶復(fù)雜 OLAP 需求的產(chǎn)品。借助 Spark 平臺(tái)本身的優(yōu)勢(shì),同時(shí)融合 TiKV 分布式集群的優(yōu)勢(shì),和 TiDB 一起為用戶一站式解決 HTAP (Hybrid Transactional/Analytical Processing)需求。 TiSpark 依賴 TiKV 集群和 PD 的存在。當(dāng)然,TiSpark 也需要你搭建一個(gè) Spark 集群。本文簡單介紹如何部署和使用 TiSpark。本文假設(shè)你對(duì) Spark 有基本認(rèn)知。你可以參閱 Apache Spark 官網(wǎng) 了解 Spark 相關(guān)信息。
一、概述
TiSpark 是將 Spark SQL 直接運(yùn)行在 TiDB 存儲(chǔ)引擎 TiKV 上的 OLAP 解決方案。TiSpark 架構(gòu)圖如下:
- TiSpark 深度整合了 Spark Catalyst 引擎, 可以對(duì)計(jì)算提供精確的控制,使 Spark 能夠高效的讀取 TiKV 中的數(shù)據(jù),提供索引支持以實(shí)現(xiàn)高速的點(diǎn)查;
- 通過多種計(jì)算下推減少 Spark SQL 需要處理的數(shù)據(jù)大小,以加速查詢;利用 TiDB 的內(nèi)建的統(tǒng)計(jì)信息選擇更優(yōu)的查詢計(jì)劃。
- 從數(shù)據(jù)集群的角度看,TiSpark + TiDB 可以讓用戶無需進(jìn)行脆弱和難以維護(hù)的 ETL,直接在同一個(gè)平臺(tái)進(jìn)行事務(wù)和分析兩種工作,簡化了系統(tǒng)架構(gòu)和運(yùn)維。
- 除此之外,用戶借助 TiSpark 項(xiàng)目可以在 TiDB 上使用 Spark 生態(tài)圈提供的多種工具進(jìn)行數(shù)據(jù)處理。例如使用 TiSpark 進(jìn)行數(shù)據(jù)分析和 ETL;使用 TiKV 作為機(jī)器學(xué)習(xí)的數(shù)據(jù)源;借助調(diào)度系統(tǒng)產(chǎn)生定時(shí)報(bào)表等等。
二、環(huán)境準(zhǔn)備
現(xiàn)有 TiSpark 版本支持 Spark 2.1,對(duì)于 Spark 2.0 及 Spark 2.2 還沒有經(jīng)過良好的測(cè)試驗(yàn)證。對(duì)于更低版本暫時(shí)無法支持。
TiSpark 需要 JDK 1.8+ 以及 Scala 2.11(Spark2.0+ 默認(rèn) Scala 版本)。
TiSpark 可以在 YARN,Mesos,Standalone 等任意 Spark 模式下運(yùn)行。
三 、推薦配置
3.1 部署 TiKV 和 TiSpark 集群
(1) TiKV 集群部署配置
對(duì)于 TiKV 和 TiSpark 分開部署的場(chǎng)景,建議參考如下建議
- 硬件配置建議
普通場(chǎng)景可以參考 TiDB 和 TiKV 硬件配置建議,但是如果是偏重分析的場(chǎng)景,可以將 TiKV 節(jié)點(diǎn)增加到至少 64G 內(nèi)存,如果是機(jī)械硬盤,則推薦 8 塊。
- TiKV 參數(shù)建議
(2) Spark / TiSpark 集群獨(dú)立部署配置
關(guān)于 Spark 的詳細(xì)硬件推薦配置請(qǐng)參考官網(wǎng),如下是根據(jù) TiSpark 場(chǎng)景的簡單闡述。
- Spark 推薦 32G 內(nèi)存以上配額。請(qǐng)?jiān)谂渲弥蓄A(yù)留 25% 的內(nèi)存給操作系統(tǒng)。
- Spark 推薦每臺(tái)計(jì)算節(jié)點(diǎn)配備 CPU 累計(jì) 8 到 16 核以上。你可以初始設(shè)定分配所有 CPU 核給 Spark。
Spark 的具體配置方式也請(qǐng)參考官方說明。下面給出的是根據(jù) spark-env.sh 配置的范例:
(3) TiSpark 與 TiKV 集群混合部署配置
對(duì)于 TiKV、TiSpark 混合部署場(chǎng)景,請(qǐng)?jiān)谠?TiKV 預(yù)留資源之外累加 Spark 所需部分并分配 25% 的內(nèi)存作為系統(tǒng)本身占用。
四、部署 TiSpark
TiSpark 的 jar 包可以在這里下載。
4.1 已有 Spark 集群的部署方式
在已有 Spark 集群上運(yùn)行 TiSpark 無需重啟集群??梢允褂?Spark 的 --jars 參數(shù)將 TiSpark 作為依賴引入:
- spark-shell --jars $PATH/tispark-0.1.0.jar
如果想將 TiSpark 作為默認(rèn)組件部署,只需要將 TiSpark 的 jar 包放進(jìn) Spark 集群每個(gè)節(jié)點(diǎn)的 jars 路徑并重啟 Spark 集群:
- ${SPARK_INSTALL_PATH}/jars
這樣無論你是使用 Spark-Submit 還是 Spark-Shell 都可以直接使用 TiSpark。
4.2 沒有 Spark 集群的部署方式
如果你沒有使用中的 Spark 集群,我們推薦 Saprk Standalone 方式部署。我們?cè)谶@里簡單介紹下 Standalone 部署方式。如果遇到問題,你可以去官網(wǎng)尋找?guī)椭?也歡迎在我們的 GitHub 上提 issue。
(1) 下載安裝包并安裝
你可以在這里下載 Apache Spark。
對(duì)于 Standalone 模式且無需 Hadoop 支持,請(qǐng)選擇 Spark 2.1.x 且?guī)в?Hadoop 依賴的 Pre-build with Apache Hadoop 2.x 任意版本。如你有需要配合使用的 Hadoop 集群,請(qǐng)選擇對(duì)應(yīng)的 Hadoop 版本號(hào)。你也可以選擇從源代碼自行構(gòu)建以配合官方 Hadoop 2.6 之前的版本。請(qǐng)注意目前 TiSpark 僅支持 Spark 2.1.x 版本。
假設(shè)你已經(jīng)有了 Spark 二進(jìn)制文件,并且當(dāng)前 PATH 為 SPARKPATH。
請(qǐng)將 TiSpark jar 包拷貝到 ${SPARKPATH}/jars 目錄下。
(2) 啟動(dòng) Master
在選中的 Spark Master 節(jié)點(diǎn)執(zhí)行如下命令:
在這步完成以后,屏幕上會(huì)打印出一個(gè) log 文件。檢查 log 文件確認(rèn) Spark-Master 是否啟動(dòng)成功。 你可以打開 http://spark-master-hostname:8080 查看集群信息(如果你沒有改動(dòng) Spark-Master 默認(rèn) Port Numebr)。在啟動(dòng) Spark-Slave 的時(shí)候,你也可以通過這個(gè)面板來確認(rèn) Slave 是否已經(jīng)加入集群。
(3) 啟動(dòng) Slave
類似地,可以用如下命令啟動(dòng) Spark-Slave節(jié)點(diǎn):
命令返回以后,你就可以通過剛才的面板查看這個(gè) Slave 是否已經(jīng)正確的加入了 Spark 集群。 在所有 Slave 節(jié)點(diǎn)重復(fù)剛才的命令。在確認(rèn)所有的 Slave 都可以正確連接 Master,這樣之后你就擁有了一個(gè) Standalone 模式的 Spark 集群。
五、一個(gè)使用范例
假設(shè)你已經(jīng)按照上述步驟成功啟動(dòng)了 TiSpark 集群, 下面簡單介紹如何使用 Spark SQL 來做 OLAP 分析。這里我們用名為 tpch 數(shù)據(jù)庫中的 lineitem 表作為范例。
在 Spark-Shell 里輸入下面的命令, 假設(shè)你的 PD 節(jié)點(diǎn)位于 192.168.1.100,端口 2379:
之后你可以直接調(diào)用 Spark SQL
結(jié)果為:
六、FAQ
Q. 是獨(dú)立部署還是和現(xiàn)有 Spark/Hadoop 集群共用資源?
A. 你可以利用現(xiàn)有 Spark 集群無需單獨(dú)部署,但是如果現(xiàn)有集群繁忙,TiSpark 將無法達(dá)到理想速度。
Q. 是否可以和 TiKV 混合部署?
A. 如果 TiDB 以及 TiKV 負(fù)載較高且運(yùn)行關(guān)鍵的線上任務(wù),請(qǐng)考慮單獨(dú)部署 TiSpark;并且考慮使用不同的網(wǎng)卡保證 OLTP 的網(wǎng)絡(luò)資源不被侵占而影響線上業(yè)務(wù)。如果線上業(yè)務(wù)要求不高或者機(jī)器負(fù)載不大,可以考慮與 TiKV 混合部署。
【本文是51CTO專欄機(jī)構(gòu)“PingCAP”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)聯(lián)系作者本人獲取授權(quán)】