天天看點

好程式員大資料教育訓練分享Apache-Hadoop簡介

  好程式員大資料教育訓練分享Apache-Hadoop簡介,一、Hadoop出現的原因:現在的我們,生活在資料大爆炸的年代。國際資料公司已經預測在2020年,全球的資料總量将達到44ZB,經過機關換算後,至少在440億TB以上,也就是說,全球每人一塊1TB的硬碟都存儲不下。

一些資料集的大小更遠遠超過了1TB,也就是說,資料的存儲是一個要解決的問題。同時,硬碟技術也面臨一個技術瓶頸,就是硬碟的傳輸速度(讀資料的速度)的提升遠遠低于硬碟容量的提升。我們看下面這個表格:

好程式員大資料教育訓練分享Apache-Hadoop簡介

硬碟瓶頸比較

可以看到,容量提升了将近1000倍,而傳輸速度才提升了20倍,讀完一個硬碟的所需要的時間相對來說,更長更久了(已經違反了資料價值的即時性)。讀資料都花了這麼長時間,更不用說寫資料了。

對于如何提高讀取資料的效率,我們已經想到解決的方法了,那就是将一個資料集存儲到多個硬碟裡,然後并行讀取。比如1T的資料,我們平均100份存儲到100個1TB硬碟上,同時讀取,那麼讀取完整個資料集的時間用不上兩分鐘。至于硬碟剩下的99%的容量,我們可以用來存儲其他的資料集,這樣就不會産生浪費。解決讀取效率問題的同時,我們也解決了大資料的存儲問題。

但是,我們同時對多個硬碟進行讀/寫操作時,又有了新的問題需要解決:

1、硬體故障問題。一旦使用多個硬體,相對來說,個别硬體産生故障的幾率就高,為了避免資料丢失,最常見的做法就是複制(replication):檔案系統儲存資料的多個複本,一旦發生故障,就可以使用另外的複本。

2、讀取資料的正确性問題。大資料時代的一個分析任務,就需要結合大部分資料來共同完成分析,是以從一個硬碟上讀取的資料要與從其他99個硬碟上讀取的資料結合起來使用。那麼,在讀取過程中,如何保證資料的正确性,就是一個很大的挑戰。

有人會想,既然使用了多個硬碟,為什麼不用配有多個硬碟的關系型資料庫來進行資料的存儲和分析呢?其實,這個主要取決于硬碟發展的一個技術限制,那就是需要尋址操作。我們從關系型資料庫中讀取資料包含着大量的尋址操作,那麼尋址所産生的時間開銷必然會大大的增加,再加上讀取資料的時間,就更加漫長了。還有一個原因,關系型資料庫不适合存儲半結構化和非結構化的資料,而這個時代,半結構化和非結構化的資料占90%,而結構化資料隻占10%。

針對于上述幾個問題,Hadoop為我們提供了一個可靠的且可擴充的存儲和分析平台,此外,由于Hadoop運作在商用硬體上且是開源的,是以Hadoop的使用成本是比較低了,在使用者的承受範圍内。

二、Hadoop的簡介

Hadoop是Apache基金會旗下的一個開源的分布式計算平台,是基于Java語言開發的,有很好的跨平台特性,并且可以部署在廉價的計算機叢集中。使用者無需了解分布式底層細節,就可以開發分布式程式,充分利用叢集的威力進行高速運算和存儲。

最初,Hadoop的核心技術是HDFS和MapReduce。

HDFS是Hadoop分布式檔案系統(Hadoop Distributed File System)的簡稱,它具有較高的讀寫速度,很好的容錯性和可伸縮性,為海量的資料提供了分布式存儲,其備援資料存儲的方式很好的保證了資料的安全性。

MapReduce是一種用于并行處理大資料集的軟體架構(程式設計模型)。使用者可在無需了解底層細節的情況下,編寫MapReduce程式進行分析和處理分布式檔案系統上的資料,MapReduce保證了分析和處理資料的高效性。

