怎么解析SparkSQL+SequoiaDB性能調(diào)優(yōu)策略-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)怎么解析SparkSQL+SequoiaDB 性能調(diào)優(yōu)策略,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元頭屯河做網(wǎng)站,已為上家服務(wù),為頭屯河各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

下面介紹 SequoiaDB(分布式存儲)和 Spark(分布式計算)兩款產(chǎn)品的對接使用,以及在海量數(shù)據(jù)場景下如何提高統(tǒng)計分析性能。


01  SequoiaDB 與 SparkSQL 介紹

SequoiaDB 是一款開源的金融級分布式關(guān)系型數(shù)據(jù)庫,支持標(biāo)準(zhǔn) SQL 和事務(wù)功能,支持復(fù)雜索引查詢、與 Hadoop、Hive、Spark 都有較深度的集成。SequoiaDB 在分布式存儲功能上,較一般的大數(shù)據(jù)產(chǎn)品能提供更多的數(shù)據(jù)切分規(guī)則,包括:水平切分、范圍切分、主子表切分(類似 partition 分區(qū))和多維切分方式,用戶可以根據(jù)不用的場景選擇相應(yīng)的切分方式,以提高系統(tǒng)的存儲能力和操作性能。

Spark 近年來發(fā)展特別迅猛,使用 SparkSQL 做大數(shù)據(jù)處理和分析的開發(fā)者越來越多。SparkSQL 是 Spark 產(chǎn)品中一個組成部分,SQL 的執(zhí)行引擎使用 Spark 的 RDD 和 Dataframe 實現(xiàn)。

SparkSQL 和另外一款流行的大數(shù)據(jù) SQL 產(chǎn)品— Hive 有相似之處,但是兩款產(chǎn)品還是有本質(zhì)上的區(qū)別,大的不同點在于執(zhí)行引擎,Hive 默認(rèn)支持 Hadoop 和 Tez 計算框架,而 SparkSQL 只支持 Spark RDD 計算框架,但是 SparkSQL 的擁有更加深度的執(zhí)行計劃優(yōu)化和處理引擎優(yōu)化。

 

02 SequoiaDB 與 SparkSQL 如何整合?

Spark 本身是一款分布式計算框架。它不像 Hadoop 一樣,同時為開發(fā)者提供分布式計算和分布式存儲,而是開放了存儲層的開發(fā)接口,只要開發(fā)者按照 Spark 的接口規(guī)范實現(xiàn)了接口方法,任何存儲產(chǎn)品都可以成為 Spark 數(shù)據(jù)計算的來源,同時也包括 SparkSQL 的數(shù)據(jù)來源。

SequoiaDB 是一款分布式數(shù)據(jù)庫,能夠為用戶存儲海量的數(shù)據(jù),但是如果要對海量數(shù)據(jù)做統(tǒng)計、分析,還是需要借助分布式計算框架的并發(fā)計算性能,提高計算效率。所以 SequoiaDB 為 Spark開發(fā)了 SequoiaDB for Spark 的連接器,讓 Spark 支持從SequoiaDB 中并發(fā)獲取數(shù)據(jù),再完成相應(yīng)的數(shù)據(jù)計算。

Spark 和 SequoiaDB 對接方式比較簡單,用戶只要將 SequoiaDB for Spark 連接器 spark-sequoiadb.jar 和 SequoiaDB 的 java 驅(qū)動 sequoiadb.jar 加入到每個 Spark Worker 的 CLASSPATH 中即可。

例如,用戶希望 SparkSQL 對接到 SequoiaDB,可以為 spark-env.sh 配置文件中增加 SPARK_CLASSPATH 參數(shù),如果該參數(shù)已經(jīng)存在,則將新 jar 包添加到 SPARK_CLASSPATH 參數(shù)上,如:

SPARK_CLASSPATH="/media/psf/mnt/sequoiadb-driver-2.9.0-SNAPSHOT.jar:/media/psf/mnt/spark-sequoiadb_2.11-2.9.0-SNAPSHOT.jar"


用戶修改完 spark-env.sh 配置后,重啟 spark-sql 或者 thriftserver 就完成了 Spark 和 SequoiaDB 的對接。

 

