7.1.1 Intel Hibench与Berkeley BigDataBench

首先来介绍Hibench。

1.Hibench

Hibench[1]是由Intel开发的一个针对Hadoop的基准测试工具。它包含有一组Hadoop工作负载的集合,有人工模拟实验环境的工作负载,也有一部分是生产环境的Hadoop应用程序。Hibench是广泛应用的Hadoop Benchmark。因为Hibench针对Hadoop,如果想使用其作为Spark的Benchmark,则需要自己针对数据集开发一些Workload算法。Hibench是开源的,用户可以到Github库中下载:https://github.com/intel-hadoop/HiBench。

Hibench包含的负载如表7-1所示。

表7-1 Hibench所包含的负载

7.1.1 Intel Hibench与Berkeley BigDataBench - 图1

7.1.1 Intel Hibench与Berkeley BigDataBench - 图2

下面介绍在Hibench的基础上衍生出的一款新的Big Data Benchmark。

2.Berkeley BigDataBench

Berkeley BigDataBench[2]是随着Spark、Shark的推出,由AMPLab开发的一套大数据基准测试工具。由于其一部分是基于Hibench的数据集和数据生成器,所以将二者放在一起介绍,同时它有一部分数据集是Common Crawl上采样的文档数据集,这点和Hibench不同。其目前主要针对SQL on Hadoop产品进行基准测试。现在还很简陋,不排除以后还会增加对Spark和其他Spark生态系统组件的支持。感兴趣的读者可以到官方主页(https://amplab.cs.berkeley.edu/benchmark/)了解更多内容。

现在支持Documents、Ranking和UserVisits 3个数据集,这3个数据集的模式,如表7-2所示。

表7-2 3个数据集的模式

7.1.1 Intel Hibench与Berkeley BigDataBench - 图3

为了便于广大用户理解工作负载,BigDataBench选用了SQL作为测试的工作负载,而没有选择机器学习、流计算和图计算等工作负载。

下面简要介绍Berkely BigData Benchmark工作负载。

(1)Scan Query


  1. SELECT pageURL pageRank FROM rankings WHERE pageRank > X

这个查询的目的是对关系表进行选择和投影操作。

(2)Aggregation Query


  1. SELECT SUBSTRsourceIP 1 X), SUMadRevenue FROM uservisits GROUP BY SUBSTRsourceIP 1 X

这个查询的目的是先对关系表分组,然后使用字符串解析的函数对每个元组进行解析,最后进行一个高基数的聚集函数操作。

(3)Join Query


  1. SELECT sourceIP totalRevenue avgPageRank
  2. FROM
  3. SELECT sourceIP
  4. AVGpageRank as avgPageRank
  5. SUMadRevenue as totalRevenue
  6. FROM Rankings AS R UserVisits AS UV
  7. WHERE R.pageURL = UV.destURL
  8. AND UV.visitDate BETWEEN Date`1980-01-01') AND Date(`X')
  9. GROUP BY UV.sourceIP)
  10. ORDER BY totalRevenue DESC LIMIT 1

这个查询使用大小表连接,然后对结果进行排序。因为很多SQL on Hadoop产品都是基于Map Reduce计算模型,所以这里涉及一个经典的优化方式是Map Side Join,可以避免Shuffle阶段的网络开销。

(4)External Script Query


  1. CREATE TABLE url_counts_partial AS
  2. SELECT TRANSFORM line
  3. USING "python /root/url_count.py" as sourcePage destPage cnt
  4. FROM documents
  5. CREATE TABLE url_counts_total AS
  6. SELECT SUMcnt AS totalCount destPage
  7. FROM url_counts_partial
  8. GROUP BY destPage

在这个查询中,调用一个会抽取和聚集URL信息的Python外部函数,然后分组聚集整个URL的数量。

[1] 感兴趣的读者可参见:http://baidutech.blog.51cto.com/4114344/743496,HCE Benchmark.51CTO博客,2011-02-11。还可参见论文:Shengsheng Huang, Jie Huang, Yan Liu and Jinquan Dai,HiBench: A Representative and Comprehensive Hadoop Benchmark Suite。

[2] 参见:https://amplab.cs.berkeley.edu/benchmark/,参考自amplab对Benchmark的相关论述。