日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Hadoop生态系统的详细介绍

發(fā)布時間:2023/12/19 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop生态系统的详细介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

hadoop生態(tài)系統(tǒng)的詳細介紹

簡介

Hadoop是一個開發(fā)和運行處理大規(guī)模數(shù)據(jù)的軟件平臺,是Appach的一個用java語言實現(xiàn)開源軟件框架,實現(xiàn)在大量計算機組成的集群中對海量數(shù)據(jù)進行分布式計算。今天我們來詳細介紹下hadoop的生態(tài)系統(tǒng)。

Hadoop生態(tài)系統(tǒng)概況

Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架。具有可靠、高效、可伸縮的特點。
Hadoop的核心是HDFS和MapReduce,hadoop2.0還包括YARN。
下圖為hadoop的生態(tài)系統(tǒng):

HDFS(Hadoop分布式文件系統(tǒng))

源自于Google的GFS論文,發(fā)表于2003年10月,HDFS是GFS克隆版。
是Hadoop體系中數(shù)據(jù)存儲管理的基礎(chǔ)。它是一個高度容錯的系統(tǒng),能檢測和應(yīng)對硬件故障,用于在低成本的通用硬件上運行。HDFS簡化了文件的一致性模型,通過流式數(shù)據(jù)訪問,提供高吞吐量應(yīng)用程序數(shù)據(jù)訪問功能,適合帶有大型數(shù)據(jù)集的應(yīng)用程序。
HDFS主要有以下幾個部分組成:

  • Client:切分文件;訪問HDFS;與NameNode交互,獲取文件位置信息;與 DataNode交互,讀取和寫入數(shù)據(jù)。
  • NameNode:Master節(jié)點,在hadoop1.X中只有一個,管理HDFS的名稱空間和數(shù)據(jù)塊映射信息,配置副本策略,處理客戶端請求。對于大型的集群來講,Hadoop1.x存在兩個最大的缺陷:
    1.對于大型的集群,namenode的內(nèi)存成為瓶頸,namenode的擴展性的問題;
    2.namenode的單點故障問題。
    3.針對以上的兩個缺陷,Hadoop2.x以后分別對這兩個問題進行了解決。
    4.對于缺陷1)提出了Federation namenode來解決,該方案主要是通過多個namenode來實現(xiàn)多個命名空間來實現(xiàn)namenode的橫向擴張。從而減輕單個namenode內(nèi)存問題。
    5.針對缺陷2),hadoop2.X提出了實現(xiàn)兩個namenode實現(xiàn)熱備HA的方案來解決。其中一個是處于standby狀態(tài),一個處于active狀態(tài)。
  • DataNode:Slave節(jié)點,存儲實際的數(shù)據(jù),匯報存儲信息給NameNode。
  • Secondary NameNode:輔助NameNode,分擔(dān)其工作量;定期合并fsimage和edits,推送給NameNode;緊急情況下,可輔助恢復(fù)NameNode,但Secondary NameNode并非NameNode的熱備。
    目前,在硬盤不壞的情況,我們可以通過secondarynamenode來實現(xiàn)namenode的恢復(fù)。
  • Mapreduce(分布式計算框架)

    源自于google的MapReduce論文,發(fā)表于2004年12月,Hadoop MapReduce是google MapReduce 克隆版。MapReduce是一種計算模型,用以進行大數(shù)據(jù)量的計算。其中Map對數(shù)據(jù)集上的獨立元素進行指定的操作,生成鍵-值對形式中間結(jié)果。Reduce則對中間結(jié)果中相同“鍵”的所有“值”進行規(guī)約,以得到最終結(jié)果。MapReduce這樣的功能劃分,非常適合在大量計算機組成的分布式并行環(huán)境里進行數(shù)據(jù)處理。
    MapReduce計算框架發(fā)展到現(xiàn)在有兩個版本的MapReduce的API,針對MR1主要組件有以下幾個部分組成:
    (1)JobTracker:Master節(jié)點,只有一個,主要任務(wù)是資源的分配和作業(yè)的調(diào)度及監(jiān)督管理,管理所有作業(yè),作業(yè)/任務(wù)的監(jiān)控、錯誤處理等;將任務(wù)分解成一系列任務(wù),并分派給TaskTracker。
    (2)TaskTracker:Slave節(jié)點,運行Map Task和Reduce Task;并與JobTracker交互,匯報任務(wù)狀態(tài)。
    (3)Map Task:解析每條數(shù)據(jù)記錄,傳遞給用戶編寫的map(),并執(zhí)行,將輸出結(jié)果寫入本地磁盤。
    (4)Reducer Task:從Map Task的執(zhí)行結(jié)果中,遠程讀取輸入數(shù)據(jù),對數(shù)據(jù)進行排序,將數(shù)據(jù)按照分組傳遞給用戶編寫的reduce函數(shù)執(zhí)行。
    在這個過程中,有一個shuffle過程,對于該過程是理解MapReduce計算框架是關(guān)鍵。該過程包含map函數(shù)輸出結(jié)果到reduce函數(shù)輸入這一個中間過程中所有的操作,稱之為shuffle過程。在這個過程中,可以分為map端和reduce端。

    Map端:

    1) 輸入數(shù)據(jù)進行分片之后,分片的大小跟原始的文件大小、文件塊的大小有關(guān)。每一個分片對應(yīng)的一個map任務(wù)。
    2) map任務(wù)在執(zhí)行的過程中,會將結(jié)果存放到內(nèi)存當(dāng)中,當(dāng)內(nèi)存占用達到一定的閾值(這個閾值是可以設(shè)置的)時,map會將中間的結(jié)果寫入到本地磁盤上,形成臨時文件這個過程叫做溢寫。
    3) map在溢寫的過程中,會根據(jù)指定reduce任務(wù)個數(shù)分別寫到對應(yīng)的分區(qū)當(dāng)中,這就是partition過程。每一個分區(qū)對應(yīng)的是一個reduce任務(wù)。并且在寫的過程中,進行相應(yīng)的排序。在溢寫的過程中還可以設(shè)置conbiner過程,該過程跟reduce產(chǎn)生的結(jié)果應(yīng)該是一致的,因此該過程應(yīng)用存在一定的限制,需要慎用。
    4) 每一個map端最后都只存在一個臨時文件作為reduce的輸入,因此會對中間溢寫到磁盤的多個臨時文件進行合并Merge操作。最后形成一個內(nèi)部分區(qū)的一個臨時文件。

    Reduce端:

    1) 首先要實現(xiàn)數(shù)據(jù)本地化,需要將遠程節(jié)點上的map輸出復(fù)制到本地。
    2) Merge過程,這個合并過程主要是對不同的節(jié)點上的map輸出結(jié)果進行合并。
    3) 不斷的復(fù)制和合并之后,最終形成一個輸入文件。Reduce將最終的計算結(jié)果存放在HDFS上。
    針對MR2是新一代的MR的API。其主要是運行在Yarn的資源管理框架上。

    Yarn(資源管理框架)

    YARN (Yet Another Resource Negotiator,另一種資源協(xié)調(diào)者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。

    YARN的基本思想是將JobTracker的兩個主要功能(資源管理和作業(yè)調(diào)度/監(jiān)控)分離,主要方法是創(chuàng)建一個全局的ResourceManager(RM)和若干個針對應(yīng)用程序的ApplicationMaster(AM)。這里的應(yīng)用程序是指傳統(tǒng)的MapReduce作業(yè)或作業(yè)的DAG(有向無環(huán)圖)。

    該框架是hadoop2.x以后對hadoop1.x之前JobTracker和TaskTracker模型的優(yōu)化,而產(chǎn)生出來的,將JobTracker的資源分配和作業(yè)調(diào)度及監(jiān)督分開。該框架主要有ResourceManager,Applicationmatser,nodemanager。其主要工作過程如下:

    ResourceManager主要負責(zé)所有的應(yīng)用程序的資源分配,
    ApplicationMaster主要負責(zé)每個作業(yè)的任務(wù)調(diào)度,也就是說每一個作業(yè)對應(yīng)一個ApplicationMaster。
    Nodemanager是接收Resourcemanager 和ApplicationMaster的命令來實現(xiàn)資源的分配執(zhí)行體。
    ResourceManager在接收到client的作業(yè)提交請求之后,會分配一個Container,這里需要說明一下的是Resoucemanager分配資源是以Container為單位分配的。第一個被分配的Container會啟動Applicationmaster,它主要負責(zé)作業(yè)的調(diào)度。Applicationmanager啟動之后則會直接跟NodeManager通信。
    在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的調(diào)度器負責(zé)資源的分配,而NodeManager則負責(zé)資源的供給和隔離。ResourceManager將某個NodeManager上資源分配給任務(wù)(這就是所謂的“資源調(diào)度”)后,NodeManager需按照要求為任務(wù)提供相應(yīng)的資源,甚至保證這些資源應(yīng)具有獨占性,為任務(wù)運行提供基礎(chǔ)的保證,這就是所謂的資源隔離。
    在Yarn平臺上可以運行多個計算框架,如:MR,Tez,Storm,Spark等計算,框架。

    Sqoop(數(shù)據(jù)同步工具)

    Sqoop是SQL-to-Hadoop的縮寫,主要用于傳統(tǒng)數(shù)據(jù)庫和Hadoop之間傳輸數(shù)據(jù)。數(shù)據(jù)的導(dǎo)入和導(dǎo)出本質(zhì)上是Mapreduce程序,充分利用了MR的并行化和容錯性。其中主要利用的是MP中的Map任務(wù)來實現(xiàn)并行導(dǎo)入,導(dǎo)出。Sqoop發(fā)展到現(xiàn)在已經(jīng)出現(xiàn)了兩個版本,一個是sqoop1.x.x系列,一個是sqoop1.99.X系列。對于sqoop1系列中,主要是通過命令行的方式來操作。

    sqoop1 import原理:從傳統(tǒng)數(shù)據(jù)庫獲取元數(shù)據(jù)信息(schema、table、field、field type),把導(dǎo)入功能轉(zhuǎn)換為只有Map的Mapreduce作業(yè),在mapreduce中有很多map,每個map讀一片數(shù)據(jù),進而并行的完成數(shù)據(jù)的拷貝。
    sqoop1 export原理:獲取導(dǎo)出表的schema、meta信息,和Hadoop中的字段match;多個map only作業(yè)同時運行,完成hdfs中數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫中。
    Sqoop1.99.x是屬于sqoop2的產(chǎn)品,該款產(chǎn)品目前功能還不是很完善,處于一個測試階段,一般并不會應(yīng)用于商業(yè)化產(chǎn)品當(dāng)中。

    Mahout(數(shù)據(jù)挖掘算法庫)

    Mahout起源于2008年,最初是Apache Lucent的子項目,它在極短的時間內(nèi)取得了長足的發(fā)展,現(xiàn)在是Apache的頂級項目。相對于傳統(tǒng)的MapReduce編程方式來實現(xiàn)機器學(xué)習(xí)的算法時,往往需要話費大量的開發(fā)時間,并且周期較長,而Mahout的主要目標是創(chuàng)建一些可擴展的機器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。
    Mahout現(xiàn)在已經(jīng)包含了聚類、分類、推薦引擎(協(xié)同過濾)和頻繁集挖掘等廣泛使用的數(shù)據(jù)挖掘方法。除了算法,Mahout還包含數(shù)據(jù)的輸入/輸出工具、與其他存儲系統(tǒng)(如數(shù)據(jù)庫、MongoDB 或Cassandra)集成等數(shù)據(jù)挖掘支持架構(gòu)。
    mahout的各個組件下面都會生成相應(yīng)的jar包。此時我們需要明白一個問題:到底如何使用mahout呢?
      實際上,mahout只是一個機器學(xué)習(xí)的算法庫,在這個庫當(dāng)中是想了相應(yīng)的機器學(xué)習(xí)的算法,如:推薦系統(tǒng)(包括基于用戶和基于物品的推薦),聚類和分類算法。并且這些算法有些實現(xiàn)了MapReduce,spark從而可以在hadoop平臺上運行,在實際的開發(fā)過程中,只需要將相應(yīng)的jar包即可。

    Hbase(分布式列存數(shù)據(jù)庫)

    源自Google的Bigtable論文,發(fā)表于2006年11月,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫是對面向行的數(shù)據(jù)庫。HBase是Google Bigtable克隆版,HBase是一個針對結(jié)構(gòu)化數(shù)據(jù)的可伸縮、高可靠、高性能、分布式和面向列的動態(tài)模式數(shù)據(jù)庫。和傳統(tǒng)關(guān)系數(shù)據(jù)庫不同,HBase采用了BigTable的數(shù)據(jù)模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關(guān)鍵字、列關(guān)鍵字和時間戳構(gòu)成。HBase提供了對大規(guī)模數(shù)據(jù)的隨機、實時讀寫訪問,同時,HBase中保存的數(shù)據(jù)可以使用MapReduce來處理,它將數(shù)據(jù)存儲和并行計算完美地結(jié)合在一起。
    Hbase表的特點

    • 大:一個表可以有數(shù)十億行,上百萬列;

    • 無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據(jù)需要動態(tài)的增加,同一張表中不同的行可以有截然不同的列;

    • 面向列:面向列(族)的存儲和權(quán)限控制,列(族)獨立檢索; 稀疏:空(null)列并不占用存儲空間,表可以設(shè)計的非常稀疏;

    • 數(shù)據(jù)多版本:每個單元中的數(shù)據(jù)可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;

    • 數(shù)據(jù)類型單一:Hbase中的數(shù)據(jù)都是字符串,沒有類型。 Hbase物理模型
      每個column family存儲在HDFS上的一個單獨文件中,空值不會被保存。
      Key 和 Version number在每個 column family中均有一份;
      HBase 為每個值維護了多級索引,即:”key, column family, column name, timestamp”,其物理存儲:

    ??1.Table中所有行都按照row key的字典序排列;
    ??2. Table在行的方向上分割為多個Region;
    ??3.Region按大小分割的,每個表開始只有一個region,隨著數(shù)據(jù)增多,region不斷增大,當(dāng)增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;
    ??4.Region是Hbase中分布式存儲和負載均衡的最小單元,不同Region分布到不同RegionServer上。、
    ??5.Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元。Region由一個或者多個Store組成,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore存儲在內(nèi)存中,StoreFile存儲在HDFS上。

    Zookeeper(分布式協(xié)作服務(wù))

    源自Google的Chubby論文,發(fā)表于2006年11月,Zookeeper是Chubby克隆版,主要解決分布式環(huán)境下的數(shù)據(jù)管理問題:統(tǒng)一命名,狀態(tài)同步,集群管理,配置同步等。
    Zookeeper的主要實現(xiàn)兩步:

    • 選舉Leader
    • 同步數(shù)據(jù)。這個組件在實現(xiàn)namenode的HA高可用性的時候,需要用到。

    Pig(基于Hadoop的數(shù)據(jù)流系統(tǒng))

    由yahoo!開源,設(shè)計動機是提供一種基于MapReduce的ad-hoc(計算在query時發(fā)生)數(shù)據(jù)分析工具
    定義了一種數(shù)據(jù)流語言—Pig Latin,將腳本轉(zhuǎn)換為MapReduce任務(wù)在Hadoop上執(zhí)行。通常用于進行離線分析。

    Hive(基于Hadoop的數(shù)據(jù)倉庫)

    由facebook開源,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計問題。
    Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉(zhuǎn)化為MapReduce任務(wù)在Hadoop上執(zhí)行。通常用于離線分析。

    Flume(日志收集工具)

    Cloudera開源的日志收集系統(tǒng),具有分布式、高可靠、高容錯、易于定制和擴展的特點。

    它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫入目標的路徑的過程抽象為數(shù)據(jù)流,在具體的數(shù)據(jù)流中,數(shù)據(jù)源支持在Flume中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議數(shù)據(jù)。同時,Flume數(shù)據(jù)流提供對日志數(shù)據(jù)進行簡單處理的能力,如過濾、格式轉(zhuǎn)換等。此外,Flume還具有能夠?qū)⑷罩緦懲鞣N數(shù)據(jù)目標(可定制)的能力。總的來說,Flume是一個可擴展、適合復(fù)雜環(huán)境的海量日志收集系統(tǒng)。

    Oozie

    在Hadoop中執(zhí)行的任務(wù)有時候需要把多個Map/Reduce作業(yè)連接到一起,這樣才能夠達到目的。在Hadoop生態(tài)圈中,有一種相對比較新的組件叫做Oozie,它讓我們可以把多個Map/Reduce作業(yè)組合到一個邏輯工作單元中,從而完成更大型的任務(wù)。

    Oozie是一種Java Web應(yīng)用程序,它運行在Java servlet容器——即Tomcat——中,并使用數(shù)據(jù)庫來存儲以下內(nèi)容:
    1、工作流定義
    2、當(dāng)前運行的工作流實例,包括實例的狀態(tài)和變量
    Oozie工作流是放置在控制依賴DAG(有向無環(huán)圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業(yè)、Pig作業(yè)等),其中指定了動作執(zhí)行的順序。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。

    Spark

    Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學(xué)伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優(yōu)點;但不同于MapReduce的是——Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機器學(xué)習(xí)等需要迭代的MapReduce的算法。

    Spark 是一種與 Hadoop 相似的開源集群計算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載。
    Spark 是在 Scala 語言中實現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。
    盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統(tǒng)中并行運行。通過名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發(fā),可用來構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。

    Tez

    Tez是一個針對Hadoop數(shù)據(jù)處理應(yīng)用程序的新分布式執(zhí)行框架。Tez是Apache最新的支持DAG作業(yè)的開源計算框架,它可以將多個有依賴的作業(yè)轉(zhuǎn)換為一個作業(yè)從而大幅提升DAG作業(yè)的性能。Tez并不直接面向最終用戶——事實上它允許開發(fā)者為最終用戶構(gòu)建性能更快、擴展性更好的應(yīng)用程序。Hadoop傳統(tǒng)上是一個大量數(shù)據(jù)批處理平臺。但是,有很多用例需要近乎實時的查詢處理性能。還有一些工作則不太適合MapReduce,例如機器學(xué)習(xí)。Tez的目的就是幫助Hadoop處理這些用例場景。
    Tez項目的目標是支持高度定制化,這樣它就能夠滿足各種用例的需要,讓人們不必借助其他的外部方式就能完成自己的工作,如果 Hive和 Pig 這樣的項目使用Tez而不是MapReduce作為其數(shù)據(jù)處理的骨干,那么將會顯著提升它們的響應(yīng)時間。Tez構(gòu)建在YARN之上,后者是Hadoop所使用的新資源管理框架。

    Storm

    Storm為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時處理消息并更新數(shù)據(jù)庫。這是管理隊列及工作者集群的另一種方式。 Storm也可被用于“連續(xù)計算”(continuous computation),對數(shù)據(jù)流做連續(xù)查詢,在計算時就將結(jié)果以流的形式輸出給用戶。它還可被用于“分布式RPC”,以并行的方式運行昂貴的運算。
    Storm可以方便地在一個計算機集群中編寫與擴展復(fù)雜的實時計算,Storm用于實時處理,就好比 Hadoop 用于批處理。Storm保證每個消息都會得到處理,而且它很快——在一個小集群中,每秒可以處理數(shù)以百萬計的消息。更棒的是你可以使用任意編程語言來做開發(fā)。

    總結(jié)

    以上是生活随笔為你收集整理的Hadoop生态系统的详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。