热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据Benchmark

2019独角兽企业重金招聘Python工程师标准Benchmark在计算机领域应用最成功的就是性能测试,主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Benchmark在计算机领域应用最成功的就是性能测试,主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。

数据库领域,TPC的Bench已经成为开发数据库的主流Benchmark。开发者在开发的过程中,利用Benchmark生成结构化的数据,同时利用查询生成器生成指定数据库的SQL方言。这样在开发的数据库或
者改进的算法上用SQL负载(Workload)进行测试,就能够更加精准地了解性能瓶颈,对系统进行调优。
有些Benchmark只适用于某些领域。例如,TPC针对数据仓库开发了TPC-DS Benchmark,而针对其他的数据库又有TPC-H等系列的Benchmark。


用大数据领域Benchmark标准尚未统一。下面是几种著名的大数据benchmark

Hibench

Hibench是由Intel开发的一个针对Hadoop的基准测试工具。它包含有一组Hadoop工作负载的集合,有人工模拟实验环境的工作负载,也有一部分是生产环境的Hadoop应用程序。

包含负载如下:

211433_0wXx_1427964.png

 

Berkeley BigDataBench

是随着Spark、Shark的推出,由AMPLab开发的一套大数据基准测试工具。其一部分是基于Hibench的数据集和数据生成器。同时它有一部分数据集是Common Crawl上采样的文档数据集。

目前主要针对SQL on Hadoop产品进行基准测试。

现在支持Documents、Ranking和UserVisits 3个数据集。

工作负载包括:

(1)Scan Query

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

(2)Aggregation Query

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

(3)Join Query

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

(4)External Script Query

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

 

Hadoop GridMix

Hadoop自带的Benchmark,Gridmix同样不支持Spark,用户要使用Spark,仍需自己实现Workload算法

Gridmix的使用用例不能代表所有的Hadoop使用场景。Gridmix的用例中,没有包括较为复杂的计算,也没有明显的CPU密集型的用例。而现实应用中,存在很多I/O密集型的应用,同时CPU密集型的应用也大量存在,如机器学习算法、构建倒排索引等。因此,Gridmix的WorkLoad负载并不能完全展现大数据工作负载的全貌

包含负载如下:

211830_gDrQ_1427964.png

Bigbench

是由Teradata、多伦多大学、InfoSizing、Oracle开发的一款大数据Benchmark

相关论文:Bigbench:Towards an industry standard benchmark for big data analytics

Bigbench可以作为Benchmark研究者的一个范例。Bigbench基于零售业的产品销售场景,用于评测的系统是大规模并行关系数据库和MapReduce类型的执行引擎

数据模型具有以下3种类型:

·结构化的数据:利用TPC-DS生成,筛选了TPC-DS的星型模型数据,并从中挑选部分典型关系表。
·半结构化的数据:利用网页浏览日志并通过PDGF工具生成,这些日志由零售业的客户的浏览页面产生。这些日志格式很像Apache服务器产生的日志格式,并和TPC-DS的数据模式融合,其数据规模也可以随着配置规模因子弹性调整。
·非结构化的数据:数据基于真实数据作为输入,进行采样,并利用字典通过一种使用马尔科夫链的算法生成的文本数据。同样,非结构化数据与结构化和半结构化数据融合。数据规模也可以根据配置的因子弹性动态增长。

212059_sO5L_1427964.png

几个维度来理解这个Benchmark工具现在和未来将要扩展的工作负载类型。
1)从业务维度:针对市场、销售、运营、供应链、报表5方面的负载。
2)从数据源的维度:针对结构化数据、半结构化数据、非结构化数据。
3)数据处理的方式和类型的维度:声明型语言、结构化语言或者二者的混合。
4)从分析技术的维度:统计分析、数据挖掘分析和采样报告3个维度。

 

BigDataBenchmark

是由中科院计算所开发的一款开源的大数据Benchmark

集成了19个大数据Benchmark,并从应用情景维度、运营和算法维度、数据类型维度、数据源维度以及软件栈和应用类型维度综合考虑,开发出这款Benchmark用来公正地对比和评判大数据系统和架构。BigDataBenchmark包含多样的数据输入类型。参见论文:BigDataBench:a Big Data Benchmark Suite from Internet Services,官方主页:http://prof.ict.ac.cn/BigDataBench/publications/

