對Hadoop和Hive的初步認識
一、Hadoop
Hadoop是有Apache基金會所開發的分散式系統處理架構,是一個能夠對大量資料進行分散式處理的軟體框架,以一種可靠、高效、可伸縮的方式進行資料處理。
Hadoop框架最核心的設計就是HDFS(Hadoop Distributed File System)和MapReduce。
HDFS為海量的資料提供了儲存,而MapReduce為海量的資料提供了計算。
對外部客戶機而言,HDFS就像一個傳統的分級檔案系統,可以建立、刪除、移動或重新命名檔案。個人理解我們現在使用的網盤就是這種思想。
MapReduce是一個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大叢集上,並以一種可靠的,具有容錯能力的方式並行地處理上TB級別的海量資料集。
MapReduce的思想是“分而治之”,mapper負責將嚴格複雜的任務分成若干簡單的任務,分成的簡單任務規模會大大縮小,且能夠平行計算,彼此之間不存在依賴關係。reducer負責將map之後得到的結果進行彙總。
二、Hive
首先,需要了解資料倉庫。
資料倉庫:一個更好地支援企業或者組織的決策分析處理的面向主題的、整合的、不可更新的、隨時間不斷變化的資料集合。
傳統的資料庫,主要是面對OLTP(聯機事物處理),比如銀行的交易;
資料倉庫主要面對OLAP(聯機分析處理),側重決策分析。
關於OLTP與OLAP,比較如下:
資料倉庫在資料行業扮演的角色如下圖所示
資料來源是由多種方式得來的,比如爬蟲、企業內部資料等,通過對
ETL:一種資料倉庫技術,是指從資料來源進行抽取(extract)、轉換(transform)和載入(load)的過程。
資料倉庫和OLAP伺服器是基於多維資料模型的。多維資料模型將資料看做資料方體,通過維度(dimension)和度量(measure)來定義。
多維資料模型可以通過關係型資料庫或者多維陣列來實現。
關係型資料庫適應性、伸縮型和擴充套件性好,不存在資料稀疏問題,但訪問效率較慢;而相應地,多維陣列則是儲存效率高,訪問速度快,但不同維度的訪問效率差別較大(可以分成幾個資料快的方式儲存來解決),且資料稀疏時將影響效率(採用資料壓縮技術來解決)。
多維資料操作主要有以下幾類:
- 切片(slice)和切塊(clice):在SQL中加入WERE/HAVING進行過濾。
- 上卷(roll up)和下鑽(drill down):不同粒度的轉換
- 旋轉(pivoting):轉動觀察資料的角度
簡單瞭解資料倉庫之後,再來看看Hive。
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料對映為一張資料表,可以將SQL語句轉化為MapReduce任務進行執行。
個人的理解,首先Hive是依賴於Hadoop存在的,其次因為MapReduce語法較複雜,Hive可以將較簡單的SQL語句轉化成MapReduce進行計算。
Hive的優缺點:
優點:
- 類SQL,也即HQL,學習成本低
- 對大資料有優勢(HDFS和MapReduce)
- 擴充套件性,支援使用者自定義函式
- 容錯性高
- 擁有統一的元資料進行管理
- 離線處理
缺點:
- HQL的表達能力具有侷限性
- 效率較低
因此Hive主要應用場景是用於時效性不高的海量資料的處理,對於資料量不大反而沒有優勢,主要用在資料倉庫上。