大數據各組件重要技術點總結


介紹

針對大數據組件特點歸納如下:

  • 存儲:HDFS,hudi,Hbase, Kafka
  • 計算引擎:Spark,Flink
  • OLAP: Doris
  • 調度: Yarn

下面主要從架構、組件原理、業務場景等角度針對相關組件的技術要點進行總結. 主要以問題驅動.

組件技術要點

1.hudi的cow,mor區別和應用場景?

Cow:
 寫時復制技術就是不同進程在訪問同一資源的時候,只有更新操作,才會去復制一份新的數據並更新替換,否則都是訪問同一個資源
 
 讀多寫少的數據,適合cow,離線批量更新場景
 
Mor:
新插入的數據存儲在deltalog 中,定期再將delta log合並進行parquet數據文件。讀取數據時,會將deltalog跟老的數據文件做merge,得到完整的數據返回
 
由於寫入數據先寫deltalog,且delta log較小,所以寫入成本較低,適用實時高頻更新場景

2. hdfs架構及各角色的作用,如何實現namenode 高可用?

Namenode: 管理節點,存儲元數據、文件與數據塊對應關系的節點,數據以fsimage和editlog存儲在namenode本地磁盤

Datanode:文件系統工作節點,根據需要存儲和檢索數據塊,定期向他們發送存儲的塊列表
 
雙機熱備份,standby和active, 備用namenode為活動的namenode設置周期性的檢查點,判斷活動namenode是否失效

3. hbase架構,如何解決寫熱點問題?

  • RegionServer:負責數據的讀寫服務,用戶通過與Region server交互來實現對數據的訪問
  • HBaseHMaster:負責Region的分配及數據庫的創建和刪除等操作
  • ZooKeeper:負責維護集群的狀態(某台服務器是否在線,服務器之間數據的同步操作及master的選舉等)

熱點:

創建表的指定多個region,默認情況下一個表一個region

對rowkey進行散列,把多個請求寫分到不同的region上,需要對key進行md5,進行散列,這樣就可以把寫請求分到不同的region上面去

4.kafka rebalance機制,架構及寫入存儲機制?

rebalance機制:

當kafka遇到如下四種情況的時候,kafka會觸發Rebalance機制:
 
消費組成員發生了變更,比如有新的消費者加入了消費組組或者有消費者宕機
消費者無法在指定的時間之內完成消息的消費
消費組訂閱的Topic發生了變化
訂閱的Topic的partition發生了變化
 
kafka中的重要概念:

Producer: 消息生產者,向 Kafka Broker 發消息的客戶端。
Consumer: 消息消費者,從 Kafka Broker 取消息的客戶端。
Consumer Group:消費者組(CG),消費者組內每個消費者負責消費不同分區的數據,提高消費能力。一個分區只能由組內一個消費者消費,消費者組之間互不影響。所有的消費者都屬於某個消費者組,即消費者組是邏輯上的一個訂閱者。
Broker: 一台 Kafka 機器就是一個 broker。一個集群由多個 broker 組成。一個 broker可以容納多個 topic。
Topic: 可以理解為一個隊列,topic 將消息分類,生產者和消費者面向的是同一個 topic。
Partition: 為了實現擴展性,提高並發能力,一個非常大的 topic 可以分布到多個 broker(即服務器)上,一個 topic 可以分為多個 partition,每個 partition 是一個 有序的隊列。
Replica: 副本,為實現備份的功能,保證集群中的某個節點發生故障時,該節點上的 partition 數據不丟失,且Kafka 仍然能夠繼續工作,Kafka 提供了副本機制,一個 topic 的每個分區都有若干個副本,一個 leader 和若干個 follower。
Leader: 每個分區多個副本的“主”副本,生產者發送數據的對象,以及消費者消費數據的對象,都是 leader。
Follower: 每個分區多個副本的“從”副本,實時從 leader 中同步數據,保持和 leader數據的同步。leader 發生故障時,某個 follower 還會成為新的 leader。
offset:消費者消費的位置信息,監控數據消費到什么位置,當消費者掛掉再重新恢復的時候,可以從消費位置繼續消費。
Zookeeper: Kafka 集群能夠正常工作,需要依賴於 zookeeper,zookeeper 幫助 Kafka存儲和管理集群信息。
 
寫入存儲機制:

