首頁>Club>
對於我們這些文科,商科生來說。我們剛剛搞懂伺服器,資料庫,C++,Java等基礎語言是個什麼東西的時候,大資料時代來了。
9
回覆列表
  • 1 # 噠雪無痕

    題目:如何用形象的比喻描述大資料的技術生態?

    其實也不用形象的比喻你就能懂,

    首先需要知道Hadoop生態圈主要包含哪些框架

    1. Hadoop

    HDFS:Hadoop分散式檔案系統

    MapReduce:MapReduce分散式程式設計模型

    Yarn:資源分配

    Hbase:海量資料庫,面向列

    Hive:透過SQL操作結構化資料,為使用者操作結構化資料提供一個易用的介面。

    Flume:日誌收集

    Kafka:訊息佇列

    Storm:流計算

    Spark框架

    Spark-Core:Spark框架的核心,包括RDD,任務排程等。

    Spark-SQL:作用也是透過SQL操作結構化資料,提供一個易用的介面,相當於一個前端,其後端可以包括HDFS、MongoDB等。

    Spark-Streaming:流計算

    Spark-Mlib:機器學習庫

    Spark-GraphX:圖計算

    下面的四個模組都是在Spark-Core的基礎上實現的,可以看出來Spark其主要作用還是在於高效計算,其核心在於RDD與任務排程。

    所以在學習的時候可以重點關注Hadoop的儲存,Spark的計算,發揮各自的優勢。

    早些的時候,我聽過一句話計算機的東西無非就三樣,儲存、計算和通訊,下面就從這三點理一下大資料生態圈的那些框架

    1.儲存

    檔案系統:HDFS

    資料庫:HBase

    2. 計算

    批計算:MapReduce,Spark-Core

    互動式計算:Hive,Spark-SQL

    實時計算:Storm,Spark-Streaming

    3. 通訊

    分散式框架一般都會需要一個基礎,那就是RPC(遠端過程呼叫),RPC提供了這樣一種功能,客戶端和服務端遵循某種介面協議,當客戶端呼叫介面協議中的某個函式時,會轉發給服務端,然後服務端呼叫服務端的實現函式,透過序列化在將結果透過網路返回給客戶端。

    在學習這些框架的時候,無非就是先學習

    它是幹什麼的,使用場景?

    它的架構,元件包括哪些?

    一些重要的流程?

    在深入的話就是原始碼了。

    HDFS主要解決海量檔案儲存,它提供一個高可靠、可擴充套件的分散式檔案儲存系統,其主要元件包含NameNode與DataNode,其中NameNode負責管理資料的元資訊,DataNode負責儲存實際的資料資訊,重要的流程比如上傳檔案(其實很複雜),首先客戶端會向NameNode申請元資訊,拿到元資訊後,客戶端就會想相應的DataNode寫資料,如果副本數為3的話,客戶端會拿到三個元資訊(一般不會在同一個DataNode上),然後用這三個DataNode組成Pipline,客戶端只負責第一個DataNode資料的寫入,後續的DataNode的資料由前一個DataNode負責寫入。這樣的話,一個叢集中就會有三份資料,提供了高可靠,當然這個寫過程中還包括容錯(寫過程中某個環節出錯),也有執行中的容錯,比如執行中某個節點突然宕機,最嚴重的NameNode節點宕機該怎麼辦?不展開說了,太多一時半會講不完。

    接下來說一說MapReduce,它的主要原理是演算法思想中的分治法,也就是把一個大的作業分發到不同的子節點去分別執行,在將結果合併,MR分為兩個版本MRv1和MRv2,MR主要由程式設計模型(MapReduce API)、資源管理與作業控制(v1:JobTracker,TaskTracker,v2:Yarn)、資料處理引擎(MapTask、ReduceTask)。v1和v2的主要區別在於,v1將資源管理和作業控制都交給JobTracker,而v2將資源管理和作業控制分開,分別由RM和NM(AppMaster)節點去管理。MR的執行過程其實也挺複雜,裡面包含多處最佳化、容錯等機制,簡單說一下就是先對資料進行分片,然後用一個RecorderReader不斷的去讀這個分片,解析出一個kv,在去呼叫使用者編寫map,處理完後寫入到一個緩衝區中,在溢位到磁碟,然後執行reduce任務的節點在從map節點拉取結果(透過http方式),依次透過合併,歸併排序,執行使用者編寫的reduce函式,在寫入到相應的輸出中(例如HDFS)。

    下面說一下Yarn,Yarn框架主要作用是資源管理,它上面可以執行多種計算框架,MapReduce,Spark等,以MR的提交為例,客戶端先從RM上申請一個JobID,然後向一個共享檔案系統提交作業(包括作業配置檔案,切片),RM分配資源,在NM中分配一個Container,其中一臺是AppMaster,其他NM負責執行map,reduce任務,AppMaster負責map、reduce任務的啟動與跟蹤,當map任務結束後,reduce任務會拉取map任務的結果,這個時候就需要知道map和任務節點的對映關係,因為AppMaster會向RM報告任務先關資訊,所以從RM中可以獲取對映關係,當任務結束後,RM回收NM的資源並更新叢集資源資訊。

    HBase,海量資料庫,以HDFS為基礎,可擴充套件,高可靠,關鍵概念有下面一些:行健、列族、cell、版本,透過這四個座標可以確定一條資料。元件包括HMaster和RegionServer,其中HMaster負責RegionServer的執行狀態和RegionServer的負載均衡,當表格過大時,就會分割成Region,儲存到不同的RegionServer上,一個RegionServer上可以包含多個Region,Region以Hfile的形式儲存在HDFS上,所以Region是個邏輯概念,這麼多的資料,索引必然成為一個問題,Hbase採取的方式是二級索引,有點像作業系統中的頁表。

    Spark,高效計算框架,因為是學院派做的,又加入了機器學習、圖計算框架,它的核心在於RDD與任務排程,從資料結構的角度看RDD,它就是一種資料結構加上操作資料結構的API,RDD的操作主要分為Transformation和Action任務執行主要分為兩個步驟,Stage劃分與提交,Task排程與執行,說到這裡,又不得不說一下Spark的APP模型,一個App中可以包含多個action操作,一個action操作會觸發一個Job,一個Job包含多個Stage,每個Stage中會包含一個或多個RDD,一個RDD包含一個或多個Partition...各個階段RDD的依賴主要是由DAGScheduler計算得到的,然後在提交執行的時候,會將Stage轉換為Taskset,由TaskScheduler把Tasks排程到相應的Worker節點,交由Executor執行。

    想要了解大資料可以關注我,每天都有新的資料更新,想要學習資料私信【學習】

  • 中秋節和大豐收的關聯?
  • 一個星期前又添了一張新床味道很大,今天測出懷孕了,對胎兒發育有影響嗎?