1. 程式人生 > >大資料之路_2

大資料之路_2

1.大資料框架與平臺
工作:處理資料
磁碟檔案中的資料
網路中的資料流或資料包
資料庫中的結構化資料

1.大資料工作
處理資料

資料結構:
    磁碟檔案中的資料
    網路中的資料流或資料包
    資料庫中的結構化資料

2.資料規模
TB
PB
3.分散式環境中處理大資料
(1)分散式環境,多臺計算機共同承擔計算任務
(2)儲存系統
(3)計算任務的分配
(4)計算負荷的分配
(5)計算機之間的資料遷移
(6)計算機或網路發生故障時的資料安全

4.例項
問題:從銷售記錄中統計各種商品銷售額
解決方案:
(1)單機:
掃描所有資訊記錄,對銷售額累加
如果存在關係資料庫中,一個SQL語句就好了
(2)加入:很多的銷售記錄
需要設計出由多型計算機來統計銷售額的方案,

     為了保證計算的正確、可靠、高效及方便,需要考慮下列問題:
     (1)如何為每臺計算機分配任務,是先按商品種類對銷售記錄進行分組,不同機器處理不同商品種類的記錄
                    隨機向每臺機器傳送一部分銷售記錄進行統計,最後將各機器統計的結果,按照商品種類合併。
         (2)那排序的時候,如何排序,用哪種排序演算法?在哪臺機器上執行排序過程?
        每臺機器處理的資料,從哪裡來,到哪裡去?資料是主動傳送,還是接收方申請傳送?
        如果是主動傳送,接收方處理不過來怎麼辦?
        如果是申請傳送,傳送方應該儲存多久資料。
     (3)會不會任務分配不均,有的機器很快處理完了,有的機器,一直在忙?甚至,閒的機器需要等著忙的機器處理完成後才能開始執行。
     如果增加一臺機器,能不能減輕其他機器的負荷,從而縮短任務執行時間。
     如果一臺機器掛了,它沒有完成的任務,應該交給誰,會不會遺漏統計或者重複統計。
     統計過程中,機器之間如何協調,是否需要專門的一臺機器指揮排程其他機器?如果這臺機器掛了呢。
     (4)如果銷售記錄,還在源源不斷的增加,統計還沒有執行完,新紀錄又來了,如何保證統計結果的準備性?能不能保證結果是實時更新的》?再次統計能不能避免大量
     重複計算。
     (5)能不能讓使用者執行一句SQL就可以得到結果

     上述問題,除了第一個,其他的分散式計算也會遇到,而且解決起來也相當棘手,即是第一個的分組,統計,在很多資料處理場合,也會遇到,只是,體現方式不同。如果把這些問題
     能封裝到一個計算框架中,可以大大簡化,這類應用程式的開發。


     2004年,Google先後發表了三篇我呢論來介紹分散式GFS,平行計算模型MapReduce ,非關係資料儲存系統BigTable .第一次提出了針對大資料分散式處理的可重用方案/
     Hadoop .數十種,應用於分散式環境的大資料計算框架。
     如果不涉及,第8,9 個問題,(統計過程中,有新的記錄過來,保證統計的實時性)屬於批處理。

5.大資料框架
批處理
批處理框架重點關心資料處理的吞吐量,又可分為非迭代式和迭代式兩類。
迭代式包括DAG(有向無環圖)。圖計算等模型。
流處理
針對第8個問題提出的對應方案,分兩種情況:
如果重點關注是實時性,屬於流計算框架
如果側重避免重複計算:屬於增量計算框架。
如果是第9個問題(保證實時性,同時避免重複計算) 資料互動式分析框架。
下面討論 批處理、流處理、互動式分析的三種類別的框架,要介紹大資料框架的一些發展趨勢。

大資料框架
    批處理
        Map/Reduce Hadoop
        DAG Dryad. Tez,Spark,Fink DataSet API
            圖計算 Pregel Giraph Hama PowerGraph
    流處理
        實時  MillWheel,S4,Storm,Samaz ,Heron,Grepump ,Flink ,Apex
        小批量 Storm Trident , Spark Streaming .
    互動式分析
        Dremel ,Hive ,Presto ,Implala ,Stinger,Tajo
    增量計算
        Percolator,Kineograph,Galaxy 

(1) Hadoop
最初,Hadoop= HDFS+MapReduce .是從Nuth中獨立出來的專案。
在2.0 中,把資源管理和任務排程功能,從MapReduce 中剝離,形成YARN .
使其他框架也可以像MapReduce那樣,執行在Hadoop上。
與之前的分散式計算框架相比,Hadoop隱藏了很多繁瑣的細節,如容錯,負載均衡等,便於使用。

Hadoop 有很強的橫向擴充套件能裡,很容易把新的計算機,加入到計算機叢集中參與計算。
在開源社群支援下,Hadoop不斷完善,集成了如,非關係資料庫HBase,資料倉庫Hive,資料處理工具Sqoop,機器學習演算法Mahout .
一致性服務軟體Zookeeper .管理工具Ambari等,形成了相對完整的生態圈和分散式計算事實上的標準。
Hadoop = HDFS+MapReduce+ HBase+ Hive + Sqoop + Mahout +Zookeeper+  Ambari (管理工具)等。

引用程式主要負責設計map 和 reduce任務,其他工作遊框架負責。在定義map任務輸出資料的方式時,鍵的選擇至關重要,也決定資料如何分組,
排序,傳輸,以及執行reduce任務的計算機如何分工。
可選擇商品種類為鍵。MapReduce執行商品銷售統計的過程如下:
(1)把銷售記錄分片,分配給多臺機器
(2)每條銷售記錄,被解析成鍵值對,其中值為銷售記錄的內容,鍵可忽略
(3)MapReduce 把map任務生成的資料按商品種類排序
(4)待所有節點,都完成排序後,MapReduce啟動reduce任務,每個商品種類對應一個reduce任務。
(5)執行reduce任務的程序通過網路獲取指定商品種類的歌詞銷售額。
(6)MapReduce把同一種商品下的各種銷售額合併到表中
(7)執行reduce任務,累加各次銷售額,得到該種商品的總銷售額。