我收到一个输入文件,其中有200毫米的记录。这些唱片只是一把钥匙。对于这个文件中的每个记录(我称之为sample\u文件),我需要从一个数据库(我称之为event\u数据库)中检索匹配键的所有记录。事件数据库可以有数十亿条记录。
例如:
SAMPLE_FILE
1234
2345
3456
EVENT_DATABASE
2345 - content C - 1
1234 - content A - 3
1234 - content B - 5
4567 - content D - 7
1234 - content K - 7
1234 - content J - 2
因此,系统将遍历sample_记录中的每个记录,并获取具有相同密钥的所有事件。例如,获取1234并查询事件\数据库将检索:
1234 - content A - 3
1234 - content B - 5
1234 - content K - 7
1234 - content J - 2
然后我将使用结果集执行一些计算。例如,count,sum,mean
F1 = 4 (count)
F2 = 17 (sum(3+5+7+2))
我将处理使用hbase存储事件\数据库的问题。然后我将运行map reduce作业,在map阶段我将查询hbase,获取事件并执行计算。这个过程可以是批量的。没有必要是实时的。
有人建议另一种建筑吗?我真的需要Map缩小工作吗?我能用另一种方法吗?
2条答案
按热度按时间yk9xbfzb1#
我亲自使用mapreduce、hdfs和hbase解决了这类问题。您的方法似乎很适合实现您的用例,我猜您将把计算存储回hbase。
storm也可以用来实现相同的用例,但是storm真正的亮点是流数据&接近实时的处理,而不是静止的数据。
mpbci0fu2#
您实际上不需要为每个事件都查询hbase。我认为这是一个更好的方法。
使用输入文件在配置单元中创建外部表。
使用配置单元hbase集成在配置单元中为hbase表创建外部表(https://cwiki.apache.org/confluence/display/hive/hbaseintegration)
对这两个表执行一个连接,并获取检索结果的结果。
如果您只查询输入文件的一个子集,那么您的方法会很好,但是由于您要查询hbase中的所有recrods(20m),因此使用join会更有效。