基于C++的MapReduce实现(HCE)

hadoop概念

Hadoop系统提供了MapReduce计算框架的开源实现,像Yahoo!、Facebook、淘宝、中移动、百度、腾讯等公司都在借助Hadoop进行海量数据处理。Hadoop系统性能不仅取决于任务调度器的分配策略,还受到分配后实际任务执行效率的影响,任务执行常常涉及读取、排序、归并、压缩、写入等具体阶段。

百度写的一篇关于Hadoop的C++扩展.pdf

http://www.open-open.com/doc/view/08a23a4b7fcb4f23b7a064aeb416ae0a

HCE概念

HCE, short for Hadoop c++ extension
换句话说就是Hadoop在C++上面的扩展
由百度开发的Hadoop MapReduce C++扩展框架,其诞生源于baidu/dpf组对Hadoop MapReduce稳定性、扩展性和高效率的追求。HCE将MapReduce任务的执行迁移到C++环境,从而可以避免java虚拟机由于GC机制以及JNI调用所产生的不必要内存和性能开销,提供更加精确的内存控制。同时,HCE提供了可与hadoop原生java接口想媲美的API,使得用户可以方便的编写HCE的Map和Reduce任务。

HCE计算框架

HCE计算框架是一个开源项目,旨在通过优化任务执行的各个阶段,提升整个Hadoop系统的效率。与Hadoop Java框架相比,基于HCE框架的MapReduce任务最高可以节省超过30%的CPU资源使用。
基于C++的MapReduce实现(HCE)_第1张图片

Hadoop Streaming 和 Pipes框架支持C++用户开发MapReduce程序。框架启动用户可执行程序,框架和用户程序分别处于两个进程,分别占用资源。简单的分析程序不会占用太多的CPU资源,即用户程序在整个计算任务执行时间中所占比例不大,此时,优化计算框架会带来比较可观的收益;不过,对于复杂的分析程序而言,用户程序所占时间远远超过计算框架,此时,优化计算框架带来的收益可能微乎其微。因此,节省集群CPU资源离不开优化用户程序。
基于C++的MapReduce实现(HCE)_第2张图片

静态优化与动态优化

  1. 动态优化
    是在MapReduce上新增一个层,通过profiler和sampler等技术动态调整作业参数
  2. 静态优化
    让用户用编译时依赖框架提供的头文件和库文件,通过编译优化技术提升用户程序性能。
    HCE采用的是静态优化

计算框架高效C++实现

HCE框架通过C++语言实现了MapReduce的数据处理逻辑,依托比Java性能更优的C++语言,可以在数据处理操作上获得更佳的CPU利用率,同时也可以更加直接地调用Native Lib而非通过JNI(注:压缩库是Native实现,Hadoop通过JNI来调用压缩方法,HCE压缩在一个进程空间执行);此外,通过高效的编译优化方法,例如ICC编译器等,可以进一步挖掘框架的性能优势。

HCE框架通过精简的方式实现了MapReduce的数据处理流程,比较多层次的Java流式封装,HCE的处理流程更加高效。

HCE框架提供了多种语言接口C++、Python等,方便了用户编程,也节省了Streaming接口的额外开销;同时HCE也提供完全兼容原有Java Streaming的接口,即原有作业可以无缝迁移到HCE框架。

HCE程序框架

基于C++的MapReduce实现(HCE)_第3张图片
HCE框架的数据处理流程,可以看出HCE框架在C++空间高效实现了多个可扩展的功能模块,如RecordReader、OutputCollector、Shuffle、ReduceInputReader、RecordWriter、Committer、Partitioner、Mapper、Reducer、Combiner等,处理逻辑比Hadoop MapReduce更加紧凑高效。处于Hadoop Java空间的MapRunner和ReduceRunner只是起到收集状态信息的作用。

HCE框架的性能提升主要集中在Map阶段,大约超过40%。对于一般的MapReduce程序,相比Shuffle和Reduce阶段,Map阶段也是其资源占用最多的阶段,因为最终作业的输出一般仅仅是输入的10%,大量的数据处理是在Map阶段完成的。

相关资源

下载相关资源十分重要的地址

https://issues.apache.org/jira/browse/MAPREDUCE-1270

HCE 教程指导

http://download.csdn.net/detail/hit_090420216/8557653

HCE安装手册

http://download.csdn.net/detail/hit_090420216/8557647

参考内容

http://blog.csdn.net/michael_zhu_2004/article/details/8268805
http://blog.csdn.net/fbfsber008/article/details/7044656
http://baidutech.blog.51cto.com/4114344/743496

你可能感兴趣的:(分布式计算)