BigDataBenchmark的设计基于典型的大数据负载。由于在生产环境中,大数据应用的主导领域是搜索引擎、社交网络、电商。这三大领域占据了整个互联网80%的页面。BigDataBenchmark围绕这三大方向选取和开发相应领域的典型负载。数据生成器也是基于这3个领域开发和设计的。针对搜索引擎领域产生文本数据,针对社交网络产生图数据,针对电商产生结构化关系表数据。同时针对三大领域生成不同计算延迟的负载。在线(online)需要短的延迟;离线(offline)需要进行复杂数据计算分析;实时(Real-Time)需要交互式分析的负载。

 

TPC-DS

SQL on Hadoop产品的本质就是数据仓库系统,其作用是在大规模分布式的环境下分析和查询离线数据。TPC-DS(参见:TPC BenchmarkTM DS (TPC-DS):The New Decision Support Benchmark Standard。)广泛用于SQL on Hadoop的产品评测。但是,目前TPCDS基准已经很难模拟越来越复杂的决策支持系统的业务需求。

TPC-H的数据模型满足数据库模式设计的第三范式,数据模型不是现在决策支持系统主流的星型模型或者雪花型模型,业务类型也不能很好地体现物化视图和索引等OLAP型查询引擎的优势,而且其数据表不能表达数据倾斜问题,限制了索引的过度使用。为了应对这个挑战,TPC组织推出了TPC-DS,现在也正在制作和推出大数据领域的Benchmark,但还未发布。所以现在很多厂商和科研院所采用TPC-DS暂时作为SQL on Hadoop的大数据测试的Benchmark。

传统数据仓库使用的主流Benchmark就是TPC-DS。我们可以使用TPC-DS最高生成100TB的数据,能够满足大数据量的要求。数据模式采用雪花型模式:24个平均含有18列的数据库表,同时提供了99个典型Query供用户使用。这些Query类型丰富,如Ad-hoc Query、Reporting Query等,满足用户多方面的要求。

 

其他benchmark

1)Malstone:针对数据密集型计算和分析的工作负载的Benchmark工具。它基于大规模并行计算,也具有云计算的属性。
2)Cloud Harmony:使用黑盒方式度量云服务提供商的性能。它基于大规模并行计算,并且面向硬件架构,评测复杂数据的大数据运算。
3)YCSB:度量和对比云数据库的框架。基于大规模并行计算,面向大数据和云计算。
4)SWIM:一个针对MapReduce的统计工作负载。基于MapReduce面向大数据的复杂数据集的分析测试。
5)LinkBench:针对图数据库的Bechmark,在Facebook数据库工程团队,通过分析Facebook的数据库工作负载(workload)并开发了这款称为LinkBench的数据库性能测试工具。LinkBench已经开源并发布到了Github。
6)DFSIO:是一个分布式文件系统的Benchmark,针对Hadoop测试HDFS的读写性能。
7)Hive performance Benchmark(Pavlo):这是由Palvo最早提出的测试工具。这个Hive性能测试工具用于比较Hadoop和并行分析型数据库。它拥有5个工作负载,第一个是Grep(源于MapReduce的论文),其他4个典型的查询设计为代表传统的结构化分析工作负载,包括选择、聚集、连接、用户自定义函数的工作负载。Berkeley Big Data Bench就是借鉴Pavlo的Benchmark思想而进一步开发和实现的。

 

BenchMark的组成

核心是三个部分::数据集、工作负载、度量指标

数据集

数据类型分为结构化数据、半结构化数据和非结构化数据。由于大数据环境下的数据类型复杂,负载多样,所以大数据Benchmark需要生成3种类型的数据和对应负载

1)结构化数据:传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。
典型场景为互联网电商交易数据、企业ERP系统、财务系统、医疗HIS数据库、政务信息化系统、其他核心数据库等。结构规整,处理方案较为成熟。使用关系数据库进行存储和处理。
2)半结构化数据:类似XML、HTML之类,自描述,数据结构和内容混杂在一起。
典型应用场景为邮件系统、Web搜索引擎存储、教学资源库、档案系统,等等。可以考虑使用Hbase等典型的Key-Value存储系统存储。在互联网公司中存在大量的半结构化数据。
3)非结构化数据:各种文档、图片、视频/音频等。
典型应用场景为视频网站、图片相册、医疗影像系统、教育视频点播、交通视频监控、文件服务器(PDM/FTP)等具体应用。可以考虑使用HDFS等文件系统存储。在互联网公司同样存在大规模的非结构化数据。

工作负载

维度

(1)密集型计算类型
①CPU密集型计算。
②I/O密集型计算。
③网络密集型计算。
(2)计算范式
①SQL。
②批处理。
③流计算。
④图计算。
⑤机器学习。
(3)计算延迟
①在线计算。
②离线计算。
③实时计算。
(4)应用领域
①搜索引擎。
②社交网络。
③电子商务。
④地理位置服务。
⑤媒体,游戏。

 

