大數據核心知識點:Hbase、Spark、Hive、MapReduce概念理解,特色及機制

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

1、Hbase

1.一、Hbase是什麼?

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

儘管已經有許多數據存儲和訪問的策略和實現方法,但事實上大多數解決方案,特別是一些關係類型的,在構建時並無考慮超大規模和分佈式的特色。許多商家經過複製和分區的方法來擴充數據庫使其突破單個節點的界限,但這些功能一般都是過後增長的,安裝和維護都和複雜。同時,也會影響RDBMS的特定功能,例如聯接、複雜的查詢、觸發器、視圖和外鍵約束這些操做在大型的RDBMS上的代價至關高,甚至根本沒法實現。算法

HBase從另外一個角度處理伸縮性問題。它經過線性方式從下到上增長節點來進行擴展。HBase不是關係型數據庫,也不支持SQL,可是它有本身的特長,這是RDBMS不能處理的,HBase巧妙地將大而稀疏的表放在商用的服務器集羣上。sql

HBase 是Google Bigtable 的開源實現,與Google Bigtable 利用GFS做爲其文件存儲系統相似, HBase 利用Hadoop HDFS 做爲其文件存儲系統;Google 運行MapReduce 來處理Bigtable中的海量數據, HBase 一樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable 利用Chubby做爲協同服務, HBase 利用Zookeeper做爲對應。
圖片描述數據庫

1.二、HBase的特色

◆大:一個表能夠有上億行,上百萬列。
​◆面向列:面向列表(簇)的存儲和權限控制,列(簇)獨立檢索。
​◆稀疏:對於爲空(NULL)的列,並不佔用存儲空間,所以,表能夠設計的很是稀疏。
​◆無模式:每一行都有一個能夠排序的主鍵和任意多的列,列能夠根據須要動態增長,同一張表中不一樣的行能夠有大相徑庭的列。
​◆數據多版本:每一個單元中的數據能夠有多個版本,默認狀況下,版本號自動分配,版本號就是單元格插入時的時間戳。
​◆數據類型單一:HBase中的數據都是字符串,沒有類型。編程

更多信息閱讀:《Hbase簡介》、《Hbase體系架構和集羣安裝》、《HBase數據模型服務器

2、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更通用。app

Spark能夠用來訓練推薦引擎(Recommendation Engine)、分類模型(Classification Model)、迴歸模型(Regression Model)、聚類模型(Clustering Model)。

更多關於Spark的文章閱讀:《【上海大數據培訓】Spark集羣運行、讀取、寫入Hbase數據》、《【上海大數據培訓】Spark集羣的運行過程

3、Hive

3.一、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.二、爲何要使用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數據倉庫之快速入門》

4、Mapreduce

4.一、MapReduce是什麼?

MapReduce 是一個分佈式運算程序的編程框架,是用戶開發「基於 hadoop 的數據分析 應用」的核心框架。MapReduce採用"分而治之"的思想,把對大規模數據集的操做,分發給一個主節點管理下的各個分節點共同完成,而後經過整合各個節點的中間結果,獲得最終結果。簡單地說,MapReduce就是"任務的分解與結果的彙總"。

在分佈式計算中,MapReduce框架負責處理了並行編程中分佈式存儲、工做調度、負載均衡、容錯均衡、容錯處理以及網絡通訊等複雜問題,把處理過程高度抽象爲兩個函數:map和reduce,map負責把任務分解成多個任務,reduce負責把分解後多任務處理的結果彙總起來。

4.二、爲何須要 MapReduce?

​◆ 海量數據在單機上處理由於硬件資源限制,沒法勝任。
​◆ 而一旦將單機版程序擴展到集羣來分佈式運行,將極大增長程序的複雜度和開發難度。
​◆引入 MapReduce 框架後,開發人員能夠將絕大部分工做集中在業務邏輯的開發上,而將 分佈式計算中的複雜性交由框架來處理。

4.三、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的概念理解和特色,以及一些應用場景和核心機制。歡迎你們評論留言,須要相關學習資料也能夠留言聯繫。

相關文章
相關標籤/搜索