我会将您重定向到教程,但我会尝试在这里澄清:)
表名在您的映射中定义。检查表映射。也许您有一个名为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);