Hive查詢效能測試記錄
阿新 • • 發佈:2019-02-08
一、測試環境
HDFS 七個節點,五個dn,兩個nn。Hive配置在其中一個nn,使用MySQL遠端元資料庫,同一個節點同時開啟hiveserver2和metastore。所有節點記憶體一致,30GB,CPU為Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (x86_64)。所有節點通通過兩臺真實物理機虛擬(使用XenServer虛擬)。
二、樣本資料
資料儲存在HDFS,格式為parquet,存在分割槽。每條記錄如下:
id | <tm, k1..k350, t351..t500>
根據id分割槽,分割槽數為1000。欄位型別:id int, tm String, kn 為int, tn 為double。
按業務場景,每秒每個分割槽(裝置)產生一條資料,共501個欄位(500個測點+timestamp),每天每分割槽產生172800條資料。共有兩天的資料,樣本總容量為172800*1000*2=345600000。
三、Hive表建立
(1)建立內部表
create table wt_csv_newtb (tm string, k1 int, k2 int .. k350 int, t351 double, t352 double .. t500 double)
partitioned by (id int) stored as parquet;
(2)建立1000分割槽
分別執行1000個分割槽:
alter table wt_csv_newtb add partition (id = x);
x 取值{1,2,3 .. 1000}
(3)資料建立
使用程式生成資料,並匯入此表中,此處略。
四、測試查詢
1、資料完整性校驗
SQL語句 select count(*) from wt_csv_newtb where id = <dev_id>
SQL語句 select count(*) from wt_csv_newtb; -- 全分割槽查詢
查詢兩次:
2880.15秒
2941.935秒
2、全量資料多維度查詢
SQL語句 SELECT t390 FROM wt_csv_newtb WHERE t450>999.9994 and id>20 and id<(20+100) order by t390;
結果數為9.
由於速度太慢,沒有完成測試便中斷了。
HDFS 七個節點,五個dn,兩個nn。Hive配置在其中一個nn,使用MySQL遠端元資料庫,同一個節點同時開啟hiveserver2和metastore。所有節點記憶體一致,30GB,CPU為Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (x86_64)。所有節點通通過兩臺真實物理機虛擬(使用XenServer虛擬)。
二、樣本資料
資料儲存在HDFS,格式為parquet,存在分割槽。每條記錄如下:
id | <tm, k1..k350, t351..t500>
根據id分割槽,分割槽數為1000。欄位型別:id int, tm String, kn 為int, tn 為double。
按業務場景,每秒每個分割槽(裝置)產生一條資料,共501個欄位(500個測點+timestamp),每天每分割槽產生172800條資料。共有兩天的資料,樣本總容量為172800*1000*2=345600000。
三、Hive表建立
(1)建立內部表
create table wt_csv_newtb (tm string, k1 int, k2 int .. k350 int, t351 double, t352 double .. t500 double)
partitioned by (id int) stored as parquet;
(2)建立1000分割槽
分別執行1000個分割槽:
alter table wt_csv_newtb add partition (id = x);
x 取值{1,2,3 .. 1000}
(3)資料建立
使用程式生成資料,並匯入此表中,此處略。
四、測試查詢
1、資料完整性校驗
SQL語句 select count(*) from wt_csv_newtb where id = <dev_id>
序號 |
id |
查詢時間(秒) |
1 |
1 |
38.55 |
2 |
560 |
48.479 |
3 |
2 |
54.278 |
4 |
100 |
50.955 |
5 |
999 |
54.499 |
查詢兩次:
2880.15秒
2941.935秒
2、全量資料多維度查詢
SQL語句 SELECT t390 FROM wt_csv_newtb WHERE t450>999.9994 and id>20 and id<(20+100) order by t390;
結果數為9.
由於速度太慢,沒有完成測試便中斷了。