1.從源碼編譯bench二進制文件。
下載datafusion源碼, 解壓到目錄,比如/par/dafu,
cd /par/dafu/benchmarks
export CARGO_INCREMENTAL=1
export PATH=/par:/par/mold240/bin:$PATH
因為mold默認使用并行編譯,而這些二進制文件很大,如果出現資源不足情況,就會編譯失敗:
(signal: 9, SIGKILL: kill)
warning: build failed, waiting for other jobs to finish...
error: could not compile `datafusion-benchmarks` (bin "external_aggr")
這時可以用如下命令,強制單任務編譯
CARGO_BUILD_JOBS=1 cargo build --release
編譯時間較長,最后會生成dfbench、tpch、imdb、parquet、external_aggr五個文件。
如果要進行全部基準測試,參考這篇文檔。
如果只是做TPCH測試,參考如下步驟。
2.用tpchgen-rs生成parquet文件。
tpchgen-rs生成tpch的效率比官方的dbgen高出很多倍。而且支持多種格式,獲取它的源碼,
然后用如下命令解壓縮編譯
tar xf tpchgen-rs-1.1.1.tar.gz
mv tpchgen-rs-1.1.1 tpchgen-rs
cd tpchgen-rs
export CARGO_INCREMENTAL=1
export PATH=/par:/par/mold240/bin:$PATH
cargo build --release
用如下命令生成parquet格式的sf3規模數據文件。
time target/release/tpchgen-cli -s 3 --output-dir sf3-parquet --format=parquetreal 0m6.523s
user 0m27.516s
sys 0m1.740s
為了方便測試,把數據目錄移動到/par/data/, 并輸入如下腳本,將文件放置在各自的目錄下,這是datafusion 的tpch二進制文件要求的,我開始不懂,出錯了,在datafusion的github討論區提問,得到以上的答案。
mv sf3-parquet /par/data/
cd /par/data/sf3-parquet
for tbl in customer lineitem nation orders part partsupp region supplier; domkdir -p "$tbl"mv "${tbl}.parquet" "$tbl/"
done
3.執行測試
將當前目錄切換到源代碼benchmarks目錄,這是必須的,因為要測試的sql腳本位于該目錄的queries目錄下。然后執行命令行,指定數據文件格式和文件目錄, 更多的參數可參考本文第1部分的文檔鏈接,也可以執行tpch --help選項查看。
cd /par/dafu/benchmarks
/par/dafu/target/release/tpch benchmark datafusion --path /par/data/sf3-parquet --format parquet
Running benchmarks with the following options: RunOpt { query: None, common: CommonOpt { iterations: 3, partitions: None, batch_size: None, mem_pool_type: "fair", memory_limit: None, sort_spill_reservation_bytes: None, debug: false }, path: "/par/data/sf3-parquet", file_format: "parquet", mem_table: false, output_path: None, disable_statistics: false, prefer_hash_join: true, sorted: false }
Query 1 iteration 0 took 1828.3 ms and returned 4 rows
Query 1 iteration 1 took 1124.3 ms and returned 4 rows
Query 1 iteration 2 took 1126.3 ms and returned 4 rows
Query 1 avg time: 1359.65 ms
...
Query 22 iteration 0 took 180.0 ms and returned 7 rows
Query 22 iteration 1 took 170.3 ms and returned 7 rows
Query 22 iteration 2 took 175.7 ms and returned 7 rows
Query 22 avg time: 175.32 ms