Hadoop_簡介_01

1. Apache Hadoopjava

  1.1 Hadoop介紹mysql

    Hadoop是Apache旗下的一個用java語言實現的開源軟件框架, 是一個開發和運行處理大規模數據的軟件平臺. 容許使用簡單的編程模型在大量計算機集羣上對大型數據集進行分佈式處理. Hadoop不會跟某種具體的行業或者某個具體的業務掛鉤, 他只是一種用來作海量數據分析處理的工具. linux

    

    狹義上說, Hadoop指Apache這款開源框架, 其核心組件有: web

      HDFS (分佈式文件系統) : 解決海量數據存儲算法

      YARN (做業調度和集羣資源管理的框架) : 解決資源任務調度sql

      MAPREDUCE (分佈式運算編程框架) : 解決海量數據計算shell

    廣義上說, Hadoop一般是指一個更普遍的概念 -- Hadoop生態圈. 數據庫

    

    當下的Hadoop已經成長爲一個龐大的體系編程

    HDFS: 分佈式文件系統windows

    MAPREDUCE: 分佈式運算程序開發框架

    HIVE: 基於Hadoop的分佈式數據倉庫, 提供基於SQL的查詢數據操做

    HBASE: 基於Hadoop的分佈式海量數據數據庫

    ZOOKEEPER: 分佈式協調服務基礎組件

    Mahout: 基於MR / Spark / Flink等分佈式運算框架的機器學習算法庫

    OOZIE: 工做流調度框架

    SQOOP: 數據導入導出工具 (好比用於mysql和HDFS之間)

    FLUME: 日誌數據採集框架

    IMPALA: 基於Hive的實時sql查詢分析

  1.2 Hadoop發展簡史

    三篇Google論文:

    1) 2003年Google發表的第一篇論文: GFS (Google分佈式文件系統)

    2) 2004年Google發表的第二篇論文: Google的MapReduce解決海量數據計算

      同一時期,Doug Cutting基於Google的兩篇論文開發出: HDFS (Hadoop的分佈式文件系統) , MapReduce (基於Hadoop的分佈式計算平臺) 成爲Apache的頂級項目. 

    3) 2006年Google發表的第三篇論文: BigTable, 開源界根據論文開發了HBase (基於Hadoop的分佈式數據庫) . 

  1.3 Hadoop特性優勢

    1) 擴容能力: Hadoop是在可用的計算機集羣間分配數據並完成計算任務的, 這些集羣可用方便的擴展到數以千計的節點中. 

    2) 成本低: Hadoop經過廉價的機器組成服務器集羣來分發以及處理數據, 以致於成本很低. 

    3) 高效率: 經過併發數據,Hadoop能夠在節點之間動態並行的移動數據, 使得速度很是快. 

    4) 可靠性: 能自動維護數據的多份複製, 而且在任務失敗後自動的從新部署計算任務. 因此Hadoop的按位存儲和處理數據的能力值得信賴. 

 

