1. 程式人生 > >大資料及大資料框架

大資料及大資料框架

資訊產業(IT)發展至今,計算要的主要工作之一就是處理各種型別和各種來源的資料。

大資料(BigData)是一種規模龐大的資料集合,一般單臺計算機的能力範圍無法對資料集進行獲取、儲存、管理和分析。因此大資料又和雲端計算和分散式叢集密不可分。大資料是網際網路發展至今一個時代的產物。所以並沒有什麼神密和複雜之處。IBM曾提出大資料的5大特性(5V特性),即Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。大資料由於必資料型別的複雜及資料量的龐大,所以須依賴於雲端計算的分散式處理、分散式儲存等分散式片虛擬化技術。那麼在分散式環境中進行大資料處理,除了與儲存系統外還要涉及到計算任務的分工和分配、叢集的負載均衡、資料的遷移轉化等工作。這就需要有一個統一的框架來負擔這項任務,也就是平時所說的大資料框架。

大資料框架:現階段用的最多的就hadoop、spark、flinnk。三者都是apache軟體基金會的頂級開源專案。坦白的說,在這三者的官方網站上都沒有明確的說明它們是“大資料框架”(BigData Processing Framework)。

我們來看一下官方網站對三者的定義:

Hadoop: Apache Hadoop 軟體庫是一個允許在計算機叢集上通過分散式運算使用簡單程式設計模式處理大型的資料集合(The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.

Spark: Apache Spark 是一個為海量資料處理的統一分析引擎。

Apache Spark 官網截圖

           Apache Spark是一個快速通用的計算機集群系統。它提供了高層次的 java, scala,python 和R 語言的API,並且對通用的圖計算進行優化。而且它還提供了豐富的高階工具,包括用於sql和結構化資料處理的Spark SQL,用於機器學習的MLib,用於圖計算的GraphX和Spark Streaming(Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools including 

Spark SQL for SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.).

Flink: Apache Flinnk 是一個分散式,高效且使終可用的開源流處理框架和精確的資料流應用程式。

Apace Flink官網截圖

我們看到,官方對此的定義非常明確,hadoop:分散式資料處理軟體庫(可以處理大型資料),spark:通用計算機集群系統,海量資料處理引擎。flink:流處理工具,雖然flink也具有批處理的能力,不過flink是把批處理任務當作一個特殊的流計算來執行。雖然都處理大型資料集,但是大型資料集並不一定是大資料(前面大資料的5V定義)

同時,hadoop又可以為後兩者提供適當的分散式工具:分散式檔案系統HDFS和資源管理工具YARN。spark的RDD(彈性分散式資料集)和DAG(有向無環圖)又能彌補hadoop mapreduce的io開銷引起的效能下降

注:在新版2.0以後spark使用了效能更好的Dataset,但是RDD仍然支援。官方原文Note that, before Spark 2.0, the main programming interface of Spark was the Resilient Distributed Dataset (RDD). After Spark 2.0, RDDs are replaced by Dataset, which is strongly-typed like an RDD, but with richer optimizations under the hood. The RDD interface is still supported, and you can get a more complete reference at theRDD programming guide. However, we highly recommend you to switch to use Dataset, which has better performance than RDD. See theSQL programming guideto get more information about Dataset.

Flink又很好的彌補了Spark Streaming的“偽”流處理。並且spark和flink都支援hdfs和yarn,雖然它們都可以執行在standalone模式。

因此,所謂的大資料框架,是我們認為對於我們可以進行大資料分析處理工具的集合。這些工具幫我們在大資料處理中分擔了很多重要的和細節上工作:

資料的獲取,資料哪裡來?處理後資料的去處是哪裡?是直接展示給資料大盤?還是存入資料庫,或是傳輸給其他ERP,CRM,OA等管理軟體?

資料是主動傳送還是被動接收?如果主動傳送接收方資料來不及處理該怎麼辦?如何保持資料的同步?

叢集中任務該如何合理分配?如果資料有依賴關係,如何保證依賴關係的資料不會長時間等待或死鎖?以及資料的先後順序等。如何避免資料的重複計算?資料如何儲存於物理裝置。在叢集中某臺伺服器單點故障如何保證資料不丟失?叢集如何協調?是否需要master主機或是需要多少master主機?如果能以最快最方便的方式返回計算結果(比如在互動模式下一條SQL或python語句就能返回結果)

針對以上這些問題,我們在部署了所謂的大資料框架及它們帶的工具或第三方工具後基本都能解決。如spark的pyspark或spark-shell就能在互動模式下方便的操作資料集。hdfs為我們提供了分散式檔案系統,yarn的資源管理器管理可用資源。雖然spark和flink可以使用效能更好的mesos但是早期部署的基本上都是hadoop,hadoop已經型在了它的生態圈。

參考:

http://hadoop.apache.org

http://spark.apache.org

http://flink.apache.org