Hadoop怎样实现二级排序
问题分析
即对key和value双排序。默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。
核心答案讲解
有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。
buffer and in memory sort
主要思想是:在reduce()函数中,将某个key对应的所有value保存到内存中,然后进行排序。 这种方法最大的缺点是:可能会造成out of memory。
value-to-key conversion
主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调用 setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需 要自己实现Paritioner,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个 setGroupingComparatorClass()方法,可用于设置排序被group的key值。
问题扩展
MapReduce:写Mapreduce进行数据处理,需要利用java、python等语言进行开发调试,如果没有一项技术(如 Java)基础,几乎不可能学会 MapReduce。
Hive:Hive 构建于传统的数据库和数据仓库理念之上。它对待数据的方式就像是它有一个基于 SQL 或基于架构的结构。Apache Hive提供了一种更具体和更高级的语言,通过运行Hadoop作业来查询数据,而不是直接编写脚本来逐步操作Hadoop上的几个MapReduce作业。Hive的初步设计思路在于提供与SQL类似的使用体验,开发人员只需要掌握Sql相关的知识就可以使用。
项目应用
在大数据的复杂统计分析中,可以使用Hive的SQL功能来实现排序等不同的算法,降低入门难度,提高研发效率。