因其在分布式環境下提供了高效的,海量的資料的優秀處理能力,Hadoop被公認為大資料行業中的标準開源軟體。幾乎所有主流的廠商如谷歌,雅虎,微軟,淘寶等等這樣的大公司都是圍繞Hadoop進行提供開發工具,開源軟體,商業化工具或技術服務的。

在Hadoop2.0以後,又引入了另一個核心技術:YARN(Yet Another Resource Negotiator)。它是一個任務排程和叢集資源管理系統,主要有兩類長期運作的守護線程來提供自己的核心服務:一類是用于管理叢集上資源使用的資料總管(Resouce Manager),另一類是運作在叢集中各個節點上且能夠啟動和監控容器(container)的節點管理器(Node Manager)。

發展到現在的Hadoop3.x可以概括成以下五個子產品:

Hadoop Common:由原來的Hadoop core更名而來。以前的版本中core包含HDFS、MapReduce及其其他公共部分。後來HDFS和MapReuce被分離出來作為獨立的子項目,剩下的公共部分更名為Common。主要包括系統配置工具Configuration、遠端過程調用RPC、序列化機制和Hadoop抽象檔案系統FileSystem等。它們為在通用硬體上搭建雲計算環境提供基本的服務,并為運作在該平台上的軟體開發提供了所需的API。

Hadoop HDFS:Hadoop的核心技術之一,分布式檔案系統

Hadoop YARN:Hadoop2.0以後新增的一個核心技術,資源管理系統

Hadoop MapReduce:Hadoop的核心技術之一,程式設計模型,用于大規模資料集的并行計算。

Hadoop Ozone:HDFS的一個擴充方向,對象存儲技術。

關于Hadoop這個名字的由來,該項目的建立者Doug Cutting是這樣解釋的:“這個名字是我孩子給一個棕黃色的大象玩具命名的。我的命名标準就是簡短,容易發音和拼寫,沒有太多的意義,并且不會被用于别處。小孩子恰恰是這方面的高手。”

Hadoop的發音是 [hædu:p]。

三、Apache Hadoop發展史

Hadoop由知名項目Apache Lucene的創始人道格·卡丁(doug Cutting)建立。

它起源于Apache Nutch 項目(一個網頁爬取工具和搜尋引擎系統,後來遇到大資料量的網頁存儲問題)。

2003年,谷歌發表的一篇論文(描述的是“谷歌分布式檔案系統”,簡稱GFS)給了Apache Nutch項目的開發者靈感。

2004年,Nutch的開發者開始着手 NDFS(Nutch的分布式檔案系統)。

2004年 ,谷歌又發表了一篇介紹MapReduce系統的論文。

2005年,Nutch項目實作了一個MapReduce系統

2006年,開發人員将NDFS和MapReduce移出Nutch項目形成一個子項目,命名Hadoop

2008年,Hadoop已稱為Apache的頂級項目。

2008年4月,Hadoop打破世界記錄,成為最快排序1TB資料的系統,排序時間為209秒

2009年,Hadoop把1TB資料的排序時間縮短到62秒。

從此名聲大噪,現在很多公司都在使用,如雅虎,last.fm,FaceBook,《紐約時報》等等

目前Hadoop的版本發展,hadoop1.x > hadoop2.x > hadoop3.x

四、Hadoop的特點

Hadoop因為是基于Java語言開發的,是以最理想的運作平台就是Linux系統了。它也支援多種程式設計語言,如C++,PHP等等。

也可以總結出以下優點:

高可靠型。Hadoop按位存儲和處理資料的能力值得人們信賴。

高效性。Hadoop能夠在節點之間動态地移動資料,并保證各個節點的動态平衡,是以處理速度非常快,可以處理PB級資料。

高可擴充性。Hadoop的設計目标是可以高效的穩定的運作在廉價的計算機叢集上,可以擴充到數以千計的計算機節點。

高容錯性。采用備援資料存儲方式,自動儲存資料的多個複本,并且能夠自動将失敗的任務進行重新配置設定

成本低。Hadoop采用廉價的計算機叢集,成本比較低,普通使用者也可以使用自己的電腦來搭建Hadoop環境