热门标签 | 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



推荐阅读
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
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社区 版权所有