大資料核心元件介紹

逃亡兔發表於2017-05-19

現代資料儲存系統,具有大資料的功能之一,是用於所有資料的中央儲存庫。一些資料可能不適於儲存在關係型資料庫中,大部分資料將需要按照原始形式儲存(這一特性往往是Hadoop資料處理與更傳統的方法的區別所在)。這個想法通常被稱為“資料湖”,是為所有的原始資料建立一個巨大的儲存倉庫,並根據需要使用它。

向傳統的關係型資料庫或資料倉儲新增資料的前提是先把資料轉變成一個可以載入到資料庫的預定的模式。此步驟通常被稱為提取、轉換和載入(ETL),在可以使用資料之前會消耗時間和成本。關於資料時如何使用的決定必須在ETL步驟中間做出。此外,一些資料經常在ETL步驟中被丟棄,以為它不能放入資料模式或被認為不需要。

Hadoop的重點是按照其原始格式使用資料。本質上,當資料有Hadoop應用程式訪問時,看起來就像執行ETL步驟。這種方法,稱為讀時模式(schema on read),在訪問資料的時候按自己的需求來構造結構。傳統的資料倉儲方法,稱為寫時模式(schema on write),在儲存時需要根據最終使用資料的方式進行設計。

資料湖的三個優勢:

  • 全部資料都保持可用。無需對以後資料的使用作出任何假設。
  • 全部資料都是共享的。不同單位或個人都可以使用所有可用資料,以前由於資料分佈在完全不同的系統上,是不可用的。
  • 全部訪問方法都是可用的。任何處理引擎都可以用來檢查資料(例如MapReduce、Spark、)。

必須明確,Hadoop並不一定能代替資料倉儲。資料倉儲是有價值的業務工具。在實際應用中,一般資料倉儲和Hadoop同時使用。

一般我們所說的Hadoop不只是Apache Hadoop這一個元件,而是指Hadoop生態圈系統及周邊元件,常用元件介紹如下:

1.Apache Hadoop

Hadoop是Apache基金會下的一個開源分散式計算平臺,核心是HDFS(Hadoop Distributed File System)和MapReduce分散式計算框架。

1.1.HDFS:Hadoop分散式檔案系統:

HDFS用於將資料儲存在Hadoop叢集,具有高容錯性和高伸縮性,允許使用者將Hadoop部署在廉價的硬體(PC級伺服器)上構建分散式系統。

HDFS的特點:

  • 一次寫/多次讀的設計方便了流式讀取。
  • 檔案可以被追加,但不允許隨機查詢。它是沒有資料快取的。
  • 集中資料儲存和處理髮生在相同的伺服器節點上。
  • 移動計算比移動資料更廉價。
  • 它是一種跨叢集維護資料的多個副本的可靠的檔案系統。因此,單個節點(或甚至在一個大型叢集中的機架)的故障不會停止檔案系統。 -使用專門的檔案系統,它不是為常規使用設計的。

1.2.MapReduce分散式計算框架

MapReduce分散式框架則允許使用者在不瞭解分散式系統底層細節的情況下開發並行、分散式的應用程式,充分利用大規模的計算資源,解決傳統高效能單機無法解決的大資料處理問題。

1.3.Hadoop的優勢:

  • 方便:Hadoop可以執行在一般商業機器構成的大型叢集上,或亞馬遜彈性計算雲(Amazon EC2)等雲端計算服務上。
  • 彈性:Hadoop通過增加叢集節點,可以線性地擴充套件以處理更大的資料集。同時,在叢集負載下降時,也可以減少節點,以高效使用計算資源。
  • 健壯:Hadoop在設計之初,就將故障檢測和自動恢復作為一個設計目標,它可以從容處理通過計算平臺上出現的硬體失效的情況。
  • 簡單:Hadoop允許使用者快速編寫出高效的並行分散式程式碼。

2.Hadoop生態系統

狹義的Hadoop核心包括,Hadoop Common、Hadoop HDFS、Hadoop MapReduce三個子專案。與Hadoop核心密切相關的,還包括Avro、ZooKeeper、Hive、Pig和HBase等專案。 構建在這些專案之上的,面向具體領域、應用的Mahout(機器學習領域)、X-Rime(社交網路分析)等專案,Storm、Spark流式計算,以及Flume、Sqoop、Oozie等資料交換、工作流這樣的外圍支撐系統。他們提供了互補性的服務,共同提供了一個海量資料處理的軟體生態系統。

下面詳細介紹生態系統的詳細組成。

2.1.Hadoop Common

Hadoop 0.20版本開始原來的Core部分更名為Hadoop Common。為Hadoop的其他專案提供了一些常用工具,主要包括系統配置工具Configuration、遠端呼叫RPC、序列化機制和Hadoop抽象檔案系統FileSystem等。它們為在通用硬體上搭建雲端計算環境提供基本的服務,併為執行在該平臺的軟體開發提供了所需的API。

2.2.HDFS Hadoop分散式檔案系統

