1. 程式人生 > >什麼是Hive——大資料倉庫Hive基礎

什麼是Hive——大資料倉庫Hive基礎

Hive是什麼:

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映成一張表,並提供類SQL查詢功能;其本質是將HQL轉化成MapReduce程式。

  • 構建在Hadoop之上的資料倉庫

    • 使用HQL作為查詢介面
    • 使用HDFS儲存
    • 使用MapReduce計算
  • 靈活性和擴充套件性比較好:支援UDF,自定義儲存格式等

  • 適合離線資料處理


Hive體系結構:

Hive的資料儲存基於HDFS,其沒有專門的資料儲存格式,主要的儲存結構主要包括:資料庫,檔案,表,檢視,索引。

Hive預設可以直接載入文字檔案(TextFile),還支援SequenceFile,RCFile。建立表時指定Hive資料的列分隔符與行分隔符即可解析資料。

  • 使用者介面:Client
    • CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)
  • 元資料:Metastore
    • 元資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分割槽欄位、表的型別(是否是外部表)、表的資料所在目錄等;
    • 預設儲存在自帶的derby資料庫中,推薦使用採用MySQL
  • Hadoop
    • 使用HDFS進行儲存,使用MapReduce進行計算
  • 驅動器:Driver(包含解析器,編譯器,優化器,執行器)
    • 解析器:將SQL字串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤(比如select中被判定為聚合的欄位在group by中是否有出現);
    • 編譯器:將AST編譯生成邏輯執行計劃;
    • 優化器:對邏輯執行計劃進行優化;
    • 執行器:把邏輯執行計劃轉換成可以執行的物理計劃。對於Hive來說,就是MR/TEZ/Spark;

Hive四種表型別

1.分割槽表
- 最常用
- 可以按時間日期進行分割槽
2.內部表(管理表)
- 一般建立臨時表使用內部表
- 建立的時候如果不指定是外部表,預設就是內部表
- 刪除表會將資料一併刪除
3.外部表(託管表)
- 推薦使用此方式建立表
- 建立的時候需要使用關鍵字(EXTERNAL)宣告
- 刪除表的時候只會刪除表結構不會刪除資料
4.桶表
- 不常用
- 桶表專門用於抽樣查詢,是很專業性的
- 不是日常用來儲存資料的表,需要抽樣查詢時,才建立和使用桶表。


Hive 優點與使用場景

優點:

  • 操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手);
  • 避免了去寫MapReduce,減少開發人員的學習成本;
  • 統一的元資料管理,可與impala/spark等共享元資料;
  • 易擴充套件(HDFS+MapReduce:可以擴充套件叢集規模;支援自定義函式);

使用場景:

  • Hive的執行延遲比較高,因此hive常用於資料分析的,對實時性要求不高的場合;
  • Hive優勢在於處理大資料,對於處理小資料沒有優勢,因為Hive的執行延遲比較高。

更多資訊:Hive官網入門文件Hive下載