You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 23 | 大数据基准测试可以带来什么好处?
2012年的时候Hadoop已经日趋成熟Intel的大数据团队也正准备寻找新的技术研究方向。当时我们对比测试了多个新出来的大数据技术产品最终选择了Spark重点跟进参与。现在看来这是一个明智的决定作出这个决定是基于大数据基准测试而使用的对比测试工具就是我今天要讲的大数据基准测试工具HiBench。
大数据作为一个生态体系不但有各种直接进行大数据处理的平台和框架比如HDFS、MapReduce、Spark还有很多周边的支撑工具而大数据基准测试工具就是其中一个大类。
## 大数据基准测试的应用
大数据基准测试的主要用途是对各种大数据产品进行测试,检验大数据产品在不同硬件平台、不同数据量、不同计算任务下的性能表现。
上面这样讲大数据基准测试的用途可能比较教条,我举两个例子你就能明白它的应用有多么重要了。
还是回到2012年当时Hive只能做离线的SQL查询计算无法满足数据分析师实时交互查询的需求业界需要一款更快的ad hoc query即席查询一种非预设查询的SQL访问工具。在这种情况下Cloudera推出了准实时SQL查询工具Impala。Impala兼容Hive的Hive QL语法和Hive MetaSotre也支持Hive存储在HDFS的数据表但是放弃了Hive较慢的MapReduce执行引擎而是基于MPPMassively Parallel Processing大规模并行处理的架构思想重新开发了自己的执行引擎从而获得更快的查询速度。
由于Cloudera在大数据领域的巨大权威加上人们对快速SQL查询的期待Impala在刚推出的时候受到大数据业界的极大瞩目。当时我也立即用四台服务器部署了一个小集群利用大数据基准测试工具HiBench对Impala和Hive做了一个对比测试。
![](https://static001.geekbang.org/resource/image/96/9b/961e6cc96cb0beb649d96bd21ed62b9b.png)
但是经过对比测试以后我发现情况并不乐观。Impala性能有优势的地方在于聚合查询也就是用group by查询的SQL语句而对于连接查询也就是用join查询的SQL语句性能表现很差。我进一步阅读Impala的源代码对设计原理和架构进行分析后得出了自己的看法我认为适合Impala的应用场景有两类
* 一类是简单统计查询,对单表数据进行聚合查询,查看数据分布规律。
* 一类是预查询在进行全量数据的SQL查询之前对抽样数据进行快速交互查询验证数据分析师对数据的判断方便数据分析师后续设计全量数据的查询SQL而全量数据的SQL还是要运行在Hive上。
这样Impala就有点尴尬了它的定位似乎只是Hive的附属品。这就好比Impala是餐前开胃菜和餐后甜点而正餐依然是Hive。
但是Cloudera却对Impala寄予厚望后来我和Cloudera的工程师聊天得知他们投入了公司近一半的工程师到Impala的开发上我还是有点担心。事实上这么多年过去了Impala经过不断迭代相比最开始的性能有了很大改进但是我想Impala依然没有承担起Cloudera对它的厚望。
跟Impala相对应的是同样是2012年Intel大数据团队用大数据基准测试工具HiBench对Spark和MapReduce做了对比测试后发现Spark运行性能有令人吃惊的表现。当时Intel大数据团队的负责人戴老师Jason Dai立即飞到美国跟当时开发Spark的UC Berkeley的AMP实验室交流表示Intel愿意参与到Spark的开发中。Spark也极其希望有业界巨头能够参与其中开发代码尚在其次重要的是有了Intel这样的巨头背书Spark会进一步得到业界的认可和接受。
所以Intel成了Spark最早的参与者加速了Spark的开发和发展。当2013年Spark加入Apache的开源计划并迅速成为Apache的顶级项目风靡全球的大数据圈子时Intel作为早期参与者也得到了业界的肯定使Intel在大数据领域可以保持持续的影响力。
在这个案例里所有各方都是赢家Spark、Intel、Apache乃至整个大数据行业我作为Intel参与Spark早期开发的工程师也都因此而受益。这也是我关于工作的一个观点好的工作不光是对公司有利对员工也是有利的。工作不是公司在压榨员工的过程而是公司创造价值同时员工实现自我价值的过程。
而如何才能创造出好的工作也不只是公司的责任主要还是要靠员工自己去发现哪些事情能够让自己、公司、社会都获益然后去推动这些事情的落实虽然有的时候推动比发现更困难。同时拥有发现和推动能力的人毫无例外都是一些出类拔萃的人比如专栏前面也提到的Intel的戴老师这些人都是我工作的榜样。
## 大数据基准测试工具HiBench
大数据基准测试工具有很多今天我重点为你介绍前面我多次提到的也是Intel推出的大数据基准测试工具[HiBench](http://github.com/intel-hadoop/HiBench)。
HiBench内置了若干主要的大数据计算程序作为基准测试的负载workload
* Sort对数据进行排序大数据程序。
* WordCount前面多次提到过词频统计大数据计算程序。
* TeraSort对1TB数据进行排序最早是一项关于软件和硬件的计算力的竞赛所以很多大数据平台和硬件厂商进行产品宣传的时候会用TeraSort成绩作为卖点。
* Bayes分类机器学习分类算法用于数据分类和预测。
* k-means聚类对数据集合规律进行挖掘的算法。
* 逻辑回归,数据进行预测和回归的算法。
* SQL包括全表扫描、聚合操作group by、连接操作join几种典型查询SQL。
* PageRankWeb排序算法。
此外还有十几种常用大数据计算程序支持的大数据框架包括MapReduce、Spark、Storm等。
对于很多非大数据专业人士而言HiBench的价值不在于对各种大数据系统进行基准测试而是学习大数据、验证自己大数据平台性能的工具。
对于一个刚刚开始入门大数据的工程师而言在自己的电脑上部署了一个伪分布式的大数据集群可能并不复杂对着网上的教程顺利的话不到1个小时就可以拥有自己的大数据集群。
但是接下来呢开发MapReduce程序、打包、部署、运行可能这里每一步都会遇到很多挫折。即使一切顺利但顾名思义对于“大数据”来说需要大量的数据才有意义那数据从哪儿来呢如果想用一些更复杂的应用体验下大数据的威力可能遇到的挫折就更多了所以很多人在安装了Hadoop以后然后就放弃了大数据。
对于做大数据平台的工程师,如果等到使用者来抱怨自己维护的大数据平台不稳定、性能差的时候,可能就有点晚了,因为这些消息可能已经传到老板那里了。所以必须自己不停地跑一些测试,了解大数据平台的状况。
有了HiBench这些问题都很容易就可以解决HiBench内置了主要的大数据程序支持多种大数据产品。最重要的是使用特别简单初学者可以把HiBench当作学习工具可以很快运行起各种数据分析和机器学习大数据应用。大数据工程师也可以用HiBench测试自己的大数据平台验证各种大数据产品的性能。
HiBench使用非常简单只需要三步
1.配置,配置要测试的数据量、大数据运行环境和路径信息等基本参数。
2.初始化数据生成准备要计算的数据比如要测试1TB数据的排序那么就生成1TB数据。
3.执行测试,运行对应的大数据计算程序。
具体初始化和执行命令也非常简单比如要生成数据只需要运行bin目录下对应workload的prepare.sh就可以自动生成配置大小的数据。
```
bin/workloads/micro/terasort/prepare/prepare.sh
```
要执行大数据计算运行run.sh就可以了。
```
bin/workloads/micro/terasort/hadoop/run.sh
bin/workloads/micro/terasort/spark/run.sh
```
## 小结
同一类技术问题的解决方案绝不会只有一个技术产品也不会只有一个比如大数据领域从Hadoop到Spark再到Flink各种大数据产品层出不穷那么如何对比测试这些大数据产品在不同的应用场景中它们各自的优势是什么这个时候就需要用到基准测试工具通过基准测试工具用最小的成本得到我们想测试的结果。
所以除了大数据,在很多技术领域都有基准测试,比如数据库、操作系统、计算机硬件等。前几年手机领域的竞争聚焦在配置和性能上,各路发烧友们比较手机优劣的时候,口头禅就是“跑个分试试”,这也是一种基准测试。
因此基准测试对这些产品而言至关重要甚至攸关生死。得到业界普遍认可的基准测试工具就是衡量这些产品优劣的标准如果能使基准测试对自己的产品有利更是涉及巨大的商业利益。我在Intel开始做SQL引擎开发后来做Spark开发需要调查各种数据库和大数据的基准测试工具也就是在那个时候我发现华为这家公司还是很厉害的在很多基准测试标准的制定者和开发者名单中都能看到华为的名字而且几乎是唯一的中国公司。
有时候我们想要了解一个大数据产品的性能和用法看了各种资料花了很多时间最后得到的可能还是一堆不靠谱的N手信息。但自己跑一个基准测试也许就几分钟的事再花点时间看看测试用例从程序代码到运行脚本很快就能了解其基本用法更加省时、高效。
## 思考题
今天文章的Impala VS Hive的基准测试报告里发现当数量很大的时候做join查询Impala会失去响应是因为Impala比Hive更消耗内存当内存不足时就会失去响应。你能否从Impala的架构和技术原理角度分析为什么Impala比Hive更消耗内存
欢迎你点击“请朋友读”,把今天的文章分享给好友。也欢迎你写下自己的思考或疑问,与我和其他同学一起讨论。