Я получаю таймауты с ошибкой, появляющейся из моего настраиваемого фильтра. Ошибка ниже:Как преобразовать пользовательский фильтр из HBase 0.94 в HBase 0.98, который не использует никаких протонов?
Caused by: org.apache.hadoop.hbase.exceptions.DeserializationException: parseFrom called on base Filter, but should be called on derived type
Я вижу, что записи и считывания полей больше не поддерживаются в Hbase 0.98. В настоящее время мои методы для записи и readFields следующим образом:
public MyCustomFilter(Schema first) {
this.schema = first;
filterNow();
}
public void write(DataOutput o) throws IOException {
byte[] firstBytes = Bytes.toBytes(first.toString());
out.writeInt(firstBytes.length)
}
public void readFields(DataInput i) throws IOException {
int firstLength = i.readInt();
byte firstBytes = new byte[firstLength];
i.readFully(firstBytes, 0, firstLength);
this.first = new Schema.Parser().parse(new ByteArrayINputStream(firstBytes);
filterNow();
}
private void filterNow() {
FilterQueryParser parser = new FilterQueryParser(first);
....
}
Cloudera кажется, думает, что это только вопрос о переносе этих методов:
FilterBase no longer implements Writable. This means that you do not need to implement readFields() and write() methods when writing your own custom fields. Instead, put this logic into the toByteArray and parseFrom methods. See this page for an example.
Однако образец при условии, SingleColumnValueFilter, как представляется, использовать ProtoBufs из Filter.Protos, который, как представляется, содержит SingleColumnValueFilter, который является основой для HBase ... Мой CustomFilter не использует ничего подобного, я вообще не использую protobuf. Есть ли способ конвертировать то, что у меня есть, что делает hbase 0.98 счастливым? O (Schema.parser является avro). Мне нужно использовать Filter.Protos сейчас? Если да, то как?