集算器是新型并行计算框架,它支持读写HDFS中的文件,可以通过并行框架将计算任务分担到多个节点中。它专注于加强Hadoop的计算能力,从而实现计算性能和开发效率更高的大数据应用。

更强的计算能力。Hadoop所使用的计算语言为JAVA,JAVA是通用性和扩展性极佳的语言,但它不适用于专业化的数据计算领域和大数据处理领域。MapReduce没有库函数来支持最简单的数据算法,对于关联计算、子查询、行间计算、有序计算这类典型的数据算法它更加不支持,计算能力很弱。

同样是以JAVA为基础,集算器则向用户提供了更专业的大数据脚本语言,它专为数据计算而设计,专为大数据处理而优化。它不仅提供了丰富的库函数,更直接支持多数据集关联查询、子查询、行间计算、有序计算。集算器配合HDFS使用,可大大加强Hadoop的计算能力。

为了解决语言专业性的问题,Hadoop提出了Hive SQL,用户只需写出类似SQL的语句就可以进行常见的数据计算。但Hive SQL局限性较大,它是SQL的子集,计算能力天生受限;它也不支持存储过程,稍具复杂性的计算它就无法完成,只能求助于MapReduce。

集算器具有完备的计算体系和强大的计算能力,可以轻松实现任意的计算要求;它支持彻底的分步计算,可以比存储过程更容易地实现复杂计算目标的简化和求解。集算器还可以通过JDBC调用Hive的计算结果,两者的配合非常方便。简单的计算仍然由Hive完成,复杂的计算则可以交给集算器。如此一来Hive没有存储过程的窘境可以轻松化解。

更高的性能。MapReduce框架很死板,默认情况下它会按照最细的粒度来分配任务,这将使任务分配所消耗的时间达到最大,如10亿条数据就会被分配10亿次,需要调用10亿次Map函数;而集算器的并行框架是灵活自由的,可以由用户根据硬件性能分配计算任务的规模,比如把数据分配100份。如此一来分配任务所消耗的时间只有MapReduce的千万分之一,性能因此大幅提升。再比如直接对大数据排序时是无需分配任务的,但hadoop仍然会分配10亿次任务,节点机也必须假装计算一番再原样返回这些数据,而集算器可以跳过这个毫无意义而又白白浪费资源的计算过程,性能提升明显。

MapReduce的死板还体现在:它规定跨机交互的中间计算结果必须以文件的形式存储于HDFS中。虽然这对数据的容错性大有好处,但每个节点大量的硬盘操作和冗余优化会产生较高的延迟门槛,无法提升性能的上限。集算器可由用户根据计算时间的长短作出灵活的选择,既可以将节点机内存中的中间计算结果存储于HDFS,也可以直接传输给汇总机。用户甚至可以选择先直接传输再存储于HDFS,如此可达到性能和安全性的双赢。

MapReduce缺乏专业的大数据计算库函数,因此它不支持多表关联、比上期、同期比等常见的数据运算。如果想变相地实现这类计算,用户必须设法绕过原有的架构,这样会大幅度降低运算性能。集算器的库函数专为大数据计算而设计,天生支持多表关联计算、行间计算、有序计算等算法。集算器配合HDFS可以大大提高Hadoop的运算效率。

Hive的底层仍然是MapReduce,实现关联计算、子查询、行间计算、有序计算时仍然需要牺牲性能。Hive SQL和RDB SQL有着一个数量级左右的差距,这是让人不可忍受的。而集算器从底层起就是为大数据计算而设计的,其性能和SQL接近。两者可通过JDBC接口进行协作,对性能要求不高的计算由Hive完成,而对计算有时实行要求的地方由集算器完成。

更高的开发效率。MapReduce没有提供针对大数据计算的库函数,即使最简单的计算都需要用户手工编程,开发效率极低。为了绕过原有的架构去实现关联计算、有序计算、等值分组、比上期、同期比等算法则需要更高的开发技巧和更大的工作量。因为开发效率极低,用户无法自由方便地将业务逻辑表达为计算机语言,因此上述做法虽可行但鲜有人愿意尝试。而Hive又不支持存储过程,稍具难度的计算就要求助于MapReduce,最终仍然要走到“用通用语言去实现专业计算”这条低效的开发途径上。

对于常见的算法,集算器已经提供了丰富的库函数直接可用;对于复杂的算法逻辑,集算器提供了敏捷的语法和专业的IDE,这方面集算器的优势更大。集算器配合HDFS和Hive,可以极大地提高Hadoop的开发效率。

集算器支持真正的集合数据类型,更易于用户从业务角度设计算法。集算器支持有序集合,可以自由地访问集合的成员并进行和序号相关的计算。集合的集合可以轻松表达复杂的分组形式,比如等值分组、对位分组、枚举分组。用户还可以像操作对象一样操作数据集中的单独记录。集算器的脚本是书写在网格中的,无需定义即可引用中间计算结果,代码的编辑和调试非常方便。

MapReduce的调试手段非常落后,用户只能在程序中写“调试代码”,然后在日志文件察看这些“调试信息”。这种“最灵活的”调试方法极大的降低了开发效率。集算器支持断点、单步执行、执行到光标、启动和结束等专业的数据计算调试功能,其方便性甚至远超SQL/SP,这可以大大提高开发效率。

MapReduce默认是按照最细的粒度来分配任务的,如果用户想自由的分配任务规模从而减少分配任务所消耗的时间,那就必须“越狱”, 即绕过原有的Reduce,在Map函数中自己编码实现类似Reduce的功能。显然这个难度太高,会严重影响开发效率。集算器的任务分配灵活自由,不存在这种困扰,开发效率更高。

小结:集算器保留了Hadoop的优点,多节点并行计算、廉价设备横向扩展、开放的对外接口,同时它也为Hadoop注入了新的活力——灵活的并行框架、专业的大数据脚本、敏捷的语法和专业的IDE。


http://www.raqsoft.cn/?p=3459

更多请访问:http://www.raqsoft.cn/?page_id=2427