Hive相關 metadata是元數據,包含資料庫、表、欄位、分區等信息。作用:客戶端連接MetaStore服務,metastore再去連接MySQL資料庫存儲元數據,有了metastore服務可以實現多客戶端同時連接MySQL。 metastore三種配置:內嵌(Derby)、本地元存儲、遠程元存 ...
Hive相關
- 什麼是metastore?
- metadata是元數據,包含資料庫、表、欄位、分區等信息。作用:客戶端連接MetaStore服務,metastore再去連接MySQL資料庫存儲元數據,有了metastore服務可以實現多客戶端同時連接MySQL。
- metastore三種配置:內嵌(Derby)、本地元存儲、遠程元存儲
- Hive的元數據預設存儲在Derby資料庫,建議存儲在像MySQL這種關係型資料庫中。
- [為什麼建議存儲在關係型資料庫中?]:預設的Derby資料庫只能建立一個客戶端連接,不能實現多客戶端同時訪問。不適合生產環境。
- metastore安裝方式有什麼區別?
- 內嵌:使用自帶的Derby資料庫存儲元數據,不需要額外的MetaStore服務。一次僅能有一個客戶端連接,適合實驗環境,不適合生產環境
- 本地元存儲:本地安裝MySQL來存儲元數據,hive服務和metastore服務運行在同一個進程中。
- 遠程元存儲:Hive服務和MetaStore服務在不同的進程中。
- 什麼是Managed Table和External Table?
- Hive中有兩種類型的表:Managed Table(內部表)和External Table(外部表)
- 內部表:hive的預設表類型,內部表的數據通常存放在/user/root/warehouse下
- 使用describe formatted 表名 來查看是內部表還是外部表
- 刪除內部表時,存放在HDFS上的真實數據也一併刪除。
- 外部表:適合於在hive之外使用表的數據的情況,刪除外部表時,只是刪除了元數據,真是數據並沒有刪除
- 什麼時候使用Managed Table和External Table
- 內部表適用於臨時創建的中間表
- 外部表數據多部門共用
-
hive有哪些複合數據類型
Map:key-value
Struct:不同數據類型的集合
Array:同類型元素的集合
UnionType:代表一個可以具有屬於所選擇的任何數據類型的值的列 -
hive分區有哪些好處
- 加速查詢
- 使用分區列的名稱來創建子目錄,當使用where子句執行查詢操作時,只會掃描特定的子目錄,而不用掃描全表。還是加速查詢
- hive分區和分桶的區別
- 分區:以欄位的形式在表結構中存在,使用describe table_name 來查看欄位是否存在,但是該欄位不存放真實數據,僅僅是分區的表示(偽列)
- 分桶:一種細粒度的數據劃分操作。實際生產中使用較少。[採用對列值哈希,然後除以桶的個數求餘]
- hive如何動態分區
- 靜態分區:載入數據時(顯式)指定分區列
- 動態分區:將數據推送到Hive,Hive決定哪個值進入哪個分區。需要啟動動態分區[hive.exec.dynamic.parition.mode=nostrict]
- map join優化手段
- Join時大表放在後面[執行join時,需要選擇哪個表被流式傳輸,哪個表被緩存。Hive將Join語句中最後一個表用於流式傳輸,所以要確該表在兩者之間是大的一方]
- Sort-Merge-Bucket(SMB) Map Join[使用前提:所有的表必須是桶分區(bucket)和已經排序的(sort)]
- 如何創建bucket表
- Hive預設是禁用分桶功能的,設置屬性來強制使用分桶功能[hive.enforce.bucketing=true]
- hive有哪些file formats
- Text File Format:預設格式,不壓縮數據,磁碟開銷大。
- Sequence File Format:SF是Hadoop API提供的一種二進位文件支持。使用方便、可分割、可壓縮。
SF支持3中壓縮格式:NONE、RECORD、BLOCK,建議使用BLOCK壓縮。 - RC File Format:RC是一種行列存儲相結合的存儲方式。
- Parquet:列式數據存儲
- AVRO:avro Schema數據序列化
- ORC:對RCFile做了優化,支持各種複雜的數據類型。
- hive最優的file formates是什麼
ORC
- ORC將行的集合存儲在一個文件中,且集合內的行數據將以列式存儲。採用列式格式是為了壓縮,從而降低存儲成本。
- 查詢:查詢的是指定列而不是行,記錄以列式存儲
- ORC基於列創建索引,查詢效率高。
- hive傳參
- 使用--hivevar傳入
- orderby 和 sortby的區別
- order by:全局排序,但是只能有一個partition
- sort by:局部排序,全局無序,partition內部有序,partition與partition之間沒有關係。
- hive和hbase的區別
- hive支持SQL查詢,Hbase不支持。
- hive不支持Record級別和刪除操作。
- hive定義為數倉,HBase定義為NOSQL資料庫。