我有一个应用程序,它基本上是apache gora的hbase mapreduce作业。我是一个非常简单的例子,我想复制一个hbase表数据到一个新表。在何处写入新表名。我已经阅读了本指南,但找不到放置新表名的位置。下面是代码片段,
/* Mappers are initialized with GoraMapper.initMapper() or
* GoraInputFormat.setInput()*/
GoraMapper.initMapperJob(job, inStore, TextLong.class, LongWritable.class,
LogAnalyticsMapper.class, true);
/* Reducers are initialized with GoraReducer#initReducer().
* If the output is not to be persisted via Gora, any reducer
* can be used instead. */
GoraReducer.initReducerJob(job, outStore, LogAnalyticsReducer.class);
简单的mr工作对这个案子来说很容易。
1条答案
按热度按时间kt06eoxx1#
我会把你引向教程,但我会在这里澄清:)
表名是在Map中定义的。检查表Map。也许你有个文件叫
gora-hbase-mapping.xml
定义Map的位置。应该是这样的:在这里您可以配置表名(如果两者都找到,请使用相同的名称)。可以有几个
<table>
以及<class>
. 也许一个是你的输入,一个是你的输出。之后,必须示例化输入/输出数据存储
inStore
以及outStore
. 教程有点混乱,创建inStore
以及outStore
去错地方了。你只需要做一些事情:“以另一种方式”解释:
您可以用
DataStoreFactory.getDatastore(key class, entity class, conf).
查询请求的实体类gora-hbase-mapping.xml
为了<class name="blah.blah.EntityA"
.在那里面
<class>
这是属性table=
. 这是您的表名:)所以:用表名将实体定义为输入,用表名将实体定义为输出
编辑1:
如果实体类相同,但表名不同,我能想到的唯一解决方案就是创建两个类
Entity1
以及Entity2
使用相同的模式gora-hbase-mapping.xml
创建两个<table>
以及<class>
. 然后将这些商店变成:它不是很干净,但应该可以工作:
编辑2(不适用于此问题):
如果源表和目标表相同,那么initreducerjob有一个版本允许这种行为
GeneratorJob.java
: