天天看點

大資料技術之Hadoop(一)

一 大資料概論

1.1 大資料概念

  大資料(big data):指無法在一定時間範圍内用正常軟體工具進行捕捉、管理和處理的資料集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的資訊資産。

  主要解決,海量資料的存儲和海量資料的分析計算問題。

  按順序給出資料存儲機關:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

1Byte = 8bit   1K = 1024Byte   1MB = 1024K

1G = 1024M   1T = 1024G    1P = 1024T

1.2 大資料的特點

1、Volume(大量):

截至目前,人類生産的所有印刷材料的資料量是200PB,而曆史上全人類總共說過的話的資料量大約是5EB。目前,典型個人計算機硬碟的容量為TB量級,而一些大企業的資料量已經接近EB量級。

2、Velocity(高速):

這是大資料區分于傳統資料挖掘的最顯著特征。根據IDC的“數字宇宙”的報告,預計到2020年,全球資料使用量将達到35.2ZB。在如此海量的資料面前,處理資料的效率就是企業的生命。

天貓雙十一:2017年3分01秒,天貓交易額超過100億

3、Variety(多樣):

這種類型的多樣性也讓資料被分為結構化資料和非結構化資料。相對于以往便于存儲的以資料庫/文本為主的結構化資料,非結構化資料越來越多,包括網絡日志、音頻、視訊、圖檔、地理位置資訊等,這些多類型的資料對資料的處理能力提出了更高要求

4、Value(低價值密度):

價值密度的高低與資料總量的大小成反比。如何快速對有價值資料“提純”成為目前大資料背景下待解決的難題。

二 從 Hadoop 架構讨論大資料生态

2.1 Hadoop 是什麼

1)Hadoop 是一個由 Apache 基金會所開發的分布式系統基礎架構

2)主要解決,海量資料的存儲和海量資料的分析計算問題。

3)廣義上來說,HADOOP 通常是指一個更廣泛的概念——HADOOP 生态圈

2.2 Hadoop 發展曆史

1)Lucene–Doug Cutting 開創的開源軟體,用 java 書寫代碼,實作與 Google 類似的全文搜

索功能,它提供了全文檢索引擎的架構,包括完整的查詢引擎和索引引擎

2)2001 年年底成為 apache 基金會的一個子項目

3)對于大數量的場景,Lucene 面對與 Google 同樣的困難

4)學習和模仿 Google 解決這些問題的辦法 :微型版 Nutch

5)可以說 Google 是 hadoop 的思想之源(Google 在大資料方面的三篇論文)

  GFS —>HDFS

  Map-Reduce —>MR

  BigTable —>Hbase

6)2003-2004 年,Google 公開了部分 GFS 和 Mapreduce 思想的細節,以此為基礎 Doug Cutting 等人用了 2 年業餘時間實作了 DFS 和 Mapreduce 機制,使 Nutch 性能飙升

7)2005 年 Hadoop 作為 Lucene 的子項目 Nutch 的一部分正式引入 Apache 基金會。2006 年

3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分别被納入稱為 Hadoop 的項

目中

8)名字來源于 Doug Cutting 兒子的玩具大象

大資料技術之Hadoop(一)

9)Hadoop 就此誕生并迅速發展,标志這雲計算時代來臨

2.3 Hadoop 三大發行版本

Hadoop 三大發行版本: Apache、Cloudera、Hortonworks。

  Apache 版本最原始(最基礎)的版本,對于入門學習最好。

  Cloudera 在大型網際網路企業中用的較多。

  Hortonworks 文檔較好。

  

2.4 Hadoop 的優勢

1)高可靠性:因為 Hadoop 假設計算元素和存儲會出現故障,因為它維護多個工作資料副

本,在出現故障時可以對失敗的節點重新分布處理。

2)高擴充性:在叢集間配置設定任務資料,可友善的擴充數以千計的節點。

3)高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任務處理速度。

4)高容錯性:自動儲存多份副本資料,并且能夠自動将失敗的任務重新配置設定。

2.5 Hadoop 組成

1)Hadoop HDFS:一個高可靠、高吞吐量的分布式檔案系統。

2)Hadoop MapReduce:一個分布式的離線并行計算架構。

3)Hadoop YARN:作業排程與叢集資源管理的架構。

4)Hadoop Common:支援其他子產品的工具子產品(Configuration、RPC、序列化機制、日志

操作)。

大資料技術之Hadoop(一)

2.5.1 HDFS 架構概述

大資料技術之Hadoop(一)

2.5.2 YARN 架構概述

1)ResourceManager(rm):處理用戶端請求、啟動/監控 ApplicationMaster、監控 NodeManager、資源配置設定與排程;

