正文前先來一波福利推薦:
福利一:
百萬年薪架構師視頻,該視頻可以學到很多東西,是本人花錢買的VIP課程,學習消化了一年,為了支持一下女朋友公眾號也方便大家學習,共享給大家。
福利二:
畢業答辯以及工作上各種答辯,平時積累了不少精品PPT,現在共享給大家,大大小小加起來有幾千套,總有適合你的一款,很多是網上是下載不到。
獲取方式:
微信關注 精品3分鍾 ,id為 jingpin3mins,關注后回復 百萬年薪架構師 ,精品收藏PPT 獲取雲盤鏈接,謝謝大家支持!
------------------------正文開始---------------------------
一、Hadoop理論
Hadoop是一個專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。
Hadoop=HDFS(文件系統,數據存儲技術相關)+ Mapreduce(數據處理)
一、HDFS部分:
Hadoop的數據來源可以是任何形式,在處理半結構化和非結構化數據上與關系型數據庫相比有更好的性能,具有更靈活的處理能力,不管任何數據形式最終會轉化為key/value,key/value是基本數據單元。
用函數式變成Mapreduce代替SQL,SQL是查詢語句,而Mapreduce則是使用腳本和代碼,而對於適用於關系型數據庫,習慣SQL的Hadoop有開源工具hive代替。
hadoop使用java編寫,版本較為混亂,初學者可從1.2.1開始學習
1.成百上千台服務器組成集群,需要時刻檢測服務器是否故障
2.用流讀取數據更加高效快速
3.存儲節點具有運算功能,省略了服務器之間來回傳數據的網絡帶寬限制
4.一次寫入,多次訪問,不修改數據
5.多平台
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
namenode:master
負責總體調度,處理協調請求等(一個集群只能有一個namenode,但是可以多個集群組成一個更大的集群,這時就有多個namenode,這時的namenode有兩種狀態,一種叫active並且一個大集群只能有一個namenode處於該狀態,一種為standby)
namenode兩大功能:接受客戶端讀寫服務,存放元數據(DataNode存儲的位置等基本信息,fsimage和edits文件)
fsimage是namenode格式化時產生的,edits是用戶操作增刪改查的時候生成的日志
datanode:slave,存儲節點,會備份,一般本地2分,其他服務器一份
機架:多個DataNod節點組成,master通過機架感知技術得知所需數據的位置
數據塊:存儲單元,一般64M(hadoop2中是128M)
時刻保持心跳通訊,保證每個數據都備份於3個節點上
5的read為第一個數據塊讀完后,讀下一個數據塊,如果在讀取過程中某一個數據塊出問題,則會記錄下來並且找其他的備份,並且以后不再讀取錯誤數據塊
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DataNode數據節點
- 以數據塊為單位儲存數據
- 數據保存的目錄由hadoop.tmp.dir決定
- Secondary NameNode第二名稱節點
- 主要是合並日日志
- 日志合並過程
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、HDFS + Yarn部分:
分布式計算Yarn``MapReduce
- ResourceManager(資源管理器)
- 接受客戶端的請求:執行任務
- 分配任務資源
- 分配任務
- NodeManager(節點管理器,運行MapReduce任務)
- 從DataNode獲取數據,執行任務
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三. 提交一個Application到Yarn的流程
這張圖簡單地標明了提交一個程序所經歷的流程,接下來我們來具體說說每一步的過程。
-
Client向Yarn提交Application,這里我們假設是一個MapReduce作業。
-
ResourceManager向NodeManager通信,為該Application分配第一個容器。並在這個容器中運行這個應用程序對應的ApplicationMaster。
-
ApplicationMaster啟動以后,對作業(也就是Application)進行拆分,拆分task出來,這些task可以運行在一個或多個容器中。然后向ResourceManager申請要運行程序的容器,並定時向ResourceManager發送心跳。
-
申請到容器后,ApplicationMaster會去和容器對應的NodeManager通信,而后將作業分發到對應的NodeManager中的容器去運行,這里會將拆分后的MapReduce進行分發,對應容器中運行的可能是Map任務,也可能是Reduce任務。
-
容器中運行的任務會向ApplicationMaster發送心跳,匯報自身情況。當程序運行完成后,ApplicationMaster再向ResourceManager注銷並釋放容器資源。
以上就是一個作業的大體運行流程。
為什么會有Hadoop Yarn框架的出現?
上面說了這么多,最后我們來聊聊為什么會有Yarn吧。
直接的原因呢,就是因為Hadoop1.0中架構的缺陷,在MapReduce中,jobTracker擔負起了太多的責任了,接收任務是它,資源調度是它,監控TaskTracker運行情況還是它。這樣實現的好處是比較簡單,但相對的,就容易出現一些問題,比如常見的單點故障問題。
要解決這些問題,只能將jobTracker進行拆分,將其中部分功能拆解出來。彼時業內已經有了一部分的資源管理框架,比如mesos,於是照着這個思路,就開發出了Yarn。這里多說個冷知識,其實Spark早期是為了推廣mesos而產生的,這也是它名字的由來,不過后來反正是Spark火起來了。。。
閑話不多說,其實Hadoop能有今天這個地位,Yarn可以說是功不可沒。因為有了Yarn,更多計算框架可以接入到Hdfs中,而不單單是MapReduce,到現在我們都知道,MapReduce早已經被Spark等計算框架趕超,而Hdfs卻依然屹立不倒。究其原因,正式因為Yarn的包容,使得其他計算框架能專注於計算性能的提升。Hdfs可能不是最優秀的大數據存儲系統,但卻是應用最廣泛的大數據存儲系統,Yarn功不可沒。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、Hive的原理以及使用
hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析Facebook公司最早完成並開源了hive框架,可以將sql語句直接翻譯成MapReduce程序。Hive是基於Hadoop的一個數據倉庫工具,可以將結構化數據文件映射成一張表,並提供類似SQL的查詢功能。Hive相當於一個客戶端。
Hive框架的作用:
(1)可以讓不懂java的數據分析人員使用hadoop進行數據分析;
(2)MapReduce開發非常繁瑣復雜,使用hive可以提高效率。
(3)統一的元數據管理,可與impala/spark共享元數據。
2. Hive基礎:
(1)使用HQL作為查詢接口;使用MapReduce進行計算;數據存儲在HDFS上;運行在Yarn上。
(2)Hive比較靈活和可擴展性,支持UDF和多種文件格式。
(3)Hive適合離線數據分析(批量處理、延時要求很大)。
Hive 是 SQL解析引擎,它將SQL語句轉譯成Map/Reduce Job然后在Hadoop執行。Hive的表其實就是HDFS的目錄,按表名把文件夾分開。如果是分區表,則分區值是子文件夾,可以直接在Map/Reduce Job里使用這些數據。
Hive的系統結構
由上圖可知,HDFS和Mapreduce是Hive架構的根基。Hive架構包括如下組件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),這些組件可以分為兩大類:服務端組件和客戶端組件。
(1)客戶端組件:
①CLI:command line interface,命令行接口。
②Thrift客戶端:上面的架構圖里沒有寫上Thrift客戶端,但是Hive架構的許多客戶端接口是建立在Thrift客戶端之上,包括JDBC和ODBC接口。
③WEBGUI:Hive客戶端提供了一種通過網頁的方式訪問Hive所提供的服務。這個接口對應Hive的hwi組件(hive web interface),使用前要啟動hwi服務。
(2)服務端組件:
①Driver組件:該組件包括Complier、Optimizer和Executor,它的作用是將我們寫的HiveQL(類SQL)語句進行解析、編譯優化,生成執行計划,然后調用底層的mapreduce計算框架。
②Metastore組件:元數據服務組件,這個組件存儲hive的元數據,hive的元數據存儲在關系數據庫里,hive支持的關系數據庫有derby、mysql。元數據對於hive十分重要,因此hive支持把metastore服務獨立出來,安裝到遠程的服務器集群里,從而解耦hive服務和metastore服務,保證hive運行的健壯性。
③Thrift服務:Thrift是facebook開發的一個軟件框架,它用來進行可擴展且跨語言的服務的開發,hive集成了該服務,能讓不同的編程語言調用hive的接口。
(3)底層根基:
—>Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from table 不會生成 MapRedcue 任務)