【大數據】技術選型對比


 

公司要開搞大數據了,針對大數據的一般姿勢做了個簡單調研。

 

一、通用架構

 

二、組件選擇

1、Hdfs、HBase

Hdfs:分布式文件存儲,無縫對接所有大數據相關組件。高容錯(多副本)、高吞吐。適合一次寫入,多次讀出。不適合低延遲讀取、小文件存儲(尋址時間超過讀取時間)。

HBase:非關系型分布式數據庫基於Hdfs,高容錯、高吞吐。HBase采用的是Key/Value的存儲方式,即使隨着數據量增大,也幾乎不會導致查詢的性能下降。

2、Flume、Sqoop

Flume:最主要的作用就是,實時讀取服務器本地磁盤的數據,將數據寫入到HDFS/Kafka/HBase。

Sqoop:用來在RDBMS和Hadoop之間進行數據傳輸的工具就是我們所說的Sqoop。在這里,RDBMS指的是MySQL,Oracle SQL等,而Hadoop指的是Hive,HDFS和HBase等。 我們使用Sqoop將數據從RDBMS導入Hadoop,也可用於將數據從Hadoop導出到RDBMS

3、Kafaka

高並發的基石。吞吐量遠遠領先於同類別的MQ。

LinkedIn團隊做了個實驗研究,對比Kafka與Apache ActiveMQ V5.4和RabbitMQ V2.4的性能

生產者                                                                                                                消費者

                              

 

4、MapReduce & Hive  & Spark & Flink & Beam

 

   4.1、演變史

      4.2、MapReduce 到 Hive 到 SparkSQL的演變

 

  4.3、MapReduce  、 Spark   、Flink 

 MapReduce                                                                                                                                                                  

 

 

   Spark          

    

 

   Flink

  

MapReduce:

MapReduce 模型的抽象層次低,大量的底層邏輯都需要開發者手工完成。
只提供 Map 和 Reduce 兩個操作。比如兩個數據集的 Join 是很基本而且常用的功能,但是在 MapReduce 的世界中,需要對這兩個數據集做一次 Map 和 Reduce 才能得到結果。
在 Hadoop 中,每一個 Job 的計算結果都會存儲在 HDFS 文件存儲系統中,所以每一步計算都要進行硬盤的讀取和寫入,大大增加了系統的延遲。

Spark:

Spark 最基本的數據抽象叫作彈性分布式數據集(Resilient Distributed Dataset, RDD),它代表一個可以被分區(partition)的只讀數據集,它內部可以有很多分區,每個分區又有大量的數據記錄(record)。
RDD 是 Spark 最基本的數據結構。Spark 定義了很多對 RDD 的操作。如 Map、Filter、flatMap、groupByKey 和 Union 等等,極大地提升了對各種復雜場景的支持。
相對於 Hadoop 的 MapReduce 會將中間數據存放到硬盤中,Spark 會把中間數據緩存在內存中,從而減少了很多由於硬盤讀寫而導致的延遲,大大加快了處理速度。

Flink

在 Flink 中,程序天生是並行和分布式的。一個 Stream 可以包含多個分區(Stream Partitions),一個操作符可以被分成多個操作符子任務,每一個子任務是在不同的線程或者不同的機器節點中獨立執行的。

 

性能對比

可以看出,Hadoop 做每一次迭代運算的時間基本相同,而 Spark 除了第一次載入數據到內存以外,別的迭代時間基本可以忽略。

 

4.4、幾種處理引擎對比

  API 類SQL 性能 容錯性 實時性 批處理 流處理 Exactly once語義 社區活躍度
MapReduce 復雜 沒有 不支持
Hive 簡單 不支持
Spark 簡單 中高(秒級) 支持
Flink 簡單 高(微妙級) 支持
Beam 或者代表着未來。目前在谷歌內部使用、生態還沒發展起來。拭目以待


附1:

在流處理系統中,我們對應數據記錄的處理,有3種級別的語義定義,以此來衡量這個流處理系統的能力。

  1. At most once(最多一次)。每條數據記錄最多被處理一次,潛台詞也表明數據會有丟失(沒被處理掉)的可能。
  2. At least once(最少一次)。每條數據記錄至少被處理一次。這個比上一點強的地方在於這里至少保證數據不會丟,至少被處理過,唯一不足之處在於數據可能會被重復處理。
  3. Exactly once(恰好一次)。每條數據記錄正好被處理一次。沒有數據丟失,也沒有重復的數據處理。這一點是3個語義里要求最高的。

 

4.5、使用場景

MapReduce:僅僅用來學習,理解大數據的原理。

Hive:類SQL引擎,適合做報表分析

Spark: Spark 存在的一個缺點——無法高效應對低延遲的流處理場景入手。對於以下場景,你可以選擇 Spark。

  1. 數據量非常大而且邏輯復雜的批數據處理,並且對計算效率有較高要求(比如用大數據分析來構建推薦系統進行個性化推薦、廣告定點投放等);
  2. 基於歷史數據的交互式查詢,要求響應較快;
  3. 基於實時數據流的數據處理,延遲性要求在在數百毫秒到數秒之間。

Spark 完美滿足這些場景的需求, 而且它可以一站式解決這些問題,無需用別的數據處理平台。

Flink:由於 Flink 是為了提升流處理而創建的平台,所以它適用於各種需要非常低延遲(微秒到毫秒級)的實時數據處理場景,比如實時日志報表分析。

而且 Flink 用流處理去模擬批處理的思想,比 Spark 用批處理去模擬流處理的思想擴展性更好,所以我相信將來 Flink 會發展的越來越好,
生態和社區各方面追上 Spark。比如,阿里巴巴就基於 Flink 構建了公司范圍內全平台使用的數據處理平台 Blink,美團、餓了么等公司也都接受 Flink 作為數據處理解決方案。

可以說,Spark 和 Flink 都在某種程度上統一了批處理和流處理。

 

三、任務分工

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM