gpt4 book ai didi

java - Apache gora,在reducer中设置新表名的位置

转载 作者:可可西里 更新时间:2023-11-01 15:19:25 24 4
gpt4 key购买 nike

我有一个基本上是 Apache Gora 的 Hbase Mapreduce 作业的应用程序。我想将一个 Hbase 表数据复制到一个新表,这是一个非常简单的案例。在哪里写新表名。我评论了this Guide但找不到放置新表名的位置。以下是代码片段,

/* 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 Mappings .也许您有一个名为 gora-hbase-mapping.xml 的文件定义映射的位置。应该是这样的:

<table name="Nameofatable">
...
<class name="blah.blah.EntityA" keyClass="java.lang.Long" table="Nameofatable">

在那里配置表名(如果找到两者,请输入相同的名称)。可以有多个 <table><class> .也许一个用于您的输入,一个用于您的输出。

在那之后,您必须实例化您的输入/输出数据存储inStoreoutStore .教程有点乱,创建了inStoreoutStore得到 to the wrong section .您只需执行以下操作:

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:

如果实体类相同,但表名不同,我能想到的唯一解决方案是创建两个类Entity1Entity2使用相同的模式,在你的 gora-hbase-mapping.xml 中创建两个 <table><class> .然后像这样实例化商店:

inStore = DataStoreFactory.getDataStore(String.class, Entity1.class, hadoopConf);
outStore = DataStoreFactory.getDataStore(String.class, Entity2.class, hadoopConf);

它不是很干净,但应该可以工作:\


编辑 2(不适用于此问题):

如果源表和目标表相同,则 initReducerJob 有一个版本允许此行为。Nutch's GeneratorJob.java 中有一个示例。 :

StorageUtils.initMapperJob(currentJob, fields, SelectorEntry.class, WebPage.class, GeneratorMapper.class, SelectorEntryPartitioner.class, true);
StorageUtils.initReducerJob(currentJob, GeneratorReducer.class);

关于java - Apache gora,在reducer中设置新表名的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com