Apache gora,在减速器中设置新 table 名称的位置
Apache gora, where to set new table name in reducer
我有一个基本上是 Apache Gora 的 Hbase Mapreduce 作业的应用程序。
我的情况很简单,我想将一个 Hbase table 数据复制到一个新的 table。在哪里写新的 table 名字。我查看了 this Guide 但找不到放置新 table 名称的位置。
以下是代码片段,
/* 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 作业非常容易。
我会将您重定向到 tutorial,但我会尝试在这里澄清 :)
table 名称在您的映射中定义。检查 Table Mappings。也许您有一个名为 gora-hbase-mapping.xml
的文件,其中定义了映射。
应该是这样的:
<table name="Nameofatable">
...
<class name="blah.blah.EntityA" keyClass="java.lang.Long" table="Nameofatable">
在那里配置 table 名称(如果找到两者,请输入相同的名称)。可以有多个<table>
和<class>
。也许一个用于您的输入,一个用于您的输出。
在那之后,您必须实例化您的 input/output 数据存储 inStore
和 outStore
。教程有点乱,inStore
和 outStore
的创建得到了 to the wrong section。您只需执行以下操作:
inStore = DataStoreFactory.getDataStore(String.class, EntityA.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(Long.class, OtherEntity.class, hadoopConf);
解释"in the other way":
- 您使用
DataStoreFactory.getDatastore(key class, entity class, conf).
实例化数据存储
- 请求的实体 class 正在
gora-hbase-mapping.xml
中查找 <class name="blah.blah.EntityA"
。
- 其中
<class>
就是属性table=
。 那是你的table名字:)
因此:您将一个实体定义为具有 table 名称的输入,并将一个实体定义为具有其 table 名称
的输出
编辑 1:
如果实体class相同,但table名称不同,我能想到的唯一解决方案是创建两个classes Entity1
和 Entity2
具有相同的架构,并在您的 gora-hbase-mapping.xml
中创建两个 <table>
和 <class>
。
然后像这样实例化商店:
inStore = DataStoreFactory.getDataStore(String.class, Entity1.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(String.class, Entity2.class, hadoopConf);
它不是很干净,但应该可以工作:\
编辑 2(不适用于此问题):
如果源 table 和目标 table 相同,则 initReducerJob 的版本允许此 behavior.An 示例在 Nutch's GeneratorJob.java
中:
StorageUtils.initMapperJob(currentJob, fields, SelectorEntry.class, WebPage.class, GeneratorMapper.class, SelectorEntryPartitioner.class, true);
StorageUtils.initReducerJob(currentJob, GeneratorReducer.class);
我有一个基本上是 Apache Gora 的 Hbase Mapreduce 作业的应用程序。 我的情况很简单,我想将一个 Hbase table 数据复制到一个新的 table。在哪里写新的 table 名字。我查看了 this Guide 但找不到放置新 table 名称的位置。 以下是代码片段,
/* 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 作业非常容易。
我会将您重定向到 tutorial,但我会尝试在这里澄清 :)
table 名称在您的映射中定义。检查 Table Mappings。也许您有一个名为 gora-hbase-mapping.xml
的文件,其中定义了映射。
应该是这样的:
<table name="Nameofatable">
...
<class name="blah.blah.EntityA" keyClass="java.lang.Long" table="Nameofatable">
在那里配置 table 名称(如果找到两者,请输入相同的名称)。可以有多个<table>
和<class>
。也许一个用于您的输入,一个用于您的输出。
在那之后,您必须实例化您的 input/output 数据存储 inStore
和 outStore
。教程有点乱,inStore
和 outStore
的创建得到了 to the wrong section。您只需执行以下操作:
inStore = DataStoreFactory.getDataStore(String.class, EntityA.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(Long.class, OtherEntity.class, hadoopConf);
解释"in the other way":
- 您使用
DataStoreFactory.getDatastore(key class, entity class, conf).
实例化数据存储
- 请求的实体 class 正在
gora-hbase-mapping.xml
中查找<class name="blah.blah.EntityA"
。 - 其中
<class>
就是属性table=
。 那是你的table名字:)
因此:您将一个实体定义为具有 table 名称的输入,并将一个实体定义为具有其 table 名称
的输出编辑 1:
如果实体class相同,但table名称不同,我能想到的唯一解决方案是创建两个classes Entity1
和 Entity2
具有相同的架构,并在您的 gora-hbase-mapping.xml
中创建两个 <table>
和 <class>
。
然后像这样实例化商店:
inStore = DataStoreFactory.getDataStore(String.class, Entity1.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(String.class, Entity2.class, hadoopConf);
它不是很干净,但应该可以工作:\
编辑 2(不适用于此问题):
如果源 table 和目标 table 相同,则 initReducerJob 的版本允许此 behavior.An 示例在 Nutch's GeneratorJob.java
中:
StorageUtils.initMapperJob(currentJob, fields, SelectorEntry.class, WebPage.class, GeneratorMapper.class, SelectorEntryPartitioner.class, true);
StorageUtils.initReducerJob(currentJob, GeneratorReducer.class);