大数据核心技术源码分析之-Avro篇-2

拿到Avro-trunk下的源码,第一个分析对象就是

avro-trunk_src\lang\java下的源码

源码结构包括avro,compiler,ipc,mapred,protobuf,thrift等等

首先切入avro中

一级类集中在JsonProperties[顶级抽象类]

Schema,Protocol【继承JsonProperties】

SchemaNormalization,以及SchemaBuilder

和Exception

从中可以分析avro核心支持所谓的Json格式Schema的原因所在

从Schema中可以看出所支持的Schema类型

public enum Type {
    RECORD, ENUM, ARRAY, MAP, UNION, FIXED, STRING, BYTES,
      INT, LONG, FLOAT, DOUBLE, BOOLEAN, NULL;
    private String name;
    private Type() { this.name = this.name().toLowerCase(); }
    public String getName() { return name; }
  };

而Protocol包括两类Message

 

针对JsonProperties内置为

Map<String,JsonNode> props = new LinkedHashMap<String,JsonNode>(1);

关注两个同步方法:

public synchronized JsonNode getJsonProp(String name) {
    return props.get(name);
  }

public synchronized void addProp(String name, JsonNode value) {}

实现读写的同步控制

在Protocol中定义的Message和TwoWayMessage如下

public class Message extends JsonProperties {
    private String name;
    private String doc;
    private Schema request;

TwoWayMessage如下

private class TwoWayMessage extends Message {
    private Schema response;
    private Schema errors;

针对SchemaBuilder顾名思义为 创建对应的Schema

对应包含多种类型的Builder

还包含对应的FieldDefault系列和Completion

以及

private abstract static class Completion<R> {
    protected abstract R complete(Schema schema);
  }

针对FieldDefault的定义如下

 private static abstract class FieldDefault<R, S extends FieldDefault<R, S>> extends Completion<S> {
    private final FieldBuilder<R> field;
    private Schema schema;
    protected FieldDefault(FieldBuilder<R> field) {
      this.field = field;
    }
   
    /** Completes this field with no default value **/
    public final FieldAssembler<R> noDefault() {
      return field.completeField(schema);
    }
   
    private FieldAssembler<R> usingDefault(Object defaultVal) {
      return field.completeField(schema, defaultVal)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值