1. 程式人生 > >大資料和Hadoop平臺介紹

大資料和Hadoop平臺介紹

# 大資料和Hadoop平臺介紹 ## 定義 大資料是指其大小和複雜性無法通過現有常用的工具軟體,以合理的成本,在可接受的時限內對其進行捕獲、管理和處理的資料集。這些困難包括資料的收入、儲存、搜尋、共享、分析和視覺化。大資料要滿足三個基本特徵(3V),資料量(volume)、資料多樣性(variety)和高速(velocity)。資料量指大資料要處理的資料量一般達到TB甚至PB級別。資料多樣性指處理的資料包括結構化資料、非結構化資料(視訊、音訊、網頁)和半結構化資料(xml、html)。高速指大資料必須能夠快速流入並且能得到快速處理。 ## 大資料發展背景 資料爆炸。伴隨資訊科技的應用,全球資料量呈幾何級數增長。過去幾年間的資料總量超過了人類歷史上的資料總和。晶片、攝像頭、各自感測器遍佈世界各個角落,原本不能被感知的事物都可以被監測。軟硬體技術的不斷進步,也為處理大資料創造的條件。 ## 大資料的應用領域 - 在公共領域,跨部門提供大資料服務,能大幅減少檢索和處理時間。提高公共服務的效率。 - 企業通過收集產品在使用中產生的海量資料,進行分析,可以改善產品效能。 - 大資料能幫助企業對使用者進行更加細化的區分,並針對使用者的不同需求提供個性化的服務。這是營銷和危機管理常用的辦法。 - 利用自動化演算法支援或替代人工決策。對大資料的分析能極大改善決策效果,降低風險,並挖掘出其他方法無法發現的寶貴資訊。 - 商業模式、產品與服務創新。Netflix根據大資料分析結果,製作《紙牌屋》。 ## 大資料研究課題 1. 資料獲取問題。包括哪些資料需要儲存,哪些資料需要丟棄,如何可靠的儲存我們需要的資料。 2. 資料結構問題。微博部落格是沒有結構的資料,影象和視訊在儲存和顯示方面具有結構,但是無法包含語義資訊進行檢索。如果將沒有語義的內容轉換為結構化的格式,並進行後續處理,是需要面對的另一項挑戰。 3. 資料整合問題。不同來源資料之間進行關聯,才能充分發揮資料的作用。 4. 資料分析、組織、抽取和建模 5. 如何呈現分析結果 ## 科技公司大資料產品 - 谷歌:MapReduce - IBM:InfoSphere大資料分析平臺 - SAS:高效能分析伺服器和SAS DataFlux資料流處理引擎 - EMC:Greenplum 支援海量並行處理 - Teradata:Aster Data 基於MapReduce,提供了多種統計軟體包 ## 大資料發展趨勢 - 資料資源化。大資料成為企業和社會關注的重要戰略資源,並已經成為大家爭相搶奪的焦點。 - 與雲端計算深度結合。大資料離不開雲處理,雲處理為大資料提供彈性可拓展的基礎服務。 - 帶動科學理論的突破。帶動資料探勘、機器學習、人工智慧和資料科學等相關技術的發展。 ## 大資料處理一般步驟 1. 資料的收集。 第一個方式是抓取或者爬取。例如搜尋引擎就是這麼做的:它把網上的所有的資訊都下 載到它的資料中心,然後你一搜才能搜出來。 第二個方式是推送,有很多終端可以幫我收集資料。比如說小米手環,可以將你每天跑 步的資料,心跳的資料,睡眠的資料都上傳到資料中心裡面。 2. 資料的傳輸 一般會通過佇列方式進行,因為資料量實在是太大了,資料必須經過處理才會有用。可系統處理不過來,只好排好隊,慢慢處理。 3. 資料的儲存 儲存要確保安全,不易丟失,高容錯性。 4. 資料的處理和分析 儲存的資料是原始資料,原始資料多是雜亂無章的,有很多垃圾資料在裡面,因而需要清洗和過濾,得到一些高質量的資料。對於高質量的資料,就可以進行分析,從而對資料進行分類,或者發現數據之間的相互關係,得到知識。 5. 資料的檢索和挖掘 使想要的資訊容易被搜尋到。挖掘資訊之間的相互關係。 ## 開源框架 因為大資料的這些特點,針對其收集、傳輸、儲存、處理分析和檢索使用產生了許多開源框架。 |功能|框架| |--|--| |檔案儲存|Hadoop HDFS、Tachyon、KFS| |離線計算|Hadoop MapReduce、Spark| |流式、實時計算|Storm、Spark Streaming、S4、Heron| |K-V、NOSQL資料庫|HBase、Redis、MongoDB| |資源管理|YARN、Mesos| |日誌收集|Flume、Scribe、Logstash、Kibana| |訊息系統|Kafka、StormMQ、ZeroMQ、RabbitMQ| |查詢分析|Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid| |分散式協調服務|Zookeeper| |叢集管理與監控|Ambari、Ganglia、Nagios、Cloudera Manager| |資料探勘、機器學習|Mahout、Spark MLLib| |資料同步|Sqoop| |任務排程|Oozie| 一般大資料平臺的框架如下圖 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-27/1603809117250-1.jpg) Hadoop HDFS和Hadoop MapReduce作為大資料儲存和處理的開山鼻祖,大資料平臺上都處於核心位置。下面介紹一下兩個框架的基本原理。 ## Hadoop HDFS基本原理 HDFS全稱Hadoop Distributed File System。HDFS是一個分散式檔案系統,可以部署在一個伺服器叢集上。Java語言開發,可以部署在任何支撐java的機器上。 HDFS有幾個基本概念NameNode、DataNode和block。 NameNode負責整個分散式檔案系統的元資料管理,也就是檔案路徑名,資料block的ID以及儲存位置等資訊。還要記錄一些事情,比如哪些節點是叢集的一部分,某個block有幾份副本等。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603884735580-2.jpg) DataNode是實際儲存檔案資料的節點。DataNode會通過心跳和NameNode保持通訊,如果DataNode超時未傳送心跳,NameNode就會認為這個DataNode已經失效,立即查詢這個DataNode上儲存的block有哪些,以及這些block還儲存在哪些伺服器上,隨後通知這些伺服器再複製一份block到其他伺服器上,保證HDFS儲存的block備份數符合使用者設定的數目,即使再有伺服器宕機,也不會丟失資料。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603884786323-3.jpg) Block是HDFS中的儲存單元,檔案被寫入HDFS時,會被切分成多個block塊,預設的塊大小是128MB,每個資料塊預設會有三個副本。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603884831471-4.jpg) 資料寫入:首先將檔案分成多個block,每個block會被寫入三個DataNode中,寫入哪三個DataNode中是由NameNode指定的,寫入完成,NameNode會記錄這些資訊。同一個檔案中不同的block可能會被寫入完全不同的DataNode中。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603884875872-5.jpg) 資料讀取:資料讀取時按block讀取。每一個block時,會從NameNode獲取資訊,知道從哪個DataNode中讀取,一般是就近原則。所有該檔案的block讀取完成,構成完整的檔案。 客戶端和Datanode是同一個機器:距離為0 ,表示最近 客戶端和Datanode是同一個機架的不同機器 :距離為2 ,稍微遠一點 客戶端和Datanode位於同一個資料中心的不同機架上 :距離為4,更遠一點 ## Hadoop MapReduce基本原理 Hadoop MapReduce是一個分散式計算框架,其中的運算都可以在多個機器上並行進行。使用者只需要完成運算本身的編碼,不需要關心平行計算的底層細節。 MapReduce背後的思想很簡單,就是把一些資料通過Map來歸類,通過Reduce來把同一類的資料進行處理。Map和reduce的過程都是利用叢集的計算能力並行執行的。計算模型的核心是Map和Reduce函式,兩個函式由使用者自行實現。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603884989639-6.jpg) 把原始大資料集切割成小資料集時,通常小資料集小於等於HDFS的一個block的大小,這樣一個小資料集位於一個物理機上,便於本地計算。Map和reduce各自的啟動任務數量可以由使用者指定。 ![](https://gitee.com/xllntl/picture/raw/master/2020-10-28/1603885148513-7.jpg) 上圖表示一個MapReduce統計單詞出現次數的過程,原始資料分割為4個子檔案,對每個子檔案按照使用者的Map函式會產生<單詞, 出現次