1. 项目背景
Hadoop C++ Extension(HCE)由百度开发的Hadoop MapReduce C++扩展框架,其诞生源于baidu/dpf组对Hadoop MapReduce稳定性、扩展性和高效率的追求。HCE将MapReduce任务的执行迁移到C++环境,从而可以避免java虚拟机由于GC机制以及JNI调用所产生的不必要内存和性能开销,提供更加精确的内存控制。同时,HCE提供了可与hadoop原生java接口想媲美的API,使得用户可以方便的编写HCE的Map和Reduce任务。
之前,我们已经对HCE进行了一系列性能测试,数据表明,比起Streaming框架的管道式数据交互处理和纯Java MapReduce的Java空间数据处理效率,HCE框架直接基于C++空间的数据处理具备先天优势。框架测试HCE对比纯Java框架约有21 – 41%的性能提升,对比streaming框架的性能提升更高。
但是,到目前为止,我们的性能测试还不够完善,并没有形成一套完整的测试和评价标准。随着HCE的不断完善,HCE也会被更多的线上应用所使用,如何准确的评估系统、线上应用甚至集群硬件配置的优劣,都会成为实际的问题。基于以上的考虑,本项目应运而生:为HCE,或者说Hadoop设计一套完善的benchmark,从而用于实现以下目标(包含但不限于):
(1) 对比Hadoop 其他接口和HCE接口的性能,体现HCE的性能优势。
(2) 对HCE的不同版本间进行性能基准测试,从而知道HCE的进一步开发和完善。
(3) 指导服务器选型。通过不同的硬件搭配,测试Hadoop应用的性能,确定哪些硬件配置更适合Hadoop集群。

2. 相关工作
为了实现一套更加贴切实际的benchmark,我们进行了一系列调研工作,对目前存在的几个benchmark,如gridmix以及Intel HiBench做了详细的研究,同时,作为hadoop自带的benchmark gridmix,我们对其进行了更加深入的研究,并将其所包含的用例全部迁移至HCE,并进行了性能对比。
Intel HiBench 调研
Intel在Hadoop benchmark做了一些重要工作,提供了一套Benchmark suite – HiBench来对其Hadoop集群做benchmark,并通过HiTune进行性能数据采集。
HiBench选取的计算模型较为全面和综合,既包含Micro Benchmarks,又包含web search,machine learning等应用,如下表所示:

这些Benchmark程序代表的计算模型,实现方式和输入数据如下表所示:

这些benchmark程序负载的特点如下表所示:

HiBench并没有和一般的benchmark一样,给出一组性能指标,在论文中,HiBench做性能分析时用到了如下指标:
 ※完成时间(在做不同版本hadoop性能比较时使用)
 *任务完成总时间
 *各个Task的map,shuffle,sort,reduce 时间 (通过统计JobHistory获得)
 ※CPU使用率
 *System,User,I/O wait
 ※内存
 *Used,Cached,Swapped
 ※Disk I/O 吞吐率
Gridmix调研
Gridmix是hadoop自带的一个benchmark,这套benchmark实现的比较简单,仅仅使用hadoop examples包中的GenericMRLoader来产生负载,当然Gridmix使用GenericMRLoader进行不同参数以及不同迭代层次的组合,产生了几个具有一定代表性的负载:

以下是每一类负载所使用输入数据的特征,所用数据使用RandomTextWriter来生成

这些benchmark程序负载的都比较简单,没有任何复杂计算,准确的说,没有任何计算。
Gridmix并没有和一般的benchmark一样,给出一组性能指标,也没有指定任何需要得到的任何性能数据,它仅仅提供了一组典型用例。
Gridmix的HCE迁移和测试
Gridmix作为hadoop自带的一个benchmark,如果用于HCE与java原生接口以及bistreaming接口的性能比较,获得的性能结果更容易得到社区的承认,因此,我们将gridmix的所有用例都是用HCE实现了一遍,并对其进行java原生接口与HCE进行了性能评测,测试结果显示,在大数据量下(gridmix所使用的大数据量是2T),HCE相比java性能提升了接近10%,内存使用也由于java。
不过,gridmix所使用的用例并不能代表所有的hadoop使用场景,经过我们分析,gridmix的用例中,并没有明显的CPU-Bound的用例,不存在比较复杂的计算。而现实应用中,不仅存在很多I/O密集型的应用,也存在很多的CPU密集型的应用,如聚类算法,倒排索引等等。因此,gridmix并不完全符合我们的预期。

