【问题标题】:Hadoop hive serde - Input format must implement InputFormatHadoop hive serde - 输入格式必须实现 InputFormat
【发布时间】:2015-10-20 23:31:24
【问题描述】:

我使用 SerDe 来处理我的 XML 数据,并在其中为 XML 数据创建自定义 InputFormat 和 RecordRedaer。

以下是类的签名 -

SerDe 类 -

public class XMLSerde extends AbstractSerDe {

输入格式 -

public class XMLInputFormat extends FileInputFormat<LongWritable, BookWritable> {

    @Override
    public RecordReader<LongWritable, BookWritable> createRecordReader(InputSplit arg0,
            TaskAttemptContext arg1) throws IOException, InterruptedException {
        // TODO Auto-generated method stub
        return new XMLRecordReader();
    }

RecordReader -

public class XMLRecordReader extends RecordReader<LongWritable, BookWritable> {

BookWritable 是我创建的自定义 Writable 类。

现在当我如下使用这个 serde 时 -

CREATE TABLE xml_items(Author STRING, Title STRING, ISBN STRING) ROW FORMAT SERDE 'com.xml.serde.XMLSerde' STORED AS INPUTFORMAT 'com.xml.serde.XMLInputFormat';

在此表上运行选择查询时出现以下错误。

FAILED: SemanticException 1:14 Input format must implement InputFormat. Error encountered near token 'books'

请提出建议。 阿杰

【问题讨论】:

  • 任何帮助请...

标签: hadoop hive user-defined-functions


【解决方案1】:

Hive 仅支持旧的 mareduce API。 您应该从 org.apache.hadoop.mapred.FileInputFormat 类继承 XMLInputFormat。

【讨论】:

  • 不知道它的可读性如何 - package com.xml.serde; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapred.FileInputFormat; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapred.*; public class XMLInputFormat extends FileInputFormat&lt;LongWritable, BookWritable&gt; { @Override public RecordReader&lt;LongWritable, BookWritable&gt; getRecordReader( InputSplit arg0, JobConf arg1, Reporter arg2) throws IOException { return new XMLRecordReader(arg1, (FileSplit)arg0); } }
  • XMLRecordReader 还必须实现旧 MapRecuce API 的接口 - org.apache.hadoop.mapred.RecordReader。
  • 是的,我做到了,这就像在扩展 mapred 文件输入格式时是强制性的......
  • 你能显示表创建脚本吗?也可能是您在旧课程中使用 jar。
  • 建表脚本 - CREATE TABLE books(author STRING, title STRING, isbn STRING) ROW FORMAT SERDE 'com.xml.serde.XMLSerde' STORED AS INPUTFORMAT 'com.xml.serde.XMLInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多