是Hadoop體系中資料儲存管理的基礎。他是一個高容錯的系統,能檢測和應對硬體故障,用於在低成本的通用硬體上執行。HDFS簡化了檔案的一致性模型,通過流式資料訪問,提供高吞吐應用程式訪問功能,適合帶有大型資料集的應用程式。

2.3.MapReduce 計算模型

MapReduce用以進行大資料量的計算。可劃分為Map和Reduce兩個步驟,Map對資料集上的獨立元素進行指定的操作,生產鍵-值對形式中間結果,Reduce則對中間結果中相同的“鍵”的所有值進行規約,已得到做最終結果。在Hadoop v0.20.0版本以前稱為MapReduceV1,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構,發生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 YARN。

2.4.YARN 另一種資源協調者

YARN(Yet Another Resource Negotiator)是一種新的 Hadoop 資源管理器,它為叢集提供所有的排程和資源管理,是為叢集提供MapReduce功能的YARN應用程式框架。它與Hadoop MapReduceV1 相容並作為許多更高階的Hadoop工具的基礎。

2.5.HBase:Hadoop資料庫(適合存取非結構化資料)

HBase是一個針對結構化資料的可伸縮、高可靠、高效能、分散式和麵向列的動態模式資料庫(可以存放非結構化資料),採用Google的BigTable的資料模型:增強的稀疏排序對映表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模資料的隨機、實時讀寫訪問,HBase中儲存的資料可以使用MapReduce來處理,它將資料儲存和平行計算完美地組合在一起。

2.6.Hive 資料倉儲(適合結構化資料存取)

Hive是Hadoop中的一個重要子專案,最早由Facebook設計,是建立在Hadoop基礎上的資料倉儲架構,它為資料倉儲的管理提供了許多功能:資料ETL(抽取、轉換和加工)工具、資料儲存管理和大型資料集的查詢和分析能力。Hive提供的是一種結構化資料的機制,定義了類似於傳統關聯式資料庫中的類SQL語言:HiveQL 通過該查詢語言,資料分析人員可以很方便的執行資料分析業務。

2.7.ZooKeeper分散式服務框架

解決了分散式計算中的一致性問題。在此基礎上ZooKeeper可用於處理分散式應用中遇到的一些資料管理問題,如統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等。

2.8.Pig 大資料分析和評估平臺

Pig是執行在Hadoop上,對大型資料集進行分析和評估的平臺。他簡化了使用Hadoop進行資料分析的需求,提供了一個高層次的、面向領域的抽象語言:Pig Latin。通過Pig Latin,資料工程師可以將複雜且相互關聯的資料分析任務編碼為Pig操作上的資料流指令碼,通過該指令碼轉換偽MapReduce任務鏈,在Hadoop上執行。和Hive一樣,pig降低了對大型資料集進行分析和評估的門檻。

2.9.Avro 序列化系統

Avro有Doug Cutting[Lucene、Nutch、Hadoop三個開源專案的創始人]牽頭開發,是一個序列化系統。類似於其他序列化機制,Avro可以將資料結構或者物件轉換成便於儲存和傳輸的格式,其設計目標使用於支援資料密集型應用,適合大規模資料的儲存與交換。Avro提供了豐富的資料結構型別、快速可壓縮的二進位制資料格式、儲存永續性資料的檔案集、遠端呼叫RPC和簡單動態語言整合等功能。

2.10.Sqoop 資料交換工具

Sqoop是SQL-to-Hadoop的縮寫,是Hadoop的周邊小工具,他的主要作用是在結構化資料儲存與Hadoop之間進行資料交換。可以將一個關係型資料庫(比如mysql、oracle、PostgreSQL等)中的資料匯入Hadoop的HDFS、Hive中,也可以將HDFS、Hive中的資料匯入關係型資料庫中。Sqoop充分利用了Hadoop的優點,整個資料匯入到處過程都是用MapReduce實現並行化,同時,該過程中的大部分步驟自動執行,非常方便。

2.11.Flume 日誌收集系統

Flume是Cloudera開發維護的分散式、可靠、高可用的日誌收集系統。它將資料從生產、傳輸、處理並最終寫入目標的路徑的過程抽象為資料流,在具體的資料流中,資料來源支援在Flume中定製資料傳送方,從而支援收集各種不同協議資料。同時,Flume資料流提供對日誌資料進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種資料目標(可定製)的能力。總的來說,Flume是一個課擴充套件、適合複雜環境的海量日誌收集系統

2.12.Oozie 工作流引擎

在Hadoop中執行資料處理工作,有時候需要把多個作業連線到一起,才達到最終目的。針對這個需求,Yahoo開發了開源工作流引擎Oozie,用於管理和協調多個執行在Hadoop平臺上的作業。在Oozie中,計算作業被抽象為動作,控制流節點則用於構建動作間的依賴關係,他們一起組成一個有向無環的工作流,描述了一項完整的資料處理工作。Ooze工作流系統可以提高資料處理流程的柔性,改善Hadoop叢集的效率,並降低開發和運營人員的工作量。

注:本文大部分內容來自《寫給大忙人的Hadoop》和自己的理解,如需要了解更多內容,請購買正版圖書閱讀。

相關文章