大資料以及Hadoop相關概念介紹

luashin發表於2016-01-09

一、大資料的基本概念

1.1、什麼是大資料

  大資料指的就是要處理的資料是TB級別以上的資料。大資料是以TB級別起步的。在計算機當中,存放到硬碟上面的檔案都會佔用一定的儲存空間,例如:

  

  檔案佔用的儲存空間代表的就是該檔案的大小,在計算機當中,檔案的大小可以採用以下單位來表示,各個單位之間的轉換關係如下:

  

  平時我們在我們自己的電腦上面常見的就是Byte、KB、MB、GB這幾種,那麼究竟什麼是大資料呢,大資料的起步是以TB級別開始的,1TB=1024GB,而我們處理的資料可能會到達PB級別,1PB=1024TB,那可想而知,資料量是多麼龐大,所以大資料指的就是要處理的資料是TB級別以上的資料。而對於這些TB級別以上的資料,一般情況下,一臺計算機的硬碟儲存空間是無法儲存那麼大的資料,我們現在的普通電腦一般都是一塊硬碟,而硬碟容量一般都是500GB左右,有的是1TB,假設現在有1PB的資料要儲存,我們給每一臺計算機配置10塊硬碟,每一塊硬碟都是1T的儲存容量,那麼也得要使用100多臺電腦才能夠儲存得下1PB的資料。所以說,當我們的資料規模達到一定的程度的時候,我們以往的一些問題的解決辦法在這種場景下已經變得不適用了。

1.2、大資料的特徵

  

  大資料,顧名思義,第一個特徵就是資料量大,需要非常大的儲存空間進行儲存,而如果要處理這些海量的資料,那麼計算量可想而知,所以計算量非常龐大。而這些資料的來源往往也是多樣化的,資料的格式也是多樣化的,在我們平時的應用系統開發中,我們要處理的資料來源大多數是儲存在資料庫中的資料又或者是儲存在檔案當中,而在大資料時代,我們一個系統要處理的資料來源是多種多樣的,這些資料的來源可能是來自資料庫,也可能是來自一些監控採集資料,或者是一些科研資料,而資料的格式可能有普通文字,圖片、影片、音訊、結構化的,非結構化的等等,反正什麼樣的資料都有。在大資料時代,資料的增長速度是非常快的,例如我們每天打電話,發簡訊,我們打出去的電話和發出去的簡訊在移動和聯通公司都會有相應的記錄,而這樣的資料每天都會產生幾億條,資料量的增長速度可想而知,因此要求處理資料的應用系統的處理速度也要快,當我們想展示一些資料給使用者看時,如果應用系統的處理速度不夠快,那麼給使用者的體驗是非常差的。另外,在大資料領域,我們從海里資料中能夠提取到的相對有價值的資料也是非常有限的,我們處理幾十個T的資料,從這些資料當中能夠提取出來的有價值的資訊也是非常少的,大資料分析要想得到一些有價值的結果,那麼要求資料要比較全。比如,我們想分析一個使用者的購物習慣,她平時喜歡在京東和天貓、淘寶這些電子商務網站上面進行購物,我們分析她在京東商城上面的購物行為時,我們不光要分析她最近一次的購買行為,還要分析她很長一段時間內的歷史購買行為,以及在其他電商網站的購買行為,如果我們真的想一體地分析使用者的生活習慣,那麼不光是要分析她的購物行為,還要分析她的社交行為,比如在一些社交網站上面平時和哪些人聯絡最多,平時喜歡討論一些什麼話題,從事的職業,年齡,性別等,拿到的資料越全,我們分析的結果就會越準確,所以大資料不光是要求資料量要大,更重要要的是資料要全面,要多維度的,這樣我們提取到的資料才是比較有價值,比較準確的。大資料處理領域在價值這一塊是稀疏型的,從海量資料當中能夠提取到的有價值的資料是非常稀少的。

1.3、存在有大資料的行業

  放眼觀世界,現在各行各業每天都會產生大量的資料,21世紀是一個網際網路時代,一個資訊化的時代,我們這一代人都不可避免地在一些IT系統當中留下我們的腳印,存在有大資料的典型的行業有以下幾個行業:

  

  網際網路企業是最早收集大資料的行業,最典型的代表就是Google和百度,這兩個公司是做搜尋引擎的,數量都非常龐大,每天都要去把網際網路上的各種各樣的網頁資訊抓取下來儲存到本地,然後進行分析,處理,當使用者想透過搜尋引擎搜尋一些他們關心的資訊時,Google和百度就從海量的資料當中提取出相對於對使用者而言是有用的資訊,然後將提取到的結果反饋給使用者,據說Google儲存的資料量已經到達了上百個PB,這個資料量是非常驚人的。類似於Fackbook這樣的SNS(社交網站)因為使用者量比較多,使用者每天在網站上面分享一些文章,圖片,影片,音訊等資訊,因此每天產生的資料量也是非常龐大的。

二、大資料技術要解決的技術難題

