首页 > 试题广场 >

Hadoop如何实现多表的join?两个表,三个表甚至更多的

[问答题]
Hadoop如何实现多表的join?两个表,三个表甚至更多的时候。
推荐
每个数据集每条记录按照特定字符进行分割,一行表示一条数据。默认输出为每张表除joinkey以为的所有字段
1、既然是多个表,路径一般是xxx.db/tab/xxx形式
2、job可以接收多个数据集,获取xxx.db/tab/xxx的关键部分比如 xxx.db_tab,按照顺序放入conf.
conf.set(xxx.db.tab.tag,tag)---tag根据数据集顺序递增。
3、写一个通用Mapper。Mapper的setup获取数据分片所属路径,找出xxx.db/tab/xxx关键部分,获取tag
   ,同样地方式设置需求jion的字段下标conf.set(xxx.db.tab.join,idxs)--idxs表示按照特定字符分割后取数据的下标
4、自定义Writeable(JoinKeyPair),包括两个字段 joinkey(String类型),tag(int类型)。实现SortCompartor类,和GroupCompartor类,这两个类都实现RawComparator接口,实现按字节流排序。
5、map函数实现 根据下标idxs 取出 joinkey,取出剩余字段,map输出为 JoinKeyPair,value
6、Reduce只需按照相同顺序 取出后拼接输出即可(如果是多对多、一对多情况不同)
如果是制定输出表的字段,可在conf.set(xxx.db.tab.out,idxs)。

编辑于 2015-02-04 15:32:16 回复(0)