我会将您重定向到教程,但我会尝试在这里澄清:)
表名在您的映射中定义。检查表映射。也许您有一个名为gora-hbase-mapping.xml
映射定义的文件。应该有这样的东西:
<table name="Nameofatable">
...
<class name="blah.blah.EntityA" keyClass="java.lang.Long" table="Nameofatable">
在那里您配置表名(如果找到两者,请输入相同的名称)。可以有几个<table>
and <class>
。也许一个用于您的输入,一个用于您的输出。
之后,您必须实例化您的输入/输出数据存储inStore
和outStore
. 该教程有点混乱,并且创建inStore
并outStore
进入了错误的部分。您只需执行以下操作:
inStore = DataStoreFactory.getDataStore(String.class, EntityA.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(Long.class, OtherEntity.class, hadoopConf);
“以另一种方式”解释:
- 您使用实例化数据存储
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>
and <class>
。然后实例化商店,如:
inStore = DataStoreFactory.getDataStore(String.class, Entity1.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(String.class, Entity2.class, hadoopConf);
它不是很干净,但应该可以工作:\
编辑2(不是这个问题):
如果源表和目标表相同,则有一个版本的 initReducerJob 允许这种行为。一个例子是在Nutch 的GeneratorJob.java
:
StorageUtils.initMapperJob(currentJob, fields, SelectorEntry.class, WebPage.class, GeneratorMapper.class, SelectorEntryPartitioner.class, true);
StorageUtils.initReducerJob(currentJob, GeneratorReducer.class);