由於生產者生產的消息會不斷追加到 log 文件末尾,為防止 log 文件過大導致數據定位效率低下,Kafka 采取了分片和索引機制,將每個 partition 分為多個 segment,每個 segment 對應兩個文件:“.index” 索引文件和 “.log” 數據文件。這些文件位於同一文件下,該文件夾的命名規則為:topic 名-分區號。例如,first 這個 topic 有三分分區,則其對應的文件夾為 first-0,first-1,first-2。

 ls/root/data/kafka/first-0

00000000000000009014.index   
00000000000000009014.log
00000000000000009014.timeindex
00000000000000009014.snapshot
leader-epoch-checkpoint

".index”文件存儲大量的索引信息,“.log” 文件存儲大量的數據,索引文件中的元數據指向對應數據文件中 message 的物理偏移量。

5.spark寬依賴,窄依賴,數據傾斜問題解決方案?

寬依賴:是指1個父RDD分區對應多個子RDD的分區

窄依賴:是指一個或多個父RDD分區對應一個子RDD分區

寬依賴會產生shuffle,會跨網絡拉取數據; 窄依賴在一個節點內就可以完成轉換。
 
數據傾斜解決方案:

  1. 針對hive數據分布不均勻,Hive ETL 預處理數據
  2. 過濾少數導致數據傾斜的key
  3. 提高shuffle操作的並行度
  4. 雙重聚合,局部聚合先給每個key都打上一個隨機數,再全局聚合
  5. 將reduce join轉為map join, BroadCast+filter(或者map)
  6. 采樣傾斜key分拆join操作, 將兩次join的結果union合並起來,就是join的結果

6.flink狀態存儲,架構,如何實現精確一次語義?

Flink提供了三種開箱即用的狀態存儲方式:

  1. MemoryStateBackend 內存存儲
  2. FsStateBackend 文件系統存儲
  3. RocksDBStateBackend RocksDB存儲

如果沒有特殊配置,系統默認使用內存存儲方式
 
架構:
 
JobManager:
    JobManager具有許多與協調 Flink 應用程序的分布式執行有關的職責:它決定何時調度下一個 task(或一組 task)、對完成的 task 或執行失敗做出反應、協調checkpoint、並且協調從失敗中恢復等等
 
TaskManagers:
    TaskManager(也稱為worker)執行作業流的 task,並且緩存和交換數據流
 
精確一次語義保證:
source端:  Flink Kafka Source 負責保存 Kafka 消費 offset, Chckpoint成功時 Flink 負責提交這些寫入
sink端: 從 Source端開始,每個內部的 transform 任務遇到 checkpoint barrier(檢查點分界線)時,都會把狀態存到 Checkpoint 里,  
數據處理完畢到 Sink 端時,Sink 任務首先把數據寫入外部 Kafka,這些數據都屬於預提交的事務(還不能被消費)
當所有算子任務的快照完成, 此時 Pre-commit 預提交階段才算完成。才正式到兩階段提交協議的第二個階段:commit 階段。該階段中JobManager 會為應用中每個 Operator 發起 Checkpoint 已完成的回調邏輯, 當 Sink任務收到確認通知,就會正式提交之前的事務,Kafka 中未確認的數據就改為“已確認”,數據就真正可以被消費了

7.doris架構設計,如何實現查詢計算較快?

架構:
FE: 主要負責查詢的編譯,分發和元數據管理(基於內存,類似HDFS NN)
BE: 主要負責查詢的執行和存儲系統
 
查詢計算快原因:
 1. MPP架構
 2. 列式存儲

8.yarn調度算法有哪些,以及調度過程?

調度算法:

  1. 先進先出調度器(FIFO)    單隊列,根據提交作業的先后順序,先到先得。
  1. 容量調度器
  1. 公平調度器

容量調度器:優先選擇資源利用率低的隊列;
公平調度器:優先選擇對資源缺額比例大的。

9.flink作業提交流程?

Yarn-session: 應用模式與單作業模式的提交流程非常相似,只是初始提交給Yarn資源管理器的不再是具體的作業,而是整個應用。一個應用中可能包含了多個作業,這些作業都在Flink集群中啟動各自對應的JobMaster。

Per-job:  與會話模式不同的是JobManager的啟動方式,以及省去了分發器。作業提交給JobMaster之后的步驟是一樣的

參考

  1. 列式存儲: https://juejin.cn/post/7080504990900420644
  2. Yarn調度器和調度算法(FIFO、容量調度器 與 公平調度器):https://blog.csdn.net/FunnyPrince_/article/details/120244552
  3. Flink作業提交流程(Yarn集群模式:  https://blog.csdn.net/FlatTiger/article/details/124195400


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM