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