3. Benchmark设计
一个完整的benchmark应该由三部分组成:输入数据集,计算模型以及性能指标。其中最重要的是计算模型,考虑到我们的benchmark必须集专用和通用于一身的特点,我们选择了如下一些用例:

其次,根据实际的应用需要,并不是每个用例都会实现java、bistreaming、HCE三个版本,下表中给出了目前计划的每个用例的实现版本(打钩的均为计划实现,其中红色钩表示还未实现,蓝色钩表示目前有实现,但还需要进一步抽取和完善):

4. 进展
在我们选择的计算模型中,有一部分已经有现成的实现,稍加改动就可以使用,有一部分需要完全从头实现,有一部在于公司产品中已经实现,但需要抽取出来,成为benchmark的一部分,目前已经计划的主要工作如下:

5. Benchmark初步实验数据
我们对目前已实现的部分(Java和Hce版的kmeans, terasort, sort, wordcount)的部分进行了多次实验,并对实验结果进行了简单分析。
实验环境
Hadoop/HCE版本

集群信息

实验内容
在集群上分别对运行java以及HCE版的kmeans、terasort、sort、wordcount,并对其作业完成时间、作业各阶段完成时间、集群资源使用情况的进行统计和分析。考虑到作业完成时间有一定偶然性,每个作业均重复运行三次,统计数据取平均。
数据量

实验结果

作业完成时间比较

   

以上数据是所有作业执行时间的比较,从平均时间上来看,除了Sort之外,HCE的执行效率均比原生Java接口要高,特别是Kmeans的两个作业,性能分别提升了32%和43%,当然,考虑到Kmeans的HCE和Java实现有细微差别(Vector的实现方式有些不同,因为找不到mahout的Vector底层实现,因此无法做到实现细节完全相同),所以Kmeans的实验结果并不是最具说服力的。Kmeans的HCE实现有待后期改善。
性能提升最不明显的是Sort,在三次执行中,其中有两次HCE的执行时间比Java短,但平均时间上来看,HCE比Java慢0.5%。考虑到Sort的三次执行中作业完成时间太不稳定,因此,其实验结果也不具有太大说服力。
在所有四个用力中,最具说服力的可能应该是Terasort了。HCE的执行时间比Java块20%左右。且三次执行结果比较也相对稳定。此外,WordCount性能提升也相当显著(30%)。

作业各阶段(平均)时间比较

   

以上表格中给出了作业各个阶段的平均完成时间。从表中可以发现,在执行时间很短的一些步骤中(如各个作业的Sort,以及WordCount的Reduce阶段),Java的执行效率比HCE要高,从这个现象可以看出,HCE在数据量较少的情况下优势并不明显,而JNI之类的调用开销成了决定其执行时间较长的因素。而在数据量比较大时(比如出WordCount之外其他作业的Reduce阶段,以及所有作业的Map和Shuffle阶段)HCE的优势就逐渐展现出来了。
这里我们还要特别关注Sort用力,在上一节的作业执行时间比较中,我们发现Sort的Java和HCE版本并没有什么差距,但当我们关注各阶段时间时会发现,HCE的四个阶段均比Java快。

集群资源使用情况
以下集群资源使用图,只采集了benchmark某一次运行的数据,“HCE作业执行期间”表示Benchmark中四个用例的Hce版本全部运行的时间段,同样,“Java作业执行期间”表示所有四个作业的Java版本执行的时间段。

 

以上两个曲线图分别展示了Java和Hce版本的用例在执行期间集群CPU的使用情况。相比之下,Java版用例执行期间花费了更多的CPU(Java 77.06% vs HCE 70.86%)。此外,考虑到Java版用例执行时间比HCE的执行时间还要长,更加能够体现出HCE能够更加有效的利用CPU资源这一特性。

 

以上两个曲线图分别展示了Java和Hce版本的用例在执行期间集群内存的使用情况。从中可以看出,HCE所使用的内存量比Java略大(Java 2.21G vs HCE 2.62G)。这可以看出,虽然HCE的C++环境下,手动内存管理相比Java的GC机制可以节省一些由于内存回收不及时带来的内存开销,但HCE环境毕竟比Java环境多开了一些进程。这些方面导致了HCE会比Java多一些内存开销。当然,这仅仅是一次作业执行的资源使用情况,不能太说明问题。

 

网络设备使用率方面,考虑到Java和HCE都是使用HDFS,且作业调度机制是一样的,所以网络数据流量应该相差不大,但综合考虑时间和平均网络使用率,Java版的网络流量相比更多一些,通过分析作业日志发现,Java版的Sort程序执行期间出现了比较严重的异常,导致部分作业重新执行的次数比较多,所以流量也更多一些。

