7.3.2 使用TPC-DS

下面介绍TPC-DS(注:参见:http://www.tpc.org/tpcds/,TPC BenchmarkTMDS (TPC-DS):The New Decision Support Benchmark Standard。)的使用方式。

(1)下载最新的包

用户可以到TPC主页进行下载:http://www.tpc.org。

(2)Make生成可执行文件[1]

1)将Makefile.suite文件复制为Makefile。

2)编辑修改Makefile,找到含有“OS=”的行。

3)阅读注释并增加指定的OS,如“OS=LINUX”。

4)执行make。

(3)Windows操作系统编译TPC-DS,生成可执行文件

1)安装Microsoft Visual Studio 2005。

2)双击打开整个解决方案dbgen2.sln(可能会看到报错“project file grammar.vcproj”,可以忽略这个错误)。

3)在项目列表中,右击dbgen2(是数据生成器),然后选择“build”(或者从顶层菜单单击Build→Build Solution)。

4)重复步骤3构建查询生成器qgen2。

5)针对X64 and IA64 on X86平台进行交叉编译,安装Microsoft Visual Studio 2005“Team Suite”SKU,然后选择from Build→Configuration Manager命令,并重复执行步骤3和步骤4,进而修改目标的运行平台。

(4)生成数据

1)运行“dbgen2–h”以获取帮助信息。注意:许多高级选项并不是必须的。

2)在目录/tmp下生成个100GB数据。


  1. dbgen2 scale 100 dir /tmp

常用的数据规模参数可以有100GB、300GB、1TB、3TB、10TB、30TB和100TB。

3)可以通过配置参数“-delimiter‘<c>’”选项修改文件分隔。

4)当数据规模巨大时,可以通过并行方式生成。例如,生成100GB的数据,通过4路并行在Linux/Unix上运行。


  1. dbgen2 scale 100 dir /tmp parallel 4 child 1 &
  2. dbgen2 scale 100 dir /tmp parallel 4 child 2 &
  3. dbgen2 scale 100 dir /tmp parallel 4 child 3 &
  4. dbgen2 scale 100 dir /tmp parallel 4 child 4 &

(5)加载数据

在Shark中需要先建表,然后加载数据,加载数据的方式和Hive是相近的。加载数据时候,需要注意使用的分隔符。

注意由于TPC-DS的数据类型在Shark中并不完全适用,所以可以修改数据类型为以下格式。


  1. drop table customer_address
  2. create table customer_address
  3. ca_address_sk bigint
  4. ca_address_id string
  5. ca_street_number string
  6. ca_street_name string
  7. ca_street_type string
  8. ca_suite_number string
  9. ca_city string
  10. ca_county string
  11. ca_state string
  12. ca_zip string
  13. ca_country string
  14. ca_gmt_offset double
  15. ca_location_type string
  16. row format delimited fields terminated by '|' lines terminated by '\n' stored as textfile

在Shell中执行如下命令加载数据,或者这条命令在SQL中让Shark执行。


  1. LOAD DATA INPATH 'hdfs://hive01:9000/3t/customer.dat' INTO TABLE customer_address

(6)通过模板生成查询

query_templates文件夹下有99个查询模板,用户可以到其中查询模板并生成指定的查询。

由于不同厂家的SQL并不是全部遵循ANSI标准。例如“LIMIT”和“BEGIN/COMMIT”,qgen2需要指定方言“dialect”。现在支持几类模板:db2.tpl、netezza.tpl、oracle.tpl、sqlserver.tpl。下面是生成oracle方言,针对100GB数据规模,使用query99模板查询的例子。


  1. qgen2 query99.tpl directory query_templates
  2. dialect oracle scale 100

(7)运行查询

查询的运行依赖于当时正在运行的大数据系统。

Shark执行查询的命令和方式如下。

1)在Shark的Shell中执行,将query的SQL语句复制到Shell执行。


  1. $ ./bin/shark # Start CLI for interactive session

2)在命令行后追加SQL语句执行查询。


  1. $ ./bin/shark -e "SELECT * FROM foo" # Run a specific query and exit

3)在命令行后追加文件执行查询。


  1. $ ./bin/shark -i queries.hql # Run queries from a file

关于其他的高级选项,感兴趣的用户可以通过查看文档了解。

[1] 针对AIX、LINUX、HPUX、NCR和Solaris操作系统。