Hadoop生態圈知識

1、Hadoop生態圈知識

  1、Hadoop生態概況

  Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。具備可靠、高效、可伸縮的特色。java

  Hadoop的核心是YARN,HDFS和Mapreduce。node

  一、經常使用的模塊架構

  

  二、Hadoop社區版和發行版的區別

    一、社區版的優缺點

  優勢:web

  • 徹底免費
  • 徹底開源
  • 社區活躍

  缺點算法

  • 版本管理較麻煩
  • 缺少部署、運維等工具
  • 技術問題無人兜底(什麼問題都會遇到)
    二、發行版的優缺點

  優勢數據庫

  • 版本管理清晰
  • 兼容性、穩定性有提高
  • 工具豐富
  • 可購買技術服務

  缺點tomcat

  • 企業版須要付費
  • 部分或所有不開源
  • 部分產品無社區生態可言

  三、Hadoop的應用場景

  • 海量數據存儲:各類雲盤
  • 日誌處理:對網站日誌作ETL,存入Hive或各類關係型數據庫
  • 數據分析:hive/impala等可用於離線數據分析、BI,spark和HBase等可用於實時的分析
  • 機器學習:用於標籤、推薦系統

  四、Hadoop不適用的場景

  • 少許結構化數據:不超過TB的結構化數據,繼續使用單機版數據庫,超過TB先考慮使用數據庫集羣
  • 低延遲數據訪問:能夠考慮HBase,如果K/V型的則選擇更多,例如Redis
  • 大量小文件:HDFS的文件結構保存在namenode進程的內存中,所以總量是有限制的,通常100w個文件消化300M內存。若小文件超多,仍是隨機讀寫,HDFS就很是不合適的,通常有這種需求的公司會有本身研發。(默認的存儲文件塊是64M,其餘存儲文件塊是幾K)
  • 實時計算:MapReduce的批處理機制決定了不能實時計算,根據實時性要求的不一樣,可以使用Storm或SparkStreaming

  五、爲什麼大數據都要學Hadoop

  • 非頂級公司,Hadoop幾乎是分佈式計算的必選方案
  • 即便頂級公司,Hadoop的經驗也很是有用

  2、HDFS(Hadoop分佈式文件系統)

  源自於Google的GFS論文,發表於2003年10月,HDFS是GFS克隆版。安全

  HDFS是Hadoop體系中存儲管理的基礎。他是高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。服務器

  HDFS簡化了文件的一致性模型,經過流式數據訪問,提升吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。架構

  它提供了一次寫入屢次讀取的機制,數據以塊的形式,同時分佈式在集羣不一樣物理機上。框架

  一、HDFS架構示意圖

  CS架構:分爲兩部分,NameNode(服務端)和DataNode(客戶端)

  Client是第三方程序。

  

  訪問數據:Client請求訪問NameNode,NameNode返回相應的元數據(告知client數據在哪一個DataNode上),client找對應的DataNode讀取數據。

  NameNode負責數據存儲到哪一個節點上。

  容錯機制(數據備份): NameNode將數據存儲到某個節點的同時,會根據配置建立對應副本到其餘(物理)節點上(能夠感知數據在哪一個物理節點上)。

  二、namenode和datanode角色職責

    一、namenode職責
  • 接收用戶操做請求
  • 維護文件系統的目錄結構
  • 管理文件與block之間關係,block與datanode之間關係
    二、datanode職責
  • 按照namenode的要求存儲文件
  • 文件被分紅block存儲在磁盤上
  • 爲保證數據安全,文件會有多個副本

  三、替代HDFS的產品

  

  3、MapReduce(分佈式計算框架)

  一、MapReduce介紹

  源自於Google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是Google MapReduce的克隆版。

  MapReduce是一種分佈式計算模型,泳衣進行大數據量的計算。他屏蔽了分佈式計算框架細節,將計算抽象成map和reduce兩部分

  map對數據集上的獨立元素進行指定的操做,生成鍵-值對形式中間結果。reduce則對中間結果中相同「鍵」的全部「值」進行規約,以獲得最終結果。

  MapReduce很是適合大量計算機組成的分佈式並行環境裏進行數據處理。

  二、替代MapReduce的產品

  

  4、HBASE(分佈式列存儲數據庫)

  一、HBase簡述

  源自於Google的bigtable論文,發表於2006年11月,HBase是Google bigtable的克隆版。

  HBase是一個開源的非關係型分佈式數據庫(NoSQL)。

  HBase是一個創建在HDFS之上, 面向列的稀疏排序映射表(Key/value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。

  在HBase中,列簇至關於關係型數據庫的表。而key-value這樣的鍵值對,至關於數據庫裏面的一行。

  HBase提供了對大規模數據的隨機、實時讀寫訪問;同時,HBase中保存的數據可使用MapReduce來處理,它將數據和並行計算完美結合在一塊兒。

  二、HBase的特色

  HBase具備高可靠性、高性能、面向列、可伸縮的特色

  三、HBase適用於哪些應用

  • 海量數據(TB、PB)
  • 須要在海量數據中高效的隨機讀取
  • 能同時處理結構化和非結構化數據
  • 不須要徹底擁有RDBMS的ACID特性

  四、HBase架構圖

  

  5、zookeeper(分佈式協做服務)

  一、zookeeper簡述

  源自於Google的chubby論文,發表於2006年11月,zookeeper是chubby的克隆版。

  zookeeper是一個分佈式應用程序協調服務。

  它解決了分佈式環境下數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。

  Hadoop的許多組件依賴於zookeeper,它運行在計算集羣上面,用於管理Hadoop操做。

  二、znode

  zookeeper名字空間的每一個節點都是以這樣一個路徑來標識的。這樣的節點統一稱爲znode。

  分爲如下幾類(如下能夠組成)

  • 持久的/臨時的
  • 無序的/有序的

  三、三種成員

  • leader:接收消息,並編號
  • follower:同步消息,參與leader選舉
  • observer:同步消息,但不參與leader選舉(提高節點選舉效率,可添加observer)

  6、HIVE(數據倉庫)

  由Facebook開源,最初用於解決海量結構化的日誌數據統計問題。

  Hive定義了一種相似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行。一般用於離線分析。

  HQL用於運行存儲在Hadoop上的查詢語句,Hive讓部署MapReduce開發人員也能編寫數據查詢語句,而後這些語句被翻譯爲Hadoop上面的MapReduce任務。

  一、hive架構以下

  

    

  Hadoop和MapReduce是hive架構的根基。

  二、hive架構包括的組件

  分爲兩大類:服務端組件和客戶端組件

  • CLI:(command line interface)
  • JDBC/ODBC
  • Thtift Server
  • WEB GUI
  • metastore
  • Driver(complier 、optimizer和executor)

   7、Pig(ad-hoc腳本)

  有Yahoo開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具。

  pig定義了一種數據流語言——pig latin,它是MapReduce變成的複雜性的抽象,pig平臺包括運行環境和用於Hadoop數據集的腳本語言(pig latin)。

  實現:pig 編譯器將pig latin翻譯成MapReduce程序序列,將腳本轉換成MapReduce任務在Hadoop上執行,一般用於離線分析。(如今幾乎讓hive去掉

  8、sqoop(數據ETL/同步工具)

  sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據。數據的導入和導出本質是MapReduce程序,充分利用MR的並行化和容錯性。

  sqoop利用數據庫計算描述數據架構,用在關係數據庫、數據倉庫和Hadoop之間轉移數據

  9、flume(日誌收集工具)

  flume是cloudera開源的日誌收集系統,具備分佈式、高可靠、高容錯、易於定製和擴展的特色。

  它將數據從產生、傳輸、處理並最終寫入目標路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在flume中定製數據發送方,從而支持收集各類不一樣協議數據。(能夠直接寫到Hadoop中,傳輸到另一臺服務器中,或本地指定路徑)

  flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外flume還具備可以將日誌寫到各類數據目標(可定製)的能力。

  總的來講,flume是一個可擴展、適合複雜環境的海量日誌收集系統,也能夠用於收集其餘類型數據。

  10、Oozie(工做流調度器)

  Oozie是一個基於工做流引擎的服務器,能夠在上面運行Hadoop的MapReduce和pig任務。它實際上是一個運行在Java Servlet容器(好比tomcat)中的java web應用。

  對於Oozie來講,工做流就是一系列的操做(好比Hadoop的MR,以及pig的任務),這些操做經過有向無環圖的機制控制。這種控制依賴是,一個操做的輸入依賴於前一個任務的輸出,只有前一個操做全完完成後,才能開始第二個。

  Oozie工做流經過hPDL(hPDL是一種xml的流程定義語言)。工做流操做經過遠程系統啓動任務,當任務完成後,遠程系統會進行回調來通知任務已經結束,而後

再開始下一個操做。

  一、Oozie工做流包含控制流節點以及操做節點

  控制流節點定義了工做流的開始和借宿(start、end以及fail的節點),寧控制工做流執行路徑(decision,fork,join節點)。操做節是工做流觸發計算/處理任務的執行,Oozie支持不一樣的任務類型Hadoop MapReduce,hdfs,pig,ssh,email,Oozie子工做流等等。Oozie能夠自動以擴展任務類型。

  Oozie工做流能夠參數化的方式執行(使用變量${inputDir}定義)。當提交工做流任務時,就須要同時提供參數。若參數合適的話(使用不一樣的目錄)就能夠定義並行的工做流任務。

  

 

  11、Yarn(分佈式資源管理器)

  YARN是一代MapReduce,即MRv2。是在第一代MapReduce基礎上演變而來的,主要是爲了解決原始Hadoop擴展性查,不支持多計算框架而提出的。

     YARN是下一代Hadoop計算平臺,是一個通用的運行框架,用戶能夠編寫本身計算框架,在該運行環境中運行。

  用於本身編寫的框架做爲客戶端的一個lib,在運行提交做業時打包便可。

  一、YARN包含的組件

  • 資源管理:包括應用程序管理和機器資源管理
  • 資源雙層調度
  • 容錯性:各個組件均有考慮容錯性
  • 擴展性:可擴展到上萬個節點

  二、MRv1與MRv2架構

  

  

  12、spark(內存DAG計算模型)

  一、spark簡述

   spark是一個Apache項目,它被標榜爲「快如閃電的集羣計算」。它擁有了一個繁榮的開源社區,而且是目前最活躍的Apache項目。

  spark是分佈式批處理系統和分析挖掘引擎。

  最先spark是UC berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架。

   二、spark的功能

  • 數據處理:能夠用來快速處理數據,兼具容錯性和可擴展性
  • 迭代計算:支持迭代計算,有效應對多步的數據處理邏輯
  • 數據挖掘:在海量數據基礎上進行復雜的分析,可支持各類數據挖掘和機器學習算法

  三、spark的優點

  快,內存計算;資源分配靈活,可基於Yarn或Mesos

  spark提供了一個更快的、更通用的數據處理平臺。和Hadoop相比,spark可讓你的程序在內訓中運行時速度提高100倍,或者在磁盤時速度提升10倍。

  四、spark架構

  

  十3、kafka(分佈式消息隊列)

  kafka是LinkedIn與2010年12月開源的消息隊列系統,他主要用於處理活躍的流式數據。

  活躍的流式數據在web網站應用中很是常見,這些數據包括:網站的PV,用戶訪問了什麼內容,搜索了什麼內容等等。這些動做一般以日誌的形式記錄下來,而後每一個一段時間進行一次統計處理。

  十4、storm

  一、storm簡述

  storm是一個開源、分佈式、高容錯的實時計算系統,彌補了Hadoop批處理所不能知足的實時要求,常常用於在實時分析、在線機器學習、持續計算、分佈式遠程調用和EIL等領域。

  二、storm的關鍵概念

  https://blog.csdn.net/hxyerui/article/details/51179488

  三、storm架構圖

  

  十5、Hue

  一、Hue簡述

  Hue(Hadoop user experience)是一個開源的Apache Hadoop UI系統,由Cloudera Desktop演化而來,它是基於Python Web框架Django實現的。

  二、Hue的功能

  • SQL編輯,支持Hive、impala、sparkSQL和各類關係型數據庫
  • 管理Hadoop和spark任務
  • HBase數據的查詢和修改
  • Sqoop任務的開發和調試
  • 管理Oozie的工做流
  • 其餘功能:瀏覽HDFS、瀏覽zookeeper

  十6、StreamSets

   在streamsets推出前,flume,scribe等少數開源工具是流式採集日誌僅有的解決方案,flume的應用案例最多。streamsets是flume的良好替代品

  streamsets的源和目標的支持特別豐富,還能夠對數據進行不落地處理,所以還能夠替代傳統ETL軟件的一部分功能

  一、streamsets的優勢

  • 功能上,有管理界面,能夠單個流啓停,統計報表豐富,能夠預覽數據
  • 源端支持,其多出HDFS、JDBC、Redis、ftp等幾種重要的源
  • 目標端支持,其多出JDBC、Redis、RabbitMQ、Flume等幾種重要的目標
  • 數據處理上,streamsets有多種字段處理組件,flume僅有過濾功能。有強大的格式處理能力,且支持源端壓縮格式,還能使用JavaScript和Python等自定義處理邏輯

  二、streamsets的缺點

  資源佔用率比flume略高,可是由於和flume同樣能夠分佈式部署,問題不大

相關文章
相關標籤/搜索