日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop随笔(一)

發布時間:2023/12/9 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop随笔(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 大數據概述
    • 1.1 什么是大數據
    • 1.2 大數據技術背后的核心思想
      • 1.2.1 把數據分發到多個節點
      • 1.2.2 把計算邏輯移到數據附近
      • 1.2.3 計算節點進行本地數據處理
      • 1.2.4 優選順序讀,次之隨機讀
      • 1.2.5 例子
    • 1.3 大數據的編程模型
      • 1.3.1 大規模并行處理數據庫系統
      • 1.3.2 內存數據庫系統
      • 1.3.3 MapReduce系統
      • 1.3.4 整體同步并行系統
    • 1.4 大數據和事務性系統
    • 1.5 我們能處理多大的數據

1 大數據概述

由于數據處理增長的速度已經快于計算資源處理能力的提升速度,為了解決這種矛盾,數據的并行處理出現了。Hadoop就是利用互聯網的多臺計算機使用MapReduce(采用SIMD)來并行地處理大量數據。

1.1 什么是大數據

現代社會是一個高速發展的社會,而大數據就是這個高科技社會的產物。對于大數據來說,麥肯錫全球研究所給出的定義是,一種規模大道在獲取、管理、分析方面大大超出傳統數據庫軟件工具能力范圍的數據集合,具有海量的數據規模、快速的數據流轉、多樣的數據類型和價值密度低四大特征。

正如前面所說,大數據迫切地需要一些特殊的技術來有效地應對數據的增長,而大規模并行處理數據庫、數據挖掘、分布式文件系統、分布式數據庫、云計算平臺、互聯網和可擴展的存儲系統等就是我們手中處理這群數據的工具。

整體來看,目前國內大數據應用尚處于從熱點行業領域向傳統領域滲透的階段。也就是說,小公司產生的數據不高,而且對于原始數據的處理能力不強,而需要大數據技術的往往都是一些比較大的公司。目前大數據的典型應用由以下幾個方面:

運營商業務

運營商掌握體量巨大的數據資源,可以提升洞察力,借助大數據分析運營的內在問題,改善服務水平,為客戶提供更好地體驗,獲得更多的客戶以及更高的業務增長。

金融業務

金融行業是信息產業之外大數據的又一重要應用領域,大數據在金融的銀行、保險和證券三大業務中都有著廣泛的應用前景。

政府業務

大數據政府應用不僅在世界各國政府日益重視,我國政府也非常重視大數據的應用。

還有其他繁多的領域,這里就不做過多介紹了。如有興趣,可以參考教材大數據Hadoop 3.X分布式處理實戰。

1.2 大數據技術背后的核心思想

我們的核心問題是:雖然通過并行可以很快地處理數據;但是從持久性的存儲設備中讀取的速度受到限制。這也說明了我們如果要對大數據進行處理,那么是I/O并行化是必不可少的。

1.2.1 把數據分發到多個節點

我們首先要做的是,把一個大數據分布到多個計算節點,這些計算節點可以是電腦可以是服務器,這么做是有以下好處的:

  • 每個數據塊會在多個節點上有多份拷貝(Hadoop默認是一個數據塊有3份拷貝),這使得系統具備容錯性,每一個節點發生故障,其他節點還備份有故障節點上的數據。
  • 多個節點可以同時參與數據處理過程。這樣的話能夠使處理效率翻倍。

1.2.2 把計算邏輯移到數據附近

對于熟悉JavaEE的人來說,MVC架構是最常見的一種。從大數據的概念來看,應該要把數據分布在各個計算節點后,對應的程序也應該分布在各個節點,可是這樣做不易維護;對此,我們應該要有一個系統,其能夠讓我們集中式地部署程序代碼,部署后啟動計算任務,最后程序才會移動到各個數據處理節點。

1.2.3 計算節點進行本地數據處理

所有的大數據編程模型都是基于分布式和并行處理的。但是由于網絡I/O比本地磁盤I/O慢了好幾個數量級,我們要做的最好是每個節點處理本地數據即可。在每個節點中,數據有了,程序有了,計算的條件也就完備了。

盡管想的很美,但這并不是每次都能剛好遇上這么巧的任務,恰好能夠讓本地的數據剛好能夠完成。所以對于大數據系統來說,其都會把計算任務盡量調度到離數據最近的節點。每個節點計算結果出來后,就會把所有的計算結構匯聚到一個計算節點。

1.2.4 優選順序讀,次之隨機讀

數據在磁盤的讀取過程是:磁盤頭首先要移到數據所在的磁盤位置(尋道),移到后將數據讀取出來,這個過程叫做數據的傳輸操作。對于熟悉計算機組成原理的同學來說,都知道讀寫磁盤最重要的就是減少磁頭臂的移動,盡量使數據的存放在同一個磁盤片上。

既然數據是散亂的,就意味著不能在磁盤中過濾數據,因為在磁盤上過濾就等于是磁盤頭一個一個數據確認是不是自己要的,然后不是自己要的就算過濾,這樣的話會花很多時間。

大多數的數據讀取密集型的大數據編程模型都利用了這個特征。數據被順序地從磁盤上讀出,然后在內存中過濾數據。而對于關系型數據庫管理系統模型來說,其往往是隨機讀寫數據為主。

1.2.5 例子

假設我們要計算2000年美國各州的總銷售量,并按州排序。銷售數據已經隨機分發到各個計算節點。按照大數據計算技術的計算步驟:

  • 每個計算節點應該讀取分發給自己的全部數據,然后過濾掉不是2000年的銷售數據。
  • 各個計算節點在處理數據的時候,每發現一個州,就要建立一個新分組,用于存放該州所有銷售數據。在處理的過程中,程序是位于各個計算節點的,對本地的數據做處理。
  • 當所有的節點都完成了本地所有數據的磁盤讀取工作,按照州編號分別計算其銷售總額,它們都會把所有的結果匯聚到匯聚節點上。
  • 這個指定的匯聚節點會把所有計算節點按照州的編號匯聚全部結果,把各個州的來自不同計算節點的數據分別相加。
  • 匯聚節點按照州的最終結果排序,并輸出排序結果。

1.3 大數據的編程模型

大數據編程模型主要有以下幾種類型:

  • 大規模并行處理數據庫系統
  • 內存數據庫系統
  • MapReduce系統
  • 整體同步并行系統

1.3.1 大規模并行處理數據庫系統

大規模并行處理(MMP)數據庫系統的核心思想是把數據按照某一列或者某一組列的值,按照某種形式進行劃分,以分別處理。但是這樣做的缺陷是,要用算法去劃分數據,還要劃分的合理,如果劃分不合理查詢不方便,為了得到計算結果需要通過網絡來實現數據交換。

為了解決這個缺陷,大規模并行處理數據庫系統經常采用把數據存儲多份,并且按照不同準則來劃分。比如你現在要查詢這個結果,結果這個結點數據劃分不合理,那我就換另外一個劃分準則劃分出來的數據。根據不同的查詢請求,選擇不同的數據集。

1.3.2 內存數據庫系統

從系統運行的角度來看,內存數據庫系統類似于MMP數據庫系統。根據1.2.5的例子,可以說出主要幾個要點特征:

數據按州劃分,每個節點把數據加載到內存中。

每個計算節點讀取本地數據。

由于數據是被緩存到內存的,所以除了最初的數據加載入內存的過程外,這里不適用順序讀取數據的特性。

1.3.3 MapReduce系統

MapReduce是我們要講的重點。其有如下的特征:

  • 使用商用級別的硬件。
  • 無需事先定義數據劃分準則來吧數據分配到各個計算節點,用戶僅需要定義兩個獨立的處理過程:Map和Reduce。

當Hadoop系統實現MapReduce時,數據常常按照64~128MB的數據塊大小進行分發,每個數據塊會被復制兩次,然后加載到Hadoop分布式文件系統。MapReduce程序啟動的時候,Hadoop系統會把程序運行依賴庫拷貝到各個計算節點。

各個計算節點按照調度執行Map任務,每個節點上的Mapper會根據輸入的記錄,輸出一條條包含鍵值對的數據記錄。然后Reducer會從每個Mapper的輸出中獲取鍵/值對,各個鍵會被發送到特定的Reducer進行處理,確保相同的鍵被相同的Reducer處理。每個Reducer把接收的鍵值對中的數值相加。輸出結果寫回HDFS中。客戶端再從HDFS讀取結果數據,對結果數據做最后處理。

經過上面的敘述,我們可以分析出MapReduce有以下的特征:

  • 數據以較大的數據塊的形式存放在HDFS上。HDFS是一個分布式文件系統,數據塊分散存儲到各個結點,數據庫是有冗余的。
  • 程序運行依賴庫,包括Map和Reduce代碼被復制發送到所有的任務節點。
  • 每個計算節點僅讀取節點本地數據,集群中所有節點運行Mapper,從節點本地讀取數據到Mapper中。
  • 數據被每個節點的任務以數據塊的方式一次性順序讀取。

1.3.4 整體同步并行系統

整體同步并行(BSP)系統的運行過程和MapReduce過程非常相似。我們在后面會細講,這里不過多講述。

1.4 大數據和事務性系統

在Hadoop中,通常使用HBase來作為自己的NoSQL數據存儲。

對于普通的RDBMS來說,遵守ACID準則是非常重要的,但是有時候也必須做出妥協,其理論依據就是CAP理論,即:

  • Consistency(一致性):在分布式系統中的所有數據備份,在同一時刻有同樣的值。
  • Availability(可用性):在合理且明確的時間內,保證每個請求都能獲得成功或者失敗的結果的響應。
  • Partition tolerance(分區容忍性):在集群中一部分節點故障后,集群整體仍然可以使用。

需要注意的是,分布式系統只能滿足上述三中其二。

對于一致性和可用性:遵守ACID準則的單機RDBMS是兼顧一致性和可用性的系統例子,但是其不滿足分區容忍性。

對于一致性和分區容忍性:一個RDBMS集群就是這樣的系統。分布式事務保證了所有用戶在同一時刻獲取到相同的數據,也可以保證某個節點宕機了還能使用其他節點。但是其是不滿足可用性的,因為在兩階段提交事務期間,系統是不可用的,這是為了保證系統的一致性。也就是說,一致性限制了可用性。

對于可用性和分區容忍性:本類別的系統常常被歸屬于最終一致性系統。為了系統可用性和分區容忍性犧牲了一致性。

對于分布式系統,對于上述三種選二如何折中是非常關鍵的。MapReduce只是Hadoop生態下的一個組件,其常常和其他的組件一起搭配使用。

1.5 我們能處理多大的數據

對于前面我們忽略了CPU的處理而討論了IO設備的問題,但是隨著現代科技計算量的提高,各種情況皆需考慮其中。如果是計算密集型的數據,我們可以采用增加節點數量來提高處理器性能。

我們還忽略了網絡I/O開銷,對于各個節點計算后傳入匯聚節點,其在網絡上傳輸的數據通信開銷也是非常大的。

總結

以上是生活随笔為你收集整理的Hadoop随笔(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。