Hive學習

Hive 簡介

hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。


使用Hive的原因

  • 操作接口採用類SQL語法,提供快速開發的能力
  • 避免了去寫MapReduce,減少開發人員的學習成本
  • 擴展功能很方便

Hive的特性

  • 可擴展:Hive可以自由的擴展集羣的規模,一般情況下不需要重啓服務
  • 延展性:Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數,就像SQL中的UDF
  • 容錯性:良好的容錯性,節點出現問題SQL仍可完成執行,分佈式存儲的優點

容錯性的原因:MapRuduce的整個編配工作由主節點控制,一般每份mapper的輸入數據會同時分發到多個節點形成多分副本,用於事務的失效處理,每個節點必須與主節點通信,表示自己工作正常。如果某節點失效或則工作異常,主節點將重啓該節點或者將該節點移出可用機器池。
注:

  • 在任何時候,每個mapper和reducer間都不進行通信,每個節點只處理自己的事務,並且在本地分配的數據集上運算。

Hive與Hadoop的關係

Hadoop簡介

Hive與Hadoop的關係


MapRuduce學習要點

  • 主節點控制MapReduce 的作業流程
  • MapReduce的作業可以分成map任務和reduce任務
  • map任務與reduce任務之間不做數據交流
  • 在map和reduce階段中間有一個sort或combine階段
  • 數據被重複存放在不同的機器上,以防某個機器失效
  • mapper和reducer傳輸的數據形式爲key/value對

Hive命令

命令選項

  • -i: 初始化SQL文件
  • -e ‘quoted query string’: 運行引號內sql查詢語句
  • -f filename: 從文件中運行sql語句
  • -S: 無聲模式在互動的Shell,只有數據發出
  • –h: 查看應用的幫助文檔
  • -hiveconf: 設置hive/hadoop的配置變量
HIVE_HOME/bin/hive -S -e ' select count(*) from c02_clickstat_fatdt1' > a.txt

HIVE_HOME/bin/hive -f /home/my/hive-script.sql

Hive中的連接操作

  • 只支持相等JOIN。
  • 多表連接當使用不同的列進行Join時,會產生多個MapReduce作業。
  • 最後的表的數據是從流中讀取,而前面的會在內存中緩存,因此最好把最大的表放在最後。

排序

  • order by

跟傳統的 sql 中的 order by 作用相同 ,對查詢的結果做一次全局排序,因此無論有多少個 map,order by 的數據都會放到一個 reducer 中去處理,會消耗很多時間也浪費了資源。

  • sort by

在每一個reducer上都會做排序,保證了局部有序,但是不能保證所有數據都有序,可以爲接下來的全局排序提高不少效率(做一次歸併排序)

  • distribute by

控制map的輸出在reducer上如何劃分

select mid ,money,name from store distribute by mid sort by mid

mid相同的數據會被送到一個reducer上去處理(distribute by mid),然後在每一個reducer上會按照mid排序(sort by mid)


  • cluster by

功能就是distribute by 與 sort by的結合
select mid ,money,name from store cluster by mid

cluster by指定的列只能降序,不能指定asc,desc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章