(作者:xuyinfei)

【本文首发于:百度测试技术空间】http://hi.baidu.com/baiduqa/blog/item/6419902b8b4c5ded99250ab2.html
【关注百度技术沙龙】
本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/743496,如需转载请自行联系原作者

HCE Benchmark相关推荐

  1. 基于深度学习的点云配准Benchmark

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨千百度@知乎 来源丨https://zhuanlan.zhihu.com/p/289620126 ...

  2. apache bench linux,linux – 如何在CentOS上安装Apache Benchmark?

    我尝试在我的centos上使用 Is there a way to install Apache Bench (ab) without installing apache解决方案安装Apache Be ...

  3. Sebastian Ruder 发文:Benchmark 的挑战与机遇!

    过去数年,在迁移学习的推动下,NLP的模型变得越来越强大.性能快速提升的AI算法,使得现在面向AI性能的基准测试变得有些落后.例如,近来不断涌现的AI模型,在SuperGLUE.SQuAD等标准基准上 ...

  4. 华为开源CTR Benchmark,学术界SOTAs的照妖镜?

    来源 | 夕小瑶的卖萌屋作者 | 卖萌酱 众所周知,与CV.NLP不同,搜索.广告.推荐领域的学术界paper在很多问题上喜欢各玩各的,缺乏一个统一可比的benchmark. 就推荐/广告中核心的CT ...

  5. ICLR 2020| 最新NAS benchmark:0.1秒完成NAS算法搜索

    2020-01-19 16:37 专题:ICLR 2019 导语:ICLR论文解读~ 雷锋网AI科技评论按:本文对悉尼科技大学博士生董宣毅发表于 ICLR 2020 的录用Spotlight论文< ...

  6. [转载]什么情况下应该设置 cudnn.benchmark = True?

    总的来说,大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题. 一般来讲,应该遵循以下准则: 如果网络的输 ...

  7. 中国最大AI芯片发布,顺手拿下四个国内第一,带Benchmark的那种

    金磊 发自 上海 量子位 报道 | 公众号 QbitAI 上回书说到--<一份邀请函引发的中国芯片新猜想>. 于是乎,我为了验证这个猜想是否正确,特此前来上海一探究竟. 直接揭晓答案:猜对 ...

  8. 说人话,搜代码,Facebook发布神经代码搜索数据集+benchmark

    郭一璞 发自 中关村 量子位 报道 | 公众号 QbitAI 怎么才能方便的找自己需要的代码? 最好是能用人话来直接搜索.说什么就给什么那种. Facebook刚刚发布了新benchmark和数据集, ...

  9. cudnn.benchmark

    Benchmark模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异. torch.backends.cudnn.benchmark = True 1 如果想要避免这种结果波动,设置 ...

最新文章

  1. Project 2007如何打开项目向导
  2. hdu 3746 Cyclic Nacklace
  3. 什么是Angular的Target
  4. 小程序 | 获取用户头像信息接口改进:getUserInfo的使用
  5. 案例:实现商品分类导航栏
  6. “PE文件格式”1.9版 完整译文
  7. 中小企业电子商务如何发展?
  8. linux视频教程百度网盘分享
  9. Tabular学习笔记
  10. mt6735通用recovery_mt6735刷机包下载
  11. A类业余电台操作证书考试内容提要
  12. hadoop 常用命令
  13. 祖玛游戏3D版源代码
  14. JS 案例 个人所得税计算器
  15. 苹果怎么清理隐藏内存?全新手机技巧,还不会的亏大了!
  16. 下载安装anaconda
  17. 【python】验证“哥德巴赫猜想” (20 分)(简单方法,秒懂!)
  18. Tekton系列之理论篇【二】
  19. Variable(变量)、Constant(常量)
  20. 042期正版四字梅花诗:冰清一洁

热门文章

  1. 多功能电能表通信规约研究成果
  2. char (*)[]无法传给参数char **
  3. 我,北漂5年程序员,终于在帝都全款买房
  4. [Matlab科学计算] Matlab工具箱介绍和常用工具箱命令
  5. EA以7.5亿美元收购植物大战僵尸开发商PopCap
  6. python画六角图_采用计量六角图判断高压计量接线速学版-资源下载人人文库网...
  7. Linux内核I/O报错信息中hostbyte与driverbyte含义
  8. nodejs mysql 增删改查_nodejs操作mysql实现增删改查的实例
  9. java上传图片限制大小_求高手解决用java限制上传图片大小!!
  10. delphi 2007 安装提示Invalid Serial Number 超强解决办法