一、测试环境
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 |
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.
由于速度太慢,没有完成测试便中断了。