【Hive-Hive写入数据压测】使用hive-testbench对Hive的写入数据进行压测
1)前言
在对Hive的语法及性能进行测试时,需要构造大量数据,我们可以使用hive-testbench
生产指定数据量大小的数据。
1.1.hive-testbench介绍
hive-testbench
提供了两种基准测试的数据生成器和示例查询(我们使用TPC-DS
):
-
TPC-DS
:提供一个公平和诚实的业务和数据模型,99个案例。 -
TPC-H
:面向商品零售业的决策支持系统测试基准,定义了8张表,22个查询。
1.2.TPC-DS介绍
(1)TPC-DS简介
1、 TPC-DS采用星型、雪花型等多维数据模式。
2、TPC-DS包含7张事实表,17张纬度表平均每张表含有18列。其工作负载包含99个SQL查询,覆盖SQL99和2003的核心部分以及OLAP。这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。TPC-DS是与真实场景非常接近的一个测试集,也是难度较大的一个测试集。
(1)TPC-DS基准测试特点
TPC-DS成为客观衡量多个不同Hadoop版本以及SQL on Hadoop技术的最佳测试集。
TPC-DS基准测试有以下几个主要特点:
-
一共99个测试案例,遵循SQL99和SQL 2003的语法标准,SQL案例比较复杂
-
分析的数据量大,并且测试案例是在回答真实的商业问题
-
测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等)
-
几乎所有的测试案例都有很高的IO负载和CPU计算需求
2)准备工作
2.1.压测工具
hive-testbench
使用hive-testbench
生成指定数据量的Hive基准测试数据。
基于TPC-DS
进行封装利用MapReduce
的方式快速的生成Hive基准测试数据。
2.2.环境准备
(1)下载工具
git clone https://github.com/hortonworks/hive-testbench.git
yum -y install gcc gcc-c++
(2)编译并打包hive-testbench
cd hive-testbench/
./tpcds-build.sh
等待编译结束,如下显示则表示编译成功
#TPC-DSDataGeneratorbuilt,youcannowusetpcds-setup.shto generatordata.
2.3.数据准备
(1)生成数据
参数说明:
- 5:生成数据量大小
- /tmp/tpcds-generate/:生成的文件保存在
HDFS
中的目录位置,如果不指定,默认为/tmp/tpcds-generate/
./tpcds-setup.sh 5 /tmp/tpcds-generate/
(2)查看生成文件
hdfs dfs -ls /tmp/tpcds-generate/
(3)查看文件大小
hdfs dfs -du -h /tmp/tpcds-generate/
2.4.监控指标
利用ClouderaManager
管理界面查看写入吞吐量(在ClouderaManager
主页面)
3)注意
注意:
1、截止到上面的操作步骤时已经成功完成Hive写入数据的压测了。
2、如果需要继续测试Hive读取数据压测,那么需要利用我们刚才生成的表数据进行压测查询,所以就要判断生成的测试数据是否生成表。
正常情况下,执行完数据生成脚本(./tpcds-setup.sh 5 /tmp/tpcds-generate/
)后,会自动在Hive中创建数据库以及external外表,指定location,映射到我们生成数据的目录。
但是实际操作过程中可能会出现数据生成但是无法创建表的情况。
如下图:
解决方案:
因为我们生成的测试数据已经成功导入到了HDFS中,那么我们可以通过external
(外表)指定location
的方式来完成表的创建。
1、这里我在源码里找到了TPC-DS生成测试数据的建表语句:TPC-DS生成测试数据的建表语句
2、如果上面的链接无法进入,这里有已经copy好的DDL(只需修改sql脚本中的${DB}
和${LOCATION}
即可):TPC-DS生成测试数据的建表语句(提取码:79yu
)