2.1、海量資料如何儲存?

  海量資料的儲存問題也不是今天才有的,很早以前就出現了,一些行業或者部門因為歷史的積累,資料量也達到了一定的級別,當一臺電腦無法儲存這麼龐大的資料時,採用的解決方案是使用NFS(網路檔案系統)將資料分開儲存,NFS系統的架構如下圖所示:

  

  NFS這種解決方案就是同時架設多臺檔案伺服器,如下圖所示:

  

  然後在檔案伺服器上面設定共享目錄,例如圖中顯示的【D:\software、E:\aa\bb、F:\dd\cc、E:\images】

  

  這樣我們就可以把檔案分類存放到各個檔案伺服器上面的共享目錄當中,一臺電腦的儲存空間不夠用,那麼我們就將資料分散到多臺電腦進行儲存,而這些檔案伺服器上面的共享目錄對於使用者來說是透明的,使用者會以為自己存放資料的【Software、Tools、film、music】這些目錄都是屬於【Itdc.com.local】這臺檔案伺服器裡面的【public】目錄下的子目錄,在NFS系統中,【Itdc.com.local】這臺檔案伺服器只是起到一箇中轉站作用,將使用者需要存放的海量資料分類存放到各個檔案系統當中,這就解決了大資料的儲存問題了。當使用者需要訪問分散在各個檔案伺服器中的檔案資源時,它只需要訪問【Itdc.com.local】這臺檔案伺服器就可以了。

  NFS雖然是解決了海量資料的儲存問題,但是在大資料背景下,這種儲存方案是不適用的,大資料不光是要解決資料儲存問題,更重要的是海量資料的分析,而NFS在海量資料分析方面不能夠充分利用多臺計算機同時進行分析。

2.2、海量資料如何計算

  一個實際的需求場景——日誌分析

  對日誌中每一個使用者的流量進行彙總就和,如下圖所示:

  

  對於這樣的一個日誌檔案,如果只有這麼幾行資料,我們一般會採用這樣的處理方式:
    1、讀取一行日誌
    2、抽取手機號和流量欄位
    3、累加到HashMap中
    4、遍歷輸出結果

  那麼問題來了,如果資料量變得很大呢,比如一個日誌檔案裡面有幾個GB資料,

  1. 如果仍然一行一行去讀,那麼就會因為磁碟的IO瓶頸導致效率太低,速度太慢。
  2. 如果一次性載入到記憶體,那麼就會因為單臺計算機的記憶體空間有限而導致記憶體溢位。
  3. 如果將中間結果全部快取到HashMap中,那麼也會因為單臺計算機的記憶體空間有限而導致記憶體溢位。
  4. 可以選擇採用多執行緒處理,但是依然無法改變資源瓶頸的現實,因為一臺計算器的CPU資源,記憶體資源,磁碟IO瓶頸是定,建立再多的執行緒也無法改變這個現實。

  所以當一個日誌檔案裡面儲存了幾個GB資料,那麼這種情況下就不能採用這種傳統的處理方式了。可以看到,在大資料背景下,我們一個簡單的業務場景,比如這裡的統計使用者流量,在資料量變得很大的時候,原來不是問題的一些東西現在都成了問題。那麼這些問題該如何解決呢?

解決思路一

  縱向擴充套件,也就是升級硬體,提高單機效能(增加記憶體,增強CPU、用更高效能的磁碟(如固態硬碟)),比如可以購買IBM的高階伺服器。

  

  優點:

    1、簡單易行
  缺點:

    1、單臺計算機的擴充套件空間有限,CPU、記憶體、磁碟再怎麼擴充套件也是有限的,無法無限擴充套件。

    2、成本高(高階伺服器非常昂貴,幾百萬甚至上千萬一臺,一般的小公司承受不起這樣高昂的成本)

解決思路二


  橫向擴充套件,用多臺節點分散式叢集處理 (透過增加節點數量提高處理能力,這裡說的節點指的就是一臺計算機)

  

  核心思想:任務分攤,透過協作來實現單節點無法實現的任務。

  優點:

    1、成本相對低(可採用普通機器)

    2、易於線性擴充套件

  缺點:

    系統複雜度增加,我們要將我們的web應用部署到每一個節點上面,而多個節點協同工作時就要考慮以下幾個問題
      1、如何排程資源
      2、任務如何監控
      3、中間結果如何排程
      4、系統如何容錯
      5、如何實現眾多節點間的協調

    分散式計算的複雜性就體現在這樣的5個問題裡面。

三、Hadoop相關概念介紹

 3.1、大資料行業的標準——Hadoop

  Hadoop是一個開源的可執行於大規模叢集上的分散式檔案系統和執行處理基礎框架
  Hadoop擅長於在廉價機器搭建的叢集上進行海量資料(結構化與非結構化)的儲存與離線處理。

  Hadoop就是一門用來處理大資料的技術,就是用來解決上述提到的分散式計算裡面的5個技術難題的。

3.2、Hadoop的Logo圖片

  

3.3、Hadoop的由來

  

3.4、Hadoop的核心元件

3.4.1、海量儲存——HDFS(Hadoop分散式檔案系統,Hadoop Distributed File System)

  • 分散式易擴充套件
  • 廉價易得
  • 高吞吐量
  • 高可靠性

3.4.2、分散式平行計算——資源排程(Yarn)+程式設計模型(MapReduce)

  • 大容量高併發
  • 封裝分散式實現細節
  • 大大提高分析效率

3.5、Hadoop的學習路線

  1. Linux系統基本操作能力
  2. java開發語言
  3. Hadoop核心元件
  4. MapReduce或Spark等程式設計模型
  5. Zookeeper-Sqoop-Flume等工具元件
  6. NoSQL技術,Hbase
  7. 資料分析挖掘、機器學習、Mahout

3.6、學習Hadoop技術的書籍推薦

  1、Hadoop權威指南第三版
  2、Hadoop技術內幕

  3、Hadoop實戰

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-1974352/,如需轉載,請註明出處,否則將追究法律責任。

相關文章