03 SequoiaDB 與 SparkSQL 性能優(yōu)化

Spark SQL+SequoiaDB 的性能優(yōu)化將會從 connector 計算技術(shù)原理、SparkSQL 優(yōu)化、SequoiaDB 優(yōu)化和 connector 參數(shù)優(yōu)化4個方面進(jìn)行介紹。

 

3.1 SequoiaDB for SparkSQL

A) connector 工作原理

Spark 產(chǎn)品雖然為用戶提供了多種功能模塊,但是都只是數(shù)據(jù)計算的功能模塊。Spark 產(chǎn)品本身沒有任何的存儲功能,在默認(rèn)情況下,Spark 是從本地文件服務(wù)器或者 HDFS 上讀取數(shù)據(jù)。而 Spark 也將它與存儲層的接口開放給廣大開發(fā)者,開發(fā)者只要按照 Spark 接口規(guī)范實現(xiàn)其存儲層連接器,任何數(shù)據(jù)源均可稱為 Spark 計算的數(shù)據(jù)來源。

下圖為 Spark worker 與存儲層中 datanode 的關(guān)系。

 怎么解析SparkSQL+SequoiaDB 性能調(diào)優(yōu)策略
圖1

Spark 計算框架與存儲層的關(guān)系,可以從下圖中了解其原理。Spark master 在接收到一個計算任務(wù)后,首先會與存儲層做一次通訊,從存儲層的訪問快照或者是存儲規(guī)劃中,得到本次計算任務(wù)所設(shè)計的所有數(shù)據(jù)的存儲情況。存儲層返回給 Spark master 的結(jié)果為數(shù)據(jù)存儲的 partition 隊列。

然后 Spark master 會將數(shù)據(jù)存儲的 partition 隊列中的 partition 逐個分配給給 Spark worker。Spark work 在接收到數(shù)據(jù)的 partition 信息后,就能夠了解如何獲取計算數(shù)據(jù)。然后 Spark work 會主動與存儲層的 node 節(jié)點進(jìn)行連接,獲取數(shù)據(jù),再結(jié)合 Spark master 下發(fā)給 Spark worker 的計算任務(wù),開始數(shù)據(jù)計算工作。

 怎么解析SparkSQL+SequoiaDB 性能調(diào)優(yōu)策略
圖2

 

SequoiaDB for Spark 的連接器的實現(xiàn)原理和上述描述基本一致,只是在生成數(shù)據(jù)計算的 partition 任務(wù)時,連接器會根據(jù) Spark 下壓的查詢條件到 SequoiaDB 中生成查詢計劃。

如果 SequoiaDB 能夠根據(jù)查詢條件做索引掃描,連接器生成的 partition 任務(wù)將是讓Spark work 直接連接 SequoiaDB 的數(shù)據(jù)節(jié)點。

如果 SequoiaDB 無法根據(jù)查詢條件做索引掃描,連接器將獲取相關(guān)數(shù)據(jù)表的所有數(shù)據(jù)塊信息,然后根據(jù) partitionblocknum 和 partitionmaxnum 參數(shù)生成包含若干個數(shù)據(jù)塊連接信息的 partititon 計算任務(wù)。

 

B)  Connector 參數(shù)

SequoiaDB for Spark 連接器在 SequoiaDB 2.10之后進(jìn)行了重構(gòu),提高 Spark 并發(fā)從SequoiaDB 獲取數(shù)據(jù)的性能,參數(shù)也有相應(yīng)的調(diào)整。

用戶在 SparkSQL 上創(chuàng)建數(shù)據(jù)源為 SequoiaDB 的 table,建表模版如下:

create [temporary] <table|view> <name>[(schema)] using com.sequoiadb.spark options (<options>);

SparkSQL 創(chuàng)表命令的關(guān)鍵字介紹:

1. temporary 關(guān)鍵字,代表該表或者視圖是否為鄰時創(chuàng)建的,如果用戶標(biāo)記了temporary 關(guān)鍵字,則該表或者視圖在客戶端重啟后將自動被刪除;

