大數據技術原理與應用——大數據處理架構Hadoop

Hadoop簡介 

  Hadoop是Apache軟件基金會旗下的一個開源分佈式計算平臺,爲用戶提供了系統底層細節透明的分佈式基礎架構。面試

  Hadoop是基於Java語言開發的,具備很好的跨平臺特性,而且能夠部署在廉價的計算機集羣中。算法

  Hadoop的核心是分佈式文件系統(Hadoop Distributed File System,HDFS)和MapReduce。數據庫

  Hadoop被公認爲行業大數據標準開源軟件,在分佈式環境下提供了海量數據的處理能力。編程


 Hadoop的特性

  Hadoop是一個可以對大量數據進行分佈式處理的軟件框架,而且是一種可靠、高效、可伸縮的方式進行處理的,它具備如下幾個方面的特性:服務器

  高可靠性:採用冗餘數據存儲方式,即便一個副本發生故障,其餘副本也能夠保證正常對外提供服務。架構

  高效性:做爲並行分佈式計算平臺,Hadoop採用分佈式存儲和分佈式處理兩大核心技術,可以高效地處理PB級數據。框架

  高可擴展性:Hadoop的設計目標是能夠高效穩定地運行在廉價的計算機集羣上,能夠擴展到數以千萬計的計算機節點上。機器學習

  高容錯性:採用冗餘數據存儲方式,自動保存數據的多個副本,而且可以自動將失敗的任務進行從新分配。編程語言

  成本低:Hadoop採用廉價的計算機集羣,成本比較低,普通用戶也很容易用本身的PC搭建Hadoop運行環境。分佈式

  運行在Linux平臺上:Hadoop是基於Java語言開發的,能夠較好地運行在Linux平臺上。

  支持多種編程語言:Hadoop上的應用程序也可使用其餘編程語言編寫。


 Hadoop生態系統

  通過多年的發展。Hadoop生態系統不斷完善和成熟,目前已經包括了多個子項目。除了核心的HDFS和MapReduce之外,Hadoop生態系統還包括Zookeeper,HBase,Hive,Pig,Mahout、Sqoop、Flume、Ambari等功能組件。須要說明的是,Hadoop2.0中新增了一些重要的組件,即HDFS HA和分佈式資源調度管理框架YRAN等。

          

  HDFS:Hadoop分佈式文件系統是Hadoop項目的兩大核心之一,是針對谷歌文件系統的開源實現。HDFS具備處理超大數據、流式處理、能夠運行在廉價商用服務器上等優勢。HDFS在設計之初就是要運行在廉價的大型服務器集羣上,所以在設計上就把硬件故障做爲一種常態來考慮,能夠保證在部分硬件發生故障的狀況下仍然可以保證文件系統的總體可用性和可靠性。

  HBase:HBase是一個提供高可靠性、高性能、可伸縮、實時讀寫、分佈式的列式數據庫,通常採用HDFS做爲其底層數據存儲。HBase是針對谷歌BigTable的開源實現,兩者都採用了相同的數據模型,具備強大的非結構化數據存儲能力。HBase與傳統關係數據庫的一個重要區別是,前者採用基於列的存儲,然後者採用基於行的存儲。HBase具備良好的橫向擴展能力,能夠經過不斷增長廉價的商用服務器來增長存儲能力。

  MapReduce:Hadoop MapReduce是針對谷歌MapReduce的開源實現。MapRedece是一種編程模型,用於大規模數據集(大於1TB)的並行運算,它將複雜的、運行於大規模集羣上的並行計算過程高度地抽象到了兩個函數——Map和Reduce上,而且容許用戶在不瞭解分佈式系統底層細節的狀況下開發並行應用程序,並將其運行於廉價計算機集羣上,完成海量數據的處理。通俗地說,MapReduce的核心思想就是「分而治之」,它把輸入的數據集切分爲若干獨立的數據塊,分發給一個主節點管理下的各個分節點來共同並行完成;最後,經過整合各個節點的中間結果獲得最終結果。

  Hive:Hive是一個基於Hadoop的數據倉庫工具,能夠用於對Hadoop文件中數據集進行數據整理、特殊查詢和分析存儲。Hive學習門檻比較低,由於它提供了相似於關係數據庫SQL語言的查詢語句——Hive QL,能夠經過Hive QL語句快速實現簡單的MapReduce統計,Hive自身能夠將Hive QL語句轉換爲MapReduce任務進行運行,而沒必要開發專門的MapReduce應用,於是十分適合數據倉庫的統計分析。

  Pig:是一種數據流語言和運行環境,適合於使用Hadoop和MapRedeuce平臺來查詢大型半結構化數據集。雖然MapReduce應用程序的編寫不是十分複雜,但畢竟也是須要必定的開發經驗的。Pig的出現大大簡化了Hadoop常見的工做任務,它在MapReduce的基礎上建立了更簡單的過程語言抽象,爲Hadoop應用程序提供了一種更加接近結構化查詢語言(SQL)的接口。Pig是一個相對簡單的語言,它能夠執行語句,所以當咱們須要從大型數據集中搜索知足某個給定搜索條件的記錄時,採用Pig要比MapReduce具備明顯的優點,前者只須要編寫一個簡單的腳本在集羣中自動並行處理與分發,然後者則須要編寫一個單獨的MapReduce應用程序。

  Mahout:Mahout是Apache軟件基金會旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。

  Zookeeper:是針對谷歌Chubby的一個開源實現,是高效和可靠的協同工做系統,提供分佈式鎖之類的基本服務(如統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等),用於構建分佈式應用,減輕分佈式應用程序所承擔的協調任務,Zookeeper使用Java編寫,很容易編程接入,它使用了一個和文件樹結構類似的數據模型,可使用Java或者C來進行編程接入。

  Flume:是Cloudera提供的一個高可用、高可靠、分佈式的海量日誌採集、聚合和傳輸的系統。Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理並寫到各類數據接收方的能力。

  Sqoop:是SQL-to-Hadoop的縮寫,主要用來在Hadoop和關係數據庫之間交換數據,能夠改進數據的互操特性。經過Sqoop能夠方便地將數據從MySQL、Oracle、PostgreSQL等關係數據庫中導入Hadoop(能夠導入HDFS、HBase或Hive),或者將數據從Hadoop導出到關係數據庫,使得傳統關係數據庫和Hadoop之間的數據遷移變得很是方便。Sqoop主要經過JDBC和關係數據庫進行交互,理論上,支持JDBC的關係數據庫均可以使用Sqoop和Hadoop進行數據交互。Sqoop是專門爲大數據集設計的,支持增量更新,能夠將新紀錄添加到最近一次導出的數據源上,或者指定上次修改的時間戳。(寫到這裏忽然想起來面試的時候不知天高地厚非要和HR交流技術,HR問我將大規模數據從數據庫導出應該使用什麼技術,傻傻地回答JDBC。

  Ambari:Apache Ambari是一種基於Web的工具,支持Apache Hadoop集羣的安裝、部署、配置和管理。Ambari目前已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoop等。

相關文章
相關標籤/搜索