mapreduce在hive表上使用hcatalog

gajydyqb  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(530)

我正在尝试编写map reduce作业来计算配置单元表中字段值的分布(hadoop2.2.0.2.0.6.0-101)。例如:
输入配置单元表“atable”:

+------+--------+
! name | rating |   |
+------+--------+
| Bond |  7     |
| Megre|  2     |
! Holms|  11    |
| Puaro|  7     |
! Holms|  1     |
| Puaro|  7     |
| Megre|  2     |      
| Puaro|  7     |
+------+--------+

map reduce作业也应在配置单元中生成以下输出表:

+--------+-------+--------+
| Field  | Value |  Count |
+--------+-------+--------+
| name   | Bond  |   1    |
| name   | Puaro |   3    |
| name   | Megre |   2    |
| name   | Holms |   1    |
| rating | 7     |   4    |
| rating | 11    |   1    |
| rating | 1     |   1    |
| rating | 2     |   2    |
+--------+-------+--------+

为了获取字段名/值,我需要访问hcatalog元数据,因此我可以在map方法(org.apache.hadoop.mapreduce.mapper)中使用它们,为此我尝试采用以下示例:http://java.dzone.com/articles/mapreduce-hive-tables-using
此示例中的代码可以编译,但会产生大量弃用警告:

protected void map(WritableComparable key, HCatRecord value,
 org.apache.hadoop.mapreduce.Mapper.Context context)
 throws IOException, InterruptedException {

 // Get table schema
 HCatSchema schema = HCatBaseInputFormat.getTableSchema(context);

 Integer year = new Integer(value.getString("year", schema));
 Integer month = new Integer(value.getString("month", schema));
 Integer DayofMonth = value.getInteger("dayofmonth", schema);

 context.write(new IntWritable(month), new IntWritable(DayofMonth));
}

弃用警告:

HCatRecord
HCatSchema 
HCatBaseInputFormat.getTableSchema

在哪里可以找到在map reduce中使用hcatalog和最新的接口(而不是不推荐使用的接口)的类似示例?
谢谢!

lpwwtiir

lpwwtiir1#

我使用了cloudera示例中的一个示例,并使用这个博客中给出的框架来编译我的代码。我还必须在pom.xml中添加maven repo for hcatalog。本例使用新的mapreduceapi,而不是不推荐使用的mapreduceapi。希望有帮助。

<dependency>
        <groupId>org.apache.hcatalog</groupId>
        <artifactId>hcatalog-core</artifactId>
        <version>0.11.0</version>
        </dependency>

相关问题