2. 建表時用戶可以選擇不指定表結(jié)構(gòu),因為如果用戶不顯式指定表結(jié)構(gòu),SparkSQL 將在建表時自動檢測已經(jīng)存在數(shù)據(jù)的表結(jié)構(gòu);

3. com.sequoiadb.spark 關(guān)鍵字為 SequoiaDB for Spark connector  的入口類;

4. options 為 SequoiaDB for Spark connector 的配置參數(shù);

 

SparkSQL 建表例子如下:

create table tableName (name string, id int) using com.sequoiadb.spark options (host 'sdb1:11810,sdb2:11810,sdb3:11810', collectionspace 'foo', collection 'bar', username 'sdbadmin', password 'sdbadmin');



SparkSQL for SequoiaDB 的建表 options 參數(shù)列表如下:

怎么解析SparkSQL+SequoiaDB 性能調(diào)優(yōu)策略
表1

 
3.2 SparkSQL 優(yōu)化

用戶如果要使用 SparkSQL 對海量數(shù)據(jù)做統(tǒng)計分析操作,那么應(yīng)該從3個方面進(jìn)行性能調(diào)優(yōu):

1. 調(diào)大 Spark Worker 大可用內(nèi)存大小,防止在計算過程中數(shù)據(jù)超出內(nèi)存范圍,需要將部分?jǐn)?shù)據(jù)寫入到臨時文件上;

2. 增加 Spark Worker 數(shù)目,并且設(shè)置每個 Worker 均可以使用當(dāng)前服務(wù)器左右 CPU 資源,以提高并發(fā)能力;

3. 調(diào)整 Spark 的運行參數(shù);

用戶可以對 spark-env.sh 配置文件進(jìn)行設(shè)置,SPARK_WORKER_MEMORY 為控制 Worker 可用內(nèi)存的參數(shù),SPARK_WORKER_INSTANCES 為每臺服務(wù)器啟動多少個 Worker 的參數(shù)。

 

如果用戶需要調(diào)整 Spark 的運行參數(shù),則應(yīng)該修改 spark-defaults.conf 配置文件,對優(yōu)化海量數(shù)據(jù)統(tǒng)計計算有較明顯提升的參數(shù)有:

1. spark.storage.memoryFraction, 該參數(shù)控制 Worker 多少內(nèi)存比例用戶存儲臨時計算數(shù)據(jù),默認(rèn)為0.6,代表60%的含義;

2. spark.shuffle.memoryFraction, 該參數(shù)控制計算過程中 shuffle 時能夠占用每個 Worker 的內(nèi)存比例,默認(rèn)為0.2,代表20%的含義,如果臨時存儲的計算數(shù)據(jù)較少,而計算中有較多的 group by, sort, join 等操作,應(yīng)該考慮將spark.shuffle.memoryFraction 調(diào)大,spark.storage.memoryFraction 調(diào)小,避免超出內(nèi)存部分需要寫入臨時文件中;

3. spark.serializer, 該參數(shù)設(shè)置 Spark 在運行時使用哪種序列化方法,默認(rèn)為 org.apache.spark.serializer.JavaSerializer, 但是為了提升性能,應(yīng)該選擇 org.apache.spark.serializer.KryoSerializer 序列化。

 

3.3 SequoiaDB 優(yōu)化

SparkSQL+SequoiaDB 這種組合,由于數(shù)據(jù)讀取是從 SequoiaDB 中進(jìn)行,所以在性能優(yōu)化應(yīng)該考慮三點

1. 盡可能將大表的數(shù)據(jù)分布式存儲,所以建議符合二維切分條件的 table 應(yīng)該采用主子表+ Hash 切分兩種數(shù)據(jù)均衡方式進(jìn)行數(shù)據(jù)分布式存儲;

2. 數(shù)據(jù)導(dǎo)入時,應(yīng)該避免同時對相同集合空間的多個集合做數(shù)據(jù)導(dǎo)入,因為同一個集合空間下的多個集合是共用相同一個數(shù)據(jù)文件,如果同時向相同集合空間的多個集合做數(shù)據(jù)導(dǎo)入,會導(dǎo)致每個集合下的數(shù)據(jù)塊存儲過于離散,從而導(dǎo)致在 Spark SQL 從SequoiaDB 獲取海量數(shù)據(jù)時,需要讀取的數(shù)據(jù)塊過多;

