Hive 开发指南
三个主要组件:
    Serializers/Deserializers,用户可以自定义来解析自有的数据格式。
    MetaStore
    Query Processor
一些其它组件:
    命令行组件
    Hive Server:提供被客户端使用的api,用于操作hive。
    通用组件:
    Ant相关:
    脚本组件:

Hive SerDe (Serializer  Deserializer):
    Hive 使用SerDe结合FileFormat来读写表中的行。

    hive并不能识别HDFS中的文件格式,用户可以使用其他工具把hdfs上的文件读取到hive表中,或者把信息按照hive能识别的格式写到hdfs上,这些格式化过的文件可以通过create external table 或者load data inpath 加载到hive中,这样仅仅是把这些文件移动到hive的表存储目录中。
    
    Hive读写hdfs文件的FileFormat类:
        TextInputFormat/HiveIgnoreKeyTextOutputFormat:读写纯文本格式的文件。
        SequenceFileInputFormat/SequenceFileOutputFormat:读写序列化格式的文件(SequenceFile)。
    
    Hive序列化和反序列化的SerDe类:
        MetadataTypedColumnsetSerDe:可以读写分割符分隔的记录,如csv、制表符分隔、CTRL+A分隔的记录。
        LazySimpleSerDe:这个同样可以读写上面这些分隔的记录,性能更好,而且支持编码设置,如:
            ALTER TABLE person SET SERDEPROPERTIES ('serialization.encoding'='GBK');
        该类还可以把T、t、F、f、1、0当作boolean值,如果hive.lazysimple.extended_boolean_literal参数设置成true的话,默认为false,只有true、false被当作boolean。
        ThriftSerDe:可以读写Thrift serialized objects,要读取的类文件必须首先加载才可以读取。
        DynamicSerDe:读写ThriftSerDe所能读取的序列化对象,但是可以解析Thrift DDL,并且支持很多种协议,包括TBinaryProtocol、TJSONProtocol、TCTLSeparatedProtocol(读写分隔符分隔的数据)。

MetaStore:
    包含表、分区、数据库的元数据信息,这些信息被hive的查询处理器使用。
    Metastore Server:
        这是一个Thrift服务(接口定义在metastore/if/hive_metastore.if),管理着底层的元数据存储和hadoop文件系统。
    Object Store:
        ObjectStore用来处理存储在SQL store中的实际元数据的访问,当前的实现基于JDA规范的JPOX ORM实现,通过实现MetaStore接口可以创建新的meta store(如基于文件或者xml),FileStore是一个部分的实现,很快会过期。
    Metastore Client:
        java中的客户端是一个继承了HiveMetaStoreClient的类,被Query Processor使用。是其它hive组件的重要接口。
Query Processor:
主要组件:
    语法解析和语义分析,主要用于解析sql,执行转化流程,解析sql -> 抽象语法树 -> 操作计划(operator plan) -> 有向任务图,最终结果被Driver.java执行。
    优化器:执行基本的优化,如排除未被引用的列。
    Plan Components
    MetaData Layer
    Map/Reduce Execution Engine
    Hadoop Record Readers, Input and Output Formatters for Hive
    Sessions 
    Type interfaces
    Hive Function Framework 
    Tools