百度杨栋:HCE助MapReduce提升资源利用率

作者: 来源:未知 2012-03-05 16:30:01 阅读 我要评论 直达商品

本身功能框架大概分四个层次,最上层提供了Java,C++,Streaming,Python,Php,相比于原来只提供Java接口,他认为如果你是原生态就做Java,其他语言统一Streaming,这样问题开发者会有一些变动,第二Streaming还是有一些管道开销。处理每一个KV都需要管道,管道就是拷贝一次,都会额外有两次拷贝到Java里面,如果省去这一点可以节省一点,有人说节省这一点重要吗?对于一个上万台集群,只要节省1%就赚了几百万,节这么一个概念。

第二层次是Compiler Optimization,对编译做的。还有一个代码实现,能够从C++转到上面的Php接口,这个其实代码量100内搞定,很方便实现多语言。执行层没什么好说的,执行层和Hadoop原来都是一样的,只不过我们原来做了一些优化,让每一个模块都比原来高高兴一点。底层的压缩库,我们做了一些调优,因为大家都知道,发明一个压缩算法很难,因为像传统是有几十种压缩算法,我们只需要针对不同数据去选择不同的压缩算法。还有存储接口,可以和C++存储更好交互,换句话能够在其他C++实现的上节省很多IO如果你要通过GNI,其他的方式来做。

文件格式传统Hadoop支持两种,MapReduce,文本等格式。看一下整个数据流,整个HCE数据流,用户提交作业从这端开始提交,到切割处理,相当于上层只是在Java只是一个虚拟的代理,真正实现都是在C++上面。其实早期做了一项,通过C++空间来实现Shuffling,其实效果不大,本身瓶颈不在于传输,而在于本身在2.0里面,把部分槽位省下来,本身性能有很大提高。其实C++端贡献最大还是Reduce这块,相当数据流这端,最终数据输出在控制上层做完就OK了。

换句话说,把数据切到C++的第三个,为什么还要实现,因为很多作业已经用Streaming跑,我们增加了StreamingOver Hce的接口。这里SSE怎么利用静态编译去优化一个程序?实现一些传统方法向,这种操作对每一种都有3到5倍,甚至10倍提升。有人说这些用户他可能不用,换句话说SSE就是强迫用户用,用户用C编程必须要去包HCE框架,这种SSE指令级带来性能提升。

最终会提供这么几个接口,像C++,CHE等一些接口,性能大概有10%-30%提升,而谁在用呢?像Java是Hive在用。对于一些需要提升性能的,因为是,还有一些比较大的用户程序占了很多东西作业,他是用C++就能有很多提升。进行一个对比,HCE对比Hadoop有这么几个方面,提供编程接口更多一些,很容易支持其他存储系统。第三,本身要比基于JNI的性能提升很多,再就是我们用实现静态编译,使用户进程能够跑的很快,当然会做一些像比较久远算法,在大数据里面,因为默认Hadoop最终容易实现combiner,这是什么呢?就是Map阶段去做Reduce,这是很重要优化。所以,HCE用这些技术都会比Hadoop更优。

最后我们看一下对比,他的性能比,这是原来Hadoop,什么叫Timings,我把所有Shuffling切成一段段对比,HCE取两块,其他都是一些功能型实现。为什么优化呢?因为第一C++在本地做排序,第二我们有用JNG,我们考虑 压缩因素,压缩算法有很多,尤其是中间结果压缩,基于本地的,换句话说你在本地,大家看这幅图,什么情况最高呢?他恰恰中间结果用了IOGO压缩最多,换句话这个压缩比最好,耗的CPU最多,需不需要用这个呢?不一定,大家去看官网,其实你做压缩,本地本身跑计算这些数据已经是半结构化的数据,或者结构化的数据,他做到这一部,用其他压缩法压缩比也不会差一倍,本身CPU消耗,包括Google等等这些东西也比哪些高很多,这是10个节点100G测算结果。

如果我用SSE指令来编译的时候,利用编译优化的算法还有额外10%的提升。第二个应用,这是百度实际应用,跑两个实际应用,第一个是语言的影响,第一个是Hadoop传统Streaming,大概跑了50秒。本身HCE,这是差不多在90台机器上跑的,用HCEStreaming有所提升,你省去Streaming管道还有一个提升,传统跑了20多秒,变成Streaming跑了这么多等等都不同,所以根据实际来看优化框架和静态编译优化程序我们都做到了。

最后总结一下,不应该叫Jobs,我们如何去优化一个tasks,我们HCE目标就是优化tasks。首先你要通告combiner,保证在Map端数据减少,到Reduce就很轻量级。第二是用C++接口,第二通过压缩算法等来进行。Contribution大概在今年年底,所有集成作业都会切到HCE上,当然是百度的。第二就是Applications,有哪些用户,有哪些作业?他任务都很大,很重量级。第二就是MapReduce-based warehouse,这就是我那会说的话,HCE本身会节省超过10%机器,为公司能节省,如果全部用上的话能节省10%。

什么叫Hive Over HCE。有一个同学在Hive工作,我把HCE推荐给Hive,他做了一些试用,以及他们跑的一些作业。FaceBook这边做了一些简单实践,他相当于把MapReduce,因为大家了解Hive就是MapReduce一层分装,把Hive和Reduce本身实现复杂逻辑。Hive支持是劣存储,他实现这些东西,然后就迁过去。他给出数据,他们实际跑的FaceBook一些作业有20%到50%性能提升,为什么平均30%呢,不是很高呢,因为他的作业都是很重量级。换句话FaceBook作业都是好CPU,什么在好CPU,超过70%是压缩和解压缩,为什么?因为国内这方面可能做的不好,国外所有的输入输出都是利用Jira压缩,现在国内都是计算式瓶颈,有的人觉得不差钱加机器扩容解决,国外这块做的比较精细一点。

有没有办法解决呢?我建议一种方法,用SSE把压缩库重新编译成内联的方式。因为所有的压缩都是用我前面说的这些简单的语言,函数实现,而压缩库本身是是0的,你必须利用高效指令进行优化,因为Hadoop利用到这种技术。所以,这是一个额外话题,你希望去优化程序,你应该去关注程序本身性能损耗在哪里,有没有相似或者有没有一些简单不用去实现那么复杂的动态配置来解决这个问题。


  推荐阅读

  圆桌沙龙:NoSQL技术实战

时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信、金融等行业,几乎已经到了“数据就是业务本身”的地步。这种趋势已经让很多相信数据之力量的企业做出改变。恰逢此时,为了让更多的人了解和使>>>详细阅读


本文标题:百度杨栋:HCE助MapReduce提升资源利用率

地址:http://www.lgo100.com/a/kandian/20120305/36929.html

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
我的评论: 人参与评论
验证码: 匿名回答
网友评论(点击查看更多条评论)
友情提示: 登录后发表评论,可以直接从评论中的用户名进入您的个人空间,让更多网友认识您。
自媒体专栏

评论

热度