1. 程式人生 > >如何進行TPS-DS測試

如何進行TPS-DS測試

1     簡介

隨著開源Hapdoop、Map/Reduce、Spark、HDFS、HBASE等技術的商用化,大資料管理技術得到了突飛猛進的發展。如何客觀地比較不同資料管理系統,即大資料測試基準的選擇,成為一個重要的研究課題。

事務效能管理委員會(TransactionProcessing Performance Council,TPC),是目前最知名的非贏利的資料管理系統評測基準標準化組織。它定義了多組標準測試集用於客觀地、可重現地評測資料庫的效能。在過去二十多年間,該機構釋出了多款資料庫評測基準,如TPC-A、TPC-D、TPC-H和TPC-DS。其中的DecisionSupport(DS)子集,即TPC-DS,是用於評測決策支援系統(或資料倉庫)的標準SQL測試集。這個測試集包含對大資料集的統計、報表生成、聯機查詢、資料探勘等複雜應用,測試用的資料和值是有傾斜的,與真實資料一致。可以說TPC-DS是與真實場景非常接近的一個測試集,也是難度較大的一個測試集。

TPC是由十幾家伺服器廠商組成的(華為是該組織唯一一箇中國公司)參與參與制定商務應用基準程式(Benchmark)的標準規範、效能和價格度量,並管理測試結果的釋出。TPC Benchmark測試結果是伺服器類裝置效能拼比核心技術指標。

TPC-DS測試基準是TPC組織推出的用於替代TPC-H的下一代決策支援系統測試基準。因此在討論TPC-DS之前,先介紹一下TPC-H。

TPC-H是一款面向商品零售業的決策支援系統測試基準,它定義了8張表,22個查詢,遵循SQL92。TPC-H基準的資料庫模式遵循第三正規化,葉曉俊教授等學者認為“它的資料表資料特徵單一(如資料不傾斜) ,其資料維護功能僅僅限制了潛在的對索引的過度使用,而沒有測試DBMS 執行真實資料維護操作——資料提取、轉換和載入(ETL) 功能的能力”。同時,新興的資料倉庫開始採用新的模型,如星型模型、雪花模型。TPC-H已經不能精準反映當今資料庫系統的真實效能。為此,TPC組織推出了新一代的面向決策應用的TPC-DS 基準。

TPC-DS採用星型、雪花型等多維資料模式。它包含7張事實表,17張緯度表平均每張表含有18列。其工作負載包含99個SQL查詢,覆蓋SQL99和2003的核心部分以及OLAP。這個測試集包含對大資料集的統計、報表生成、聯機查詢、資料探勘等複雜應用,測試用的資料和值是有傾斜的,與真實資料一致。可以說TPC-DS是與真實場景非常接近的一個測試集,也是難度較大的一個測試集。

TPC-DS的這個特點跟大資料的分析挖掘應用非常類似。Hadoop等大資料分析技術也是對海量資料進行大規模的資料分析和深度挖掘,也包含互動式聯機查詢和統計報表類應用,同時大資料的資料質量也較低,資料分佈是真實而不均勻的。因此TPC-DS成為客觀衡量多個不同Hadoop版本以及SQL on Hadoop技術的最佳測試集。這個基準測試有以下幾個主要特點:

l  一共99個測試案例,遵循SQL'99和SQL 2003的語法標準,SQL案例比較複雜;

l  分析的資料量大,並且測試案例是在回答真實的商業問題;

l  測試案例中包含各種業務模型(如分析報告型,迭代式的聯機分析型,資料探勘型等);

l  幾乎所有的測試案例都有很高的IO負載和CPU計算需求。

葉曉俊等學者對這些查詢的分部總結如表1所示。

TPC-DS測試主要步驟為環境準備、SQL語句相容性測試以及語句修改、TPC-DS測試和測試結果整理四個部分,其中SQL語句相容性測試將在1GB資料量使用虛擬機器建立叢集的條件下進行, TPC-DS測試在500GB資料量下進行。

由於TPC-DS進行對效能上的測試,測試環境應為乾淨的環境。

為確保作業系統乾淨,可重做raid,再通過《使用iLO口安裝作業系統》等將作業系統安裝完成,最後依據所需環境,通過《物理機上的Ambari和HDP叢集安裝手冊》或是《物理機上的Cloudera Manager和CDH叢集安裝》(暫未完成)等安裝手冊完成測試叢集的安裝,最後,將叢集配置改為測試配置,並對測試配置進行記錄。

這個部分主要介紹如何從TPC上獲得測試所需資源,入1GB資料、500GB資料的生成,建表語句和sql語句的生成等等。

1、  官網下載tpc-ds壓縮包

2、  在linux下解壓縮(Windows暫不做介紹):

       [[email protected]]# unzipDSTools.zip

3、  在tools檔案中執行make

[[email protected]]# cd /TPCDSVersion1.3.1/tools

[[email protected] tools]# make

注意:若沒有安裝gcc會報錯!

4、  在tools目錄下使用./dsdgen生成資料。

--help檢視幫助

常用:

-DIR 生成目錄

-SCALE 資料大小(單位GB)

- DELIMITER 欄位分隔符,預設|

- TERMINATE 末尾是否有分隔符,引數 Y或者N

例子:在/usr/datas目錄下生成分隔符為|且末尾沒有分隔符的1GB資料:

