Hive 開發指南
三個主要組件:
Serializers/Deserializers,用戶能夠自定義來解析自有的數據格式。
MetaStore
Query Processor
一些其它組件:
命令行組件
Hive Server:提供被客戶端使用的api,用於操做hive。
通用組件:
Ant相關:
腳本組件:java
Hive SerDe (Serializer Deserializer):
Hive 使用SerDe結合FileFormat來讀寫表中的行。sql
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、一、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
Toolsapi