1. 程式人生 > >大資料培訓之核心知識點Hbase、Hive、Spark和MapReduce的概念理解、特點及機制等

大資料培訓之核心知識點Hbase、Hive、Spark和MapReduce的概念理解、特點及機制等

今天,上海尚學堂大資料培訓班畢業的一位學生去參加易普軟體公司面試,應聘的職位是大資料開發。面試官問了他10個問題,主要集中在Hbase、Spark、Hive和MapReduce上,基礎概念、特點、應用場景等問得多。看來,還是非常注重基礎的牢固。整個大資料開發技術,這幾個技術知識點佔了很大一部分。那本篇文章就著重介紹一下這幾個技術知識點。
 

一、Hbase

1.1、Hbase是什麼?

HBase是一種構建在HDFS之上的分散式、面向列的儲存系統。在需要實時讀寫、隨機訪問超大規模資料集時,可以使用HBase。

儘管已經有許多資料儲存和訪問的策略和實現方法,但事實上大多數解決方案,特別是一些關係型別的,在構建時並沒有考慮超大規模和分散式的特點。許多商家通過複製和分割槽的方法來擴充資料庫使其突破單個節點的界限,但這些功能通常都是事後增加的,安裝和維護都和複雜。同時,也會影響RDBMS的特定功能,例如聯接、複雜的查詢、觸發器、檢視和外來鍵約束這些操作在大型的RDBMS上的代價相當高,甚至根本無法實現。
 
HBase從另一個角度處理伸縮性問題。它通過線性方式從下到上增加節點來進行擴充套件。HBase不是關係型資料庫,也不支援SQL,但是它有自己的特長,這是RDBMS不能處理的,HBase巧妙地將大而稀疏的表放在商用的伺服器叢集上。
 
HBase 是Google Bigtable 的開源實現,與Google Bigtable 利用GFS作為其檔案儲存系統類似, HBase 利用Hadoop HDFS 作為其檔案儲存系統;Google 執行MapReduce 來處理Bigtable中的海量資料, HBase 同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable 利用Chubby作為協同服務, HBase 利用Zookeeper作為對應。

 
 

1.2、HBase的特點

◆大:一個表可以有上億行,上百萬列。
​◆面向列:面向列表(簇)的儲存和許可權控制,列(簇)獨立檢索。
​◆稀疏:對於為空(NULL)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。
​◆無模式:每一行都有一個可以排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不同的列。
​◆資料多版本:每個單元中的資料可以有多個版本,預設情況下,版本號自動分配,版本號就是單元格插入時的時間戳。
​◆資料型別單一:HBase中的資料都是字串,沒有型別。

更多資訊閱讀:《Hbase簡介》、《Hbase體系架構和叢集安裝

》、《HBase資料模型

二、Spark  

Spark是Apache的一個頂級專案,是一個快速、通用的大規模資料處理引擎。Apache Spark是一種快速、通用的叢集計算系統。它提供了Java、Scala、Python和R的高階API,以及一個支援通用執行圖的優化引擎。它還支援豐富的高階工具集,包括用於SQL和結構化資料處理的Spark SQL、用於機器學習的MLlib、圖形處理的GraphX和Spark流。



Spark基於map reduce演算法實現的分散式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的Mapreduce的演算法。
 
Spark的中間資料放到記憶體中,對於迭代運算效率更高。Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。Spark比Hadoop更通用。
 
Spark可以用來訓練推薦引擎(Recommendation Engine)、分類模型(Classification Model)、迴歸模型(Regression Model)、聚類模型(Clustering Model)。
 
更多關於Spark的文章閱讀:《

【上海大資料培訓】Spark叢集執行、讀取、寫入Hbase資料》、《【上海大資料培訓】Spark叢集的執行過程

三、Hive

3.1、Hive是什麼

◆由Facebook開源,最初用於解決海量結構化的日誌資料統計問題;
​◆構建在Hadoop之上的資料倉庫;
​◆Hive定義了一種類SQL查詢語言:HQL(類似SQL但不完全相同);
​◆通常用於進行離線資料處理(採用MapReduce);
​◆底層支援多種不同的執行引擎(Hive on MapReduce、Hive on Tez、Hive on Spark);
​◆支援多種不同的壓縮格式、儲存格式以及自定義函式(壓縮:GZIP、LZO、Snappy、BZIP2..  ;
​◆儲存:TextFile、SequenceFile、RCFile、ORC、Parquet ; UDF:自定義函式)。
 

3.2、為什麼要使用Hive

◆簡單、容易上手(提供了類似SQL查詢語言HQL);
​◆為超大資料集設計的計算/儲存擴充套件能力(MR計算,HDFS儲存);
​◆統一的元資料管理(可與Presto/Impala/SparkSQL等共享資料)。
 

3.3 Hive架構

 
 
上圖中,可以通過CLI(命令列介面),JDBC/ODBC,Web GUI 訪問hive。於此同時hive的元資料(hive中表結構的定義如表有多少個欄位,每個欄位的型別是什麼)都儲存在關係型資料庫中。三種連結hive的方式最後統一通多一個Diveer 的程式將sql 轉化成mapreduce的job任務去執行。
 
更多Hive資訊閱讀:《Hive是什麼?Hive特點、工作原理,Hive架構,Hive與HBase聯絡和區別》、《Hive常用字串函式彙總》、《Hive資料倉庫之快速入門
 

四、Mapreduce

4.1、MapReduce是什麼?

MapReduce 是一個分散式運算程式的程式設計框架,是使用者開發“基於 hadoop 的資料分析 應用”的核心框架。MapReduce採用"分而治之"的思想,把對大規模資料集的操作,分發給一個主節點管理下的各個分節點共同完成,然後通過整合各個節點的中間結果,得到最終結果。簡單地說,MapReduce就是"任務的分解與結果的彙總"。
 
在分散式計算中,MapReduce框架負責處理了並行程式設計中分散式儲存、工作排程、負載均衡、容錯均衡、容錯處理以及網路通訊等複雜問題,把處理過程高度抽象為兩個函式:map和reduce,map負責把任務分解成多個任務,reduce負責把分解後多工處理的結果彙總起來。
 

4.2、為什麼需要 MapReduce?

   ​◆ 海量資料在單機上處理因為硬體資源限制,無法勝任。
   ​◆ 而一旦將單機版程式擴充套件到叢集來分散式執行,將極大增加程式的複雜度和開發難度。
   ​◆引入 MapReduce 框架後,開發人員可以將絕大部分工作集中在業務邏輯的開發上,而將 分散式計算中的複雜性交由框架來處理。
 

4.3、MapReduce核心機制

  
MapReduce核心就是map+shuffle+reducer,首先通過讀取檔案,進行分片,通過map獲取檔案的key-value對映關係,用作reducer的輸入,在作為reducer輸入之前,要先對map的key進行一個shuffle,也就是排個序,然後將排完序的key-value作為reducer的輸入進行reduce操作,當然一個MapReduce任務可以不要有reduce,只用一個map。

更多MapReduce的文章閱讀:《MapReduce設計及工作原理分析

以上就是總結的Hbase、Spark、Hive、MapReduce的概念理解和特點,以及一些應用場景和核心機制。歡迎大家評論留言,需要相關學習資料也可以留言聯絡。