1. 程式人生 > >Spark專案學習-慕課網日誌分析-days1-hadoop

Spark專案學習-慕課網日誌分析-days1-hadoop

1. HDFS架構

1 Master(NameNode/NM) 帶 N個Slaves(DataNode/DN)

HDFS/YARN/HBase

 

1個檔案會被拆分成多個Block

 

NN:

1)負責客戶端請求的響應

2)負責元資料(檔案的名稱、副本系數、Block存放的DV)的管理

 

DN:

1)儲存使用者的檔案對應的資料塊(Block)

2)要定期向NN傳送心跳資訊,彙報本身及其所有的block資訊,健康狀況

 

replication factor:副本系數、副本因子

 

2. HDFS shell常用命令的使用

1)ls 檢視目錄  fs -ls -R 遞迴檢視

2)get 獲取檔案

3)cat 檢視內容

4)mkdir 建立資料夾  fs -mkdir -p /a/b 建立多個目錄 

5)hadoop fs -put hafs.cmd /test/ 複製檔案

6)hadoop fs -text xxx  檢視內容

7)hadoop fs -rmr /a  rmr遞迴的刪除

 

3. HDFS優點

1)高容錯

2)適合批處理

3)適合大資料處理

4)可構建在廉價的機器上

  HDFS缺點:

1)低延遲的資料訪問

2)小檔案儲存

 

4. 分散式計算框架MapReduce(公司裡基本不用了)

1)易於程式設計

2)良好的擴充套件性

3)高容錯性

4)適合海量資料的離線處理

5)將計算向儲存轉移

  (1)MapReduce不擅長的場景

1)實時計算;

2)流式計算;(流式計算的特點是 無時無刻都在產生資料,但是MapReduce的資料是靜態離線的)

3)DAG計算;(DAG是指任務相互之間存在先後關係的)

  (2)NapReduce程式設計模型

1)input

2)map&reduce

3)output

4)過程:首先被分成3個塊,然後逐步處理每行,每行以空格分割,然後map逐個統計個數,形成kv對,然後在reduce中將相同key值得value加起來

 

5.資源排程框架YARN

(1)YARN產生背景

1)MapReduce1.x存在的問題:JobTracker負責資源管理,任務排程,工作較多:容易發生單點故障

2)資源利用率&運維成本比較高,因為幾個框架Hadoop,spark,MPI不能統一調配

YARN的優點在於,所有的資源管理都是可以由YARN完成的,無論是什麼框架和資料型別,都可以跑在YARN上

(2)YARN架構

由1個RM(Resource Manger) + N個NM(Node Manger)

RM(ResourceManager)的職責:一個叢集active狀態的RM只有一個,負責整個叢集的資源管理和排程

1)處理客戶端的請求(啟動/殺死)

2)啟動、監控ApplicationMaster(一個作業對應一個AM)

3)監控NM

4)系統的資源分配和排程

 

NodeManager:整個叢集中有N個,負責單個節點的資源管理和使用以及task的執行情況

1)定期向RM彙報本節點的資源使用請求和各個Container的執行狀態

2)接收並處理RM的container啟停的各種命令

3)單個節點的資源管理和任務管理

 

ApplicationMaster:一個作業對應一個,負責應用程式的管理

1)資料的切分

2)為應用程式向RM申請資源(container),並分配給內部任務

3)與NM通訊以啟停task,task是執行在container中的

4)task的監控和容錯

 

Container:對任務執行情況的描述:cpu、memory、環境變數等

 

(3)YARN的執行流程:首先客戶端找到RM,然後RM找到NM,然後NM找到一個AM,並且AM向RM彙報和申請資源,並在對應的NM上啟動,開始作業

1)使用者向YARN提交作業

2)RM為該作業分配第一個container(AM)

3)RM會與對應的NM通訊,要求NM在這個container上啟動應用程式的AM

4)AM首先向RM註冊,然後AM將為各個任務申請資源,並監控執行情況

5)AM採用輪訓的方式通過RPC協議向RM申請和領取資源

6)AM申請到資源以後,便和響應的NM通訊,要求NM啟動任務

7)NM啟動我們作業對應的task

 

6. 大資料資料倉庫Hive

(1)Hive產生背景

1)MapReduce的程式設計不便性(必須本地編好程式碼,並打包上傳檔案執行

2)HDFS上的檔案缺少Scheme(Scheme是指資料型別資訊,必須學習到Java或者MapReduce相關程式設計技巧)

 

(2)Hive是什麼

1)由facebook開源的,最初用於解決海量結構化的日誌資料統計問題

2)構建在Hadoop之上的資料倉庫

3)Hive定義了一種類SQL查詢語言:HQL(類似SQL但不完全相同)

4)通常用於進行離線資料處理(採用MapReduce)

5)底層支援多種不同的執行引擎(可以使用spark,Tez,MapReduce,Hive on spark)

6) 支援多種不同的壓縮格式,儲存格式以及自定義函式(壓縮:GZIP,LZO,Snappy,BZIP2;儲存:TextFile,SequenceFile,RCFile,ORC)

 

(3)為什麼要使用Hive

1)簡單,容易上手(提供類似於SQL查詢語言HQL)

2)為超大資料集設計的計算/儲存擴充套件能力(MR計算,HDFS儲存)

3)統一的元資料管理(可與Presto/Impala(基於記憶體)/SparkSQL等共享資料) 意味著建立的表在相互之間可與通用

 

(4)Hive體系架構

1)最上層:可與通過shell和JDBC等客戶端進行操作,寫SQL語句

2)Driver:首先解析SQL語句,生成邏輯執行計劃,然後進行優化,然後生成物理執行計劃,最後生成執行引擎,提交到MapReduce執行

3)採用HDFS,HBase執行

4)左側是指表格存放在Mysql中

 

  Hive部署架構--生產環境

1)所有元資料管理都放在MySQL中執行

2)Hive在Hadoop上執行

3)具有Active MySQL和Standby MySQL

4)Hive只需要部署一個,因為他只是一個客戶端,用來提交SQL

 

  Hive的基本使用

1)建立表 CREAT TABLE table_name(資料名 資料型別)

2)將資料載入 LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename

3)查詢語句 select word,count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word;

    lateral view explode();