2. Hadoop集羣

  2.1 發行版本

    分爲開源社區版商業版

    社區版: 由Apache軟件基金會維護的版本, 是官方維護的版本體系. 

      優勢: 功能最新, 免費. 

      缺點: 穩定性差, 兼容性差. 

    商業版: 由第三方商業公司在社區版基礎上進行一些修改, 整合以及各個服務組件兼容性測試而發行的版本, 好比著名的cloudera的CDH, mapR, hortonWorks等. 

      優勢: 穩定性好, 軟件兼容性好. 

      缺點: 收費, 暫時不能使用最新的Hadoop版本. 

    Hadoop版本特殊, 是由多條分支並行的發展, 大的來看分爲3個大的系列版本: 1.x, 2.x, 3.x. 

    Hadoop1.x由一個分佈式文件系統HDFS和一個離線計算框架MR組成. 

    Hadoop2.x包含一個支持NameNode橫向擴展的HDFS, 一個資源管理系統YARN和一個運行在YARN上的離線計算框架MR. 相比於Hadoop1.x, Hadoop2.x功能更增強大, 且具備更好的擴展性, 性能, 並支持多種計算框架. 如今是企業主流版本. 

    Hadoop3.x相比以前的Hadoop2.x有一系列的功能加強. 目前已經趨於穩定, 可是整個生態圈體系升級整合還未完畢, 因此商用還值得商榷. 

  2.2 集羣簡介

    Hadoop集羣具體來講包含兩個集羣: HDFS集羣, YARN集羣, 二者邏輯上分離, 但物理上常在一塊兒. 

      1) HDFS集羣負責海量數據的存儲, 集羣中的角色主要有: NameNode, DataNode, SecondaryNameNode. 

      2) YARN集羣負責海量數據運算時的資源調度, 集羣中的角色主要有: ResourceManager, NodeManager. 

      其中MR實際上是一個分佈式運算編程框架, 是應用程序開發包, 由用戶按照編程規範進行程序開發, 後打包運行在HDFS集羣上, 而且受到YARN集羣的資源調度管理.  

    Hadoop部署方式分四種: Standalone mode (獨立模式) , Pseudo-Distributed mode (僞分佈式模式) , Cluster mode (集羣模式) , HA high availability (高可用集羣模式) 其中前兩種都是在單機部署. 

      1) 獨立模式又稱爲單機模式, 僅1個機器運行1個Java進程, 主要用於調試. 

      2) 僞分佈模式也是在1個機器運行HDFS的NameNode和DataNode, YARN的ResourceManager和NodeManager, 但分別啓動單獨的Java進程, 主要用於調試. 

      3) 集羣模式主要用於生產環境部署. 會使用N臺主機組成一個集羣, 這種部署模式下, 主節點和從節點會分開部署在不一樣的機器上. 

      4) 高可用集羣模式主要解決單點故障, 保證集羣的高可用, 提升可靠性

    HDFS集羣 (主從架構) : 

      主角色: NameNode (nn)

      從角色: DataNode (dn)

      主角色的輔助角色: SecondaryNameNode (snn)

    YARN集羣 (主從架構) : 

      主角色: ResourceManager (rm)

      從角色: NodeManager (nm)

    MR須要開發的程序組件: 

      Map組件

      Reduce組件

    Hadoop角色分佈圖

    

    HDFS原理圖簡單分析

    

  2.3 爲何CDH版本Hadoop要從新編譯?

    因爲CDH的全部安裝包版本都給出了對應的軟件版本, 通常狀況下是不須要本身進行編譯的, 可是因爲CDH給出的Hadoop的安裝包沒有提供帶C程序訪問的藉口, 全部咱們在使用本地庫的時候就會出現問題. (本地庫: 能夠用來作壓縮, 以及支持C程序等等) 

    1) Hadoop是使用Java語言開發的, 可是有一些需求和操做並不適合使用java, 因此就引入了本地庫 (Native Libraries) 的概念. 說白了, 就是Hadoop的某些功能, 必須經過JNT來協調Java類文件和Native代碼生成的庫文件一塊兒才能工做.

    2) linux系統要運行Native代碼, 首先要將Native編譯成目標CPU架構的 [.so] 文件. 而不一樣的處理器架構, 須要編譯出相應平臺的動態庫 [.so] 文件, 才能被正確的執行, 因此最好從新編譯一次hadoop源碼, 讓 [.so] 文件與本身處理器相對應. 注意: windows平臺是動態庫 [.dll] 文件

    總結: 主要是要從新編譯本地庫 (Native Libraries) 代碼 (Linux下對應 [.so] 文件,window下對應 [.dlI] 文件) , 也就是編譯生成linux下的 [.so] 文件. 

    源碼編譯後壓縮包路徑: 

    

     源碼編譯後結果: 

    

  2.4 Hadoop安裝包目錄結構

    目錄結構以下: 

    bin: Hadoop最基本的管理腳本和使用腳本的目錄

    etc: Hadoop配置文件所在的目錄

    include: 對外提供的編程庫頭文件 (具體動態庫和靜態庫在lib目錄中) . 

    lib: 包含了Hadoop對外提供的編程動態庫和靜態庫, 與include目錄中的頭文件結合使用. 

    libexec: 各個服務對用的shell配置文件所在的目錄, 可用於配置日誌輸出, 啓動參數等基本信息. 

    sbin: Hadoop管理腳本所在的目錄, 主要包括HDFS和YARN中各種服務的啓動 / 關閉腳本

    share: Hadoop各個模塊編譯後的jar包所在的目錄, 官方自帶實例

  2.5 集羣規劃 

    集羣規劃: 在咱們準備的三臺服務器上如何搭建hadoop集羣
    原則:
      1) 優先知足軟件須要的硬件資源
      2) 儘可能避免有衝突的軟件不要在一塊兒
      3) 有依賴的軟件儘可能部署在一塊兒

    規劃安排:
      hadoop01: NameNode DataNode | ResourceManager NodeManager
      hadoop02: DataNode SecondaryNameNode | NodeManager
      hadoop03: DataNode | NodeManager

    將來擴展:
      hadoop04: DataNode NodeManager
      hadoop05: DataNode NodeManager
      hadoop06: DataNode NodeManager
      ......

  2.6 啓動, Web-UI

    要啓動Hadoop集羣, 須要啓動HDFS和YARN兩個集羣, 首次啓動HDFS時, 必須對其進行格式化操做. 本質上是一些清理和準備工做, 所以此時的HDFS在物理上仍是不存在的. 

    Hadoop集羣啓動並容許, 能夠經過web-ui進行查看

    NameNode: http://nn_host:port/ 默認50070

    ResourceManager: http://rm_host:port/ 默認8088

  2.7 MapReduce JobHistory

    JobHistory用來記錄已經finished的MR運行日誌, 日誌信息存放於HDFS目錄中, 默認狀況下沒有開啓此功能, 須要在mapred-site.xml中配置並手動啓動. 

    能夠經過web-ui進行查看

    http://nn_host:port/ 默認19888

 

3. HDFS的垃圾桶機制

  3.1 垃圾桶機制解析

    每個文件系統都會有垃圾桶機制, 便於將刪除的數據回收到垃圾桶裏, 避免某些誤操做刪除一些重要文件. 回收到垃圾桶裏的資料數據, 均可以進行恢復. 

  3.2 垃圾桶機制配置

     HDFS的垃圾回收的默認配置屬性爲0, 也就是說, 若是不當心誤刪了, 那麼這個操做是不可恢復的. 修改core-site.xml , 那麼能夠按照生產上的需求設置回收站的保存時間, 這個時間以分鐘爲單位, 例如1440 = 24h = 1天. 

  3.3 垃圾桶機制驗證

    若是啓用垃圾桶配置, dfs命令刪除的文件不會當即從HDFS中刪除. 相反, HDFS將其移動到垃圾目錄 (每一個用戶在 /user/<username>/.Trash 下都有本身的垃圾目錄). 只要文件保留在垃圾箱中, 文件能夠快速回復. 

    使用skipTrash選項刪除文件, 該選項不會將文件發送到垃圾桶, 它將從HDFS中徹底刪除. 

相關文章
相關標籤/搜索