3. 如果 SparkSQL 的查詢命令中包含查詢條件,應(yīng)該對應(yīng)地在 SequoiaDB 中建立對應(yīng)字段的索引。

 
3.4 connector 優(yōu)化

SequoiaDB for Spark 連接器的參數(shù)優(yōu)化,主要分兩個場景,一是數(shù)據(jù)讀,另外一個是數(shù)據(jù)寫入。

數(shù)據(jù)寫入的優(yōu)化空間較少,只有一個參數(shù)可以調(diào)整,即bulksize參數(shù),該參數(shù)默認(rèn)值為500,代表連接器向 SequoiaDB 寫入數(shù)據(jù)時,以500條記錄組成一個網(wǎng)絡(luò)包,再向 SequoiaDB 發(fā)送寫入請求,通常設(shè)置 bulksize 參數(shù),以一個網(wǎng)絡(luò)包不超過2MB為準(zhǔn)。

數(shù)據(jù)讀取的參數(shù)優(yōu)化,用戶則需要關(guān)注 partitionmode, partitionblocknum 和 partitionmaxnum 三個參數(shù)。

    partitionmode,連接器的分區(qū)模式,可選值有single、sharding、datablock、auto,默認(rèn)值為auto,代表連接器智能識別。

    1. single 值代表 SparkSQL 在訪問 SequoiaDB 數(shù)據(jù)時,不考慮并發(fā)性能,只用一個線程連接 SequoiaDB 的 Coord 節(jié)點,一般該參數(shù)在建表做表結(jié)構(gòu)數(shù)據(jù)抽樣時采用;

    2. sharding 值代表 SparkSQL 訪問 SequoiaDB 數(shù)據(jù)時,采用直接連接 SequoiaDB 各個 datanode 的方式,該參數(shù)一般采用在 SQL 命令包含查詢條件,并且該查詢可以在 SequoiaDB 中使用索引查詢的場景;

    3. datablock 值代表 SparkSQL 訪問 SequoiaDB 數(shù)據(jù)時,采用并發(fā)連接 SequoiaDB 的數(shù)據(jù)塊進(jìn)行數(shù)據(jù)讀取,該參數(shù)一般使用在SQL命令無法在 SequoiaDB 中使用索引查詢,并且查詢的數(shù)據(jù)量較大的場景;

    4. auto 值代表 SparkSQL 在向 SequoiaDB 查詢數(shù)據(jù)時,訪問 SequoiaDB 的方式將由連接器根據(jù)不同的情況分析決定。

    partitionblocknum,該參數(shù)只有在 partitionmode=datablock 時才會生效,代表每個 Worker 在做數(shù)據(jù)計算時,一次獲取多少個 SequoiaDB 數(shù)據(jù)塊讀取任務(wù),該參數(shù)默認(rèn)值為4。如果 SequoiaDB 中存儲的數(shù)據(jù)量較大,計算時涉及到的數(shù)據(jù)塊較多,用戶應(yīng)該調(diào)大該參數(shù),使得 SparkSQL 的計算任務(wù)保持在一個合理范圍,提高數(shù)據(jù)讀取效率。

    partitionmaxnum,該參數(shù)只有在 partitionmode=datablock 時才會生效,代表連接器最多能夠生成多少個數(shù)據(jù)塊讀取任務(wù),該參數(shù)的默認(rèn)值為1000。該參數(shù)主要是為了避免由于 SequoiaDB 中的數(shù)據(jù)量過大,使得總的數(shù)據(jù)塊數(shù)量太大,導(dǎo)致 SparkSQL 的計算任務(wù)過多,最后使得總體計算性能下降。

關(guān)于怎么解析SparkSQL+SequoiaDB 性能調(diào)優(yōu)策略就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:怎么解析SparkSQL+SequoiaDB性能調(diào)優(yōu)策略-創(chuàng)新互聯(lián)
標(biāo)題URL:http://muchs.cn/article0/cddpio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)、網(wǎng)頁設(shè)計公司標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司