典型负载

(1)基本负载
1)Word Count。
WordCount是CPU密集型的操作负载
2)Sort。
排序算法是I/O密集型的负载。

3)Tera Sort
在运行的过程中,map映射和Shuffle阶段是CPU密集型的(CPU intensive),I/O程度中等,在reduce阶段是I/O密集型的(I/O intensive),CPU计算中等。

算法实现思想:当把传统的串行排序算法设计成并行的排序算法时,通常会想到分而治之的策略。排序并行化的一般做法是:把要排序的数据划成M个数据块(可以用Hash的方法做到),然后每个map task对一个数据块进行局部排序,之后,一个reduce task对所有数据进行全排序。这种设计思路可以保证在map阶段并行度很高,但在reduce阶段完全没有并行。为了提高reduce阶段的并行度,TeraSort作业对以上算法进行改进:在map阶段,每个map task都会将数据划分成R个数据块(R为reduce task个数),其中第i(i>0)个数据块的所有数据都会比第i+1个数据块中的数据大;在reduce阶段,第i个reduce task处理(进行排序)所有map task的第i块,这样第i个reduce task产生的结果均会比第i+1个大,最后将1~R个reduce task的排序结果顺序输出,即为最终的排序结果。

(2)机器学习

如K-Means算法

(3)图计算

如PageRank图计算算法

(4)SQL

 

度量指标

(1)从架构角度进行度量
·浮点型操作密度。
·整数型操作密度。
·指令中断。
·cache命中率(L1 miss、L2 miss、L3 miss)。
·TLB命中。
(2)从Spark系统执行时间和吞吐的角度度量
·Job作业执行时间。
·Job吞吐量。
·Stage执行时间。
·Stage吞吐量。
·Task执行时间。
·Task吞吐量。
(3)从Spark系统资源利用率的角度度量
·CPU在指定时间段的利用率。
·内存在指定时间段的利用率。
·磁盘在指定时间段的利用率。
·网络带宽在指定时间段的利用率。
(4)从扩展性的角度度量
·数据量扩展。
·集群节点数扩展(scale out)。
·单机性能扩展(scale up)。

 

TPC-DS使用

TPC-DS使用广泛,查询模板丰富

(1)下载最新的包:http://www.tpc.org。

(2)Make生成可执行文件

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数据。
dbgen2 –scale 100 –dir /tmp
常用的数据规模参数可以有100GB、300GB、1TB、3TB、10TB、30TB和100TB。

3)可以通过配置参数“-delimiter‘’”选项修改文件分隔。
4)当数据规模巨大时,可以通过并行方式生成。例如,生成100GB的数据,通过4路并
行在Linux/Unix上运行。
dbgen2 –scale 100 –dir /tmp –parallel 4 –child 1 &
dbgen2 –scale 100 –dir /tmp –parallel 4 –child 2 &
dbgen2 –scale 100 –dir /tmp –parallel 4 –child 3 &
dbgen2 –scale 100 –dir /tmp –parallel 4 –child 4 &

(5)加载数据
在Shark中需要先建表,然后加载数据,加载数据的方式和Hive是相近的。加载数据时
候,需要注意使用的分隔符。
注意由于TPC-DS的数据类型在Shark中并不完全适用,所以可以修改数据类型为以下格
式。

drop table customer_address;
create table customer_address
(
ca_address_sk bigint ,
ca_address_id string ,
ca_street_number string ,
ca_street_name string ,
ca_street_type string ,
ca_suite_number string ,
ca_city string ,
ca_county string ,
ca_state string ,
ca_zip string ,
ca_country string ,
ca_gmt_offset double ,
ca_location_type string
) row format delimited fields terminated by '|' lines terminated by '\n' stored as textfile ;
在Shell中执行如下命令加载数据,或者这条命令在SQL中让Shark执行。
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模板查询的例子。
qgen2 –query99.tpl –directory query_templates –dialect oracle –scale 100

(7)运行查询
查询的运行依赖于当时正在运行的大数据系统。
Shark执行查询的命令和方式如下。
1)在Shark的Shell中执行,将query的SQL语句复制到Shell执行。

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

2)在命令行后追加SQL语句执行查询。
$ ./bin/shark -e "SELECT * FROM foo" # Run a specific query and exit
3)在命令行后追加文件执行查询。
$ ./bin/shark -i queries.hql # Run queries from a file
关于其他的高级选项,感兴趣的用户可以通过查看文档了解。

 


转:https://my.oschina.net/bigsloth/blog/754810



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
author-avatar
张茂彪6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有