./dsdgen -DIR /usr/datas -SCALE 1 -TERMINATEN

這樣就可以分別生成測試所需的1GB資料和500GB,資料生成的25張表如下,這就是上述描述的7張事實表,17張緯度表,以及1張版本表dbgen_version.dat。

5、  ./dsqgen生成sql測試用例

--help 檢視幫助

常用:

-input 輸入,讀取測試用例包含的模板,一般使用/query_templates/templates.lst即可。

-directory 模板所在目錄, 一般使用-directory../query_templates即可。

-dialect 生成某個資料庫的語言,可選項可以檢視/query_templates目錄,有oracle、db2、SqlServer等。

-scale 資料大小(單位G)

特別說明:/query_templates目錄下的每一個query末尾都要加上:

define _END = “”;

例子:./dsqgen -input../query_templates/templates.lst -directory ../query_templates -dialect oracle-scale 1

由此,可以在tools目錄下生成一個query_0.sql,即為生成的sql測試用例。

6、  建表語句

/TPCDSVersion1.3.1/tools目錄下,tpcds.sql檔案裡。很多資料平臺可能不能直接使用,需要修改。建表語句的修改主要是依據不同環境支援的資料型別修改和一些基礎語法修正,還需依照生成的資料的分割符在建表時指定分隔符。

以hive為例:integer改為int,time改為timestamp,去掉NOT NULL,刪除primary key,指定分隔符row format delimited fieldsterminated by '|';等等。

7、  測試用例結果

在目錄/TPCDSVersion1.3.1/answer_sets下。

3.2     SQL語句相容性測試以及語句修改

在測試前最好能進行一次99條語句的格式整理,這是有必要的,原因是獲取的指令碼中可能含有製表符,當複製這些語句執行或是直接執行指令碼時會產生意料之外的錯誤。

完成database的建立,進入這個database進行建表操作。注意,如果不建立新的資料庫,操作將在default資料庫中進行。

之後可以在少量資料(1GB)條件下,遍歷進行SQL語句的支援情況測試(這個測試可以在虛擬機器中完成,因為本測試僅測試相容性,對測試效能要求較低)。

首先,將本地資料load到剛才建立好的表中,如:

Load完成後,檢查各表資料是否完整,這之後開始SQL相容性測試。主要測試方法是,先遍歷執行各個測試案例,如果SQL語句能執行完成,進行可完成的記錄;若不能完成,則將系統報錯記錄,直至所有語句測試完成。

3.2.2  語句修改

通過上階段的相容性測試後,可將無法完成SQL的語句的報錯進行彙總,將問題分別歸類,同類問題一起修改。

修改時必須遵守不改變原語句查詢內容、原語句使用的基礎邏輯的原則,在遵循這個原則的條件下進行小規模的調整,如:不改變數值的資料型別調整、增加別名、在用做比較的查詢後加limit 1等。最好能在修改時將大致的修改方法記錄,這樣不僅有利於在其他語句遇到同樣問題時候的修改,也為之後統計測試結果提供便利。

於此同時,記錄無法支援的語句情況,如:rollup、intersect等。再遇到同類問題時可以快速參照之前的處理方式進行修改或是直接跳過。

每修改一次語句都需要對修改後的語句進行測試,這部分測試,為了效率的保證,也是在少量資料(1GB)的條件下進行測試的。在測試中可能會出現別的錯誤,這時需要立刻著手解決這個問題。

在完成SQL語句相容性測試後,將可執行的語句彙總,編寫在一個指令碼中。在測試環境中重複上述建表和load過程,500GB資料的匯入完成後,執行這個指令碼,實現TPC-DS測試。這樣做的主要原因是,這些SQL案例測試時間較長,可能需要通過利用夜間時間進行不斷電測試,否則,也可以採用如同相容性測試同樣的方法,一條一條進行測試。

在執行load以及SQL語句時,需要將log保留,以hive中執行SQL語句為例,首先切換至root使用者,新建一個log文件並改變它的讀寫許可權,然後執行指令碼:

也可在配置中改變hdfs-site的許可權,將dfs.permissions.enabled改為false,然後使用root使用者執行指令碼。

若想知道語句的執行情況,可以通過cat語句查詢log,在指令碼出錯時需及時停止執行,匯出log,分析出錯原因,重新執行或是執行下一條語句。

將所有語句執行完成後,將log匯出,進行下一步處理。

本測試主要關心的因素有:

1.             SQL語句的支援情況;

2.             修改後支援的SQL語句的修改情況;

3.             可完成查詢的語句的時間使用情況(這代表著效能的優劣);

4.             查詢結果的準確性;

針對上述幾種因素,依照測試具體需求,進行分析處理:

1.對於SQL語句支援情況來說,主要通過能通過SQL相容性測試的語句個數來判別;

2.修改內容可以通過文字比較軟體,如Beyond Compare將修改後的sql與生成的query_0.sql進行比較,將修改內容以及不支援的語句情況進行整理統計;

3.將log中的各個平臺的SQL執行時間資料製成表格,由此可直觀的對比各個平臺效能的優劣;

4.要了解具體支援程度,還可以進一步將測試結果正確與否、出錯原因進行比對。

4     參考文獻

[2]陳旦,葉曉俊,施霖,TPC-DS效能測試工具的實現,計算機應用,第31卷,第9期, 2011.