2)NodeManager(nm):單個節點上的資源管理、處理來自 ResourceManager 的指令、處理來

自 ApplicationMaster 的指令;

3)ApplicationMaster:資料切分、為應用程式申請資源,并配置設定給内部任務、任務監控與容

錯。

4)Container:對任務運作環境的抽象,封裝了 CPU、記憶體等多元資源以及環境變量、啟動

指令等任務運作相關的資訊。

大資料技術之Hadoop(一)

2.5.3 MapReduce 架構概述

MapReduce 将計算過程分為兩個階段:Map 和 Reduce

1)Map 階段并行處理輸入資料

2)Reduce 階段對 Map 結果進行彙總

大資料技術之Hadoop(一)

  上圖簡單的闡明了 map 和 reduce 的兩個過程或者作用,雖然不夠嚴謹,但是足以提供

一個大概的認知,map 過程是一個蔬菜到制成食物前的準備工作,reduce 将準備好的材料合

并進而制作出食物的過程。

2.6 大資料技術生态體系

大資料技術之Hadoop(一)

圖中涉及的技術名詞解釋如下:

1)Sqoop:sqoop 是一款開源的工具,主要用于在 Hadoop(Hive)與傳統的資料庫(mysql)間進

行資料的傳遞,可以将一個關系型資料庫(例如 : MySQL ,Oracle 等)中的資料導進到

Hadoop 的 HDFS 中,也可以将 HDFS 的資料導進到關系型資料庫中。

2)Flume:Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日志采集、聚

合和傳輸的系統,Flume 支援在日志系統中定制各類資料發送方,用于收集資料;同時,Flume提供對資料進行簡單處理,并寫到各種資料接受方(可定制)的能力。

3)Kafka:Kafka 是一種高吞吐量的分布式釋出訂閱消息系統,有如下特性:

  (1)通過 O(1)的磁盤資料結構提供消息的持久化,這種結構對于即使數以 TB 的消息

   存儲也能夠保持長時間的穩定性能。

  (2)高吞吐量:即使是非常普通的硬體 Kafka 也可以支援每秒數百萬的消息

  (3)支援通過 Kafka 伺服器和消費機叢集來分區消息。

  (4)支援 Hadoop 并行資料加載。

4)Storm:Storm 為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時

處理消息并更新資料庫。這是管理隊列及工作者叢集的另一種方式。 Storm 也可被用于“連

續計算”(continuous computation),對資料流做連續查詢,在計算時就将結果以流的形式

輸出給使用者。

5)Spark:Spark 是目前最流行的開源大資料記憶體計算架構。可以基于 Hadoop 上存儲的大

資料進行計算。

6)Oozie:Oozie 是一個管理 Hdoop 作業(job)的工作流程排程管理系統。Oozie 協調作業

就是通過時間(頻率)和有效資料觸發目前的 Oozie 工作流程。

7)Hbase:HBase 是一個分布式的、面向列的開源資料庫。HBase 不同于一般的關系資料庫,它是一個适合于非結構化資料存儲的資料庫。

8)Hive:hive 是基于 Hadoop 的一個資料倉庫工具,可以将結構化的資料檔案映射為一張

資料庫表,并提供簡單的 sql 查詢功能,可以将 sql 語句轉換為 MapReduce 任務進行運作。

其優點是學習成本低,可以通過類 SQL 語句快速實作簡單的 MapReduce 統計,不必開發專

門的 MapReduce 應用,十分适合資料倉庫的統計分析。

10)R 語言:R 是用于統計分析、繪圖的語言和操作環境。R 是屬于 GNU 系統的一個自由、

免費、源代碼開放的軟體,它是一個用于統計計算和統計制圖的優秀工具。

11)Mahout:

Apache Mahout 是個可擴充的機器學習和資料挖掘庫,目前 Mahout 支援主要的 4 個用

例:

  推薦挖掘:搜集使用者動作并以此給使用者推薦可能喜歡的事物。

  聚集:收集檔案并進行相關檔案分組。

  分類:從現有的分類文檔中學習,尋找文檔中的相似特征,并為無标簽的文檔進行正确

  的歸類。

  頻繁項集挖掘:将一組項分組,并識别哪些個别項會經常一起出現。

12)ZooKeeper:Zookeeper 是 Google 的 Chubby 一個開源的實作。它是一個針對大型分布

式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分布式同步、組服務等。

ZooKeeper 的目标就是封裝好複雜易出錯的關鍵服務,将簡單易用的接口和性能高效、功能

穩定的系統提供給使用者。

繼續閱讀