问题陈述:-
我需要比较两个表Table1
和Table2
,他们都店同样的事情。 所以,我需要比较Table2
与Table1
如Table1
是通过比较需要进行主表。 所以,比较后,我需要做一个报告, Table2
具有某种差异。 而这两个表有大量的数据,围绕数据的TB。 所以,目前我已经写了HiveQL
做比较和找回数据。
所以我的问题是来讲是更好的PERFORMANCE
,编写一个CUSTOM MAPPER and REDUCER
做这种工作或HiveQL
,我写了会被罚款,因为我将在数以百万计的记录中加入这两个表。 据我所知HiveQL
内部(幕后)生成优化的自定义地图,减速并提交执行和回来的结果。
在回答你的问题是双重的。
首先,如果存在一些处理,你可以在蜂巢QL语法表达,我认为蜂房的性能相媲美的编写自定义的map-reduce的。 在这里,唯一的缺点是当你有你的数据,你利用你的地图,减少代码,但不是通过蜂巢一些额外的信息。 例如,如果您的数据进行排序,您可以在映射器处理您的文件拆分时,利用这个信息,而除非蜂巢意识到此排序顺序,就不能使用这个信息传递给它优点。 很多时候,有指定这样的额外信息(通过元数据或配置属性),但有些时候的方式,有可能甚至不指定该信息由蜂巢使用方式。
其次,有时处理可令人费解足够不会像SQL语句很容易,可表达。 这些案件通常涉及有你的处理过程中存储间歇状态。 蜂巢UDAFs缓解这个问题在一定程度上。 但是,如果你需要更多的东西的习惯,我一直喜欢使用自定义映射器和/或减速堵塞蜂巢变换功能 。 蜂房查询的范围内它可以让你充分利用的map-reduce,让您的自定义地图,减少脚本混合和匹配蜂巢类似SQL的功能,都在同一个查询。
长话短说:如果你的处理是通过一个蜂巢QL查询很容易表达,我看不出有任何理由去写的map-reduce代码来实现相同的。 一个蜂巢被创建的主要原因是为了让我们这样的人写的类似SQL的查询,而不是写的map-reduce。 如果我们写出来的map-reduce,而不是典型的蜂巢查询(由于性能原因或其他方式),人们可以说,蜂房没有这样做,在其主要目标做好。 在另一方面,如果您对您的数据的一些信息蜂房不能利用的,你可能会更好编写自定义的map-reduce实现,使得使用这些信息。 不过,话又说回来,没有必要写时,你可以使用前面提到蜂巢变换功能映射器和减速器只需插入一个完整的地图,减少程序。