大數(shù)據(jù)分析引擎Apache Flink

| 1970-01-01 admin

Apache Flink是一個(gè)高效、分布式、基于Java實(shí)現(xiàn)的通用大數(shù)據(jù)分析引擎,它具有分布式 MapReduce一類平臺(tái)的高效性、靈活性和擴(kuò)展性以及并行數(shù)據(jù)庫(kù)查詢優(yōu)化方案,它支持批量和基于流的數(shù)據(jù)分析,且提供了基于Java和Scala的API。從Apache官方博客中得知,F(xiàn)link已于近日升級(jí)成為Apache基金會(huì)的頂級(jí)項(xiàng)目。Flink項(xiàng)目的副總裁對(duì)此評(píng)論到:

Flink能夠成為基金會(huì)的頂級(jí)項(xiàng)目,自己感到非常高興。自己認(rèn)為社區(qū)的驅(qū)動(dòng)將是Flink成長(zhǎng)的最好保證。Flink逐漸的成長(zhǎng)以及眾多新人加入該社區(qū)真是一件大好事。

從Flink官網(wǎng)得知,其具有如下主要特征:

1. 快速

Flink利用基于內(nèi)存的數(shù)據(jù)流并將迭代處理算法深度集成到了系統(tǒng)的運(yùn)行時(shí)中,這就使得系統(tǒng)能夠以極快的速度來(lái)處理數(shù)據(jù)密集型和迭代任務(wù)。

2. 可靠性和擴(kuò)展性

當(dāng)服務(wù)器內(nèi)存被耗盡時(shí),F(xiàn)link也能夠很好的運(yùn)行,這是因?yàn)镕link包含自己的內(nèi)存管理組件、序列化框架和類型推理引擎。

3. 表現(xiàn)力

利用Java或者Scala語(yǔ)言能夠編寫出漂亮、類型安全和可為核心的代碼,并能夠在集群上運(yùn)行所寫程序。開(kāi)發(fā)者可以在無(wú)需額外處理就使用Java和Scala數(shù)據(jù)類型

4. 易用性

在無(wú)需進(jìn)行任何配置的情況下,F(xiàn)link內(nèi)置的優(yōu)化器就能夠以最高效的方式在各種環(huán)境中執(zhí)行程序。此外,F(xiàn)link只需要三個(gè)命令就可以運(yùn)行在Hadoop的新MapReduce框架Yarn上,

5. 完全兼容Hadoop

Flink支持所有的Hadoop所有的輸入/輸出格式和數(shù)據(jù)類型,這就使得開(kāi)發(fā)者無(wú)需做任何修改就能夠利用Flink運(yùn)行歷史遺留的MapReduce操作

Flink主要包括基于Java和Scala的用于批量和基于流數(shù)據(jù)分析的API、優(yōu)化器和具有自定義內(nèi)存管理功能的分布式運(yùn)行時(shí)等,其主要架構(gòu)如下:

大數(shù)據(jù)分析引擎

如今流處理越來(lái)越流行,例如Apache Kafka, Apache Samza, Apache Storm, Apache Spark的Streaming模塊等等,云服務(wù)還有類似Google Cloud Dataflow。Apache Flink作為一個(gè)新的流處理系統(tǒng),其特點(diǎn)是:

1. 低延遲的流處理器

2.豐富的API能夠幫助程序員快速開(kāi)發(fā)流數(shù)據(jù)應(yīng)用

3.靈活的操作狀態(tài)和流窗口

4.高效的流與數(shù)據(jù)的容錯(cuò)很多公司正在從傳統(tǒng)的批處理架構(gòu)遷移到實(shí)時(shí)流架構(gòu),在分布式系統(tǒng)如HDFS中靜態(tài)文件和關(guān)系數(shù)據(jù)庫(kù)在通過(guò)事件流得到增強(qiáng),使用批處理實(shí)現(xiàn)的工作任務(wù)能夠在流處理中以更低延遲實(shí)現(xiàn)。

這種轉(zhuǎn)型有許多方式,首先,許多數(shù)據(jù)集和用例都是基于事件的(比如機(jī)器日志等),其次流處理在某種程度上可以處理更復(fù)雜的工作任務(wù),流處理原則上能夠以低延時(shí)執(zhí)行大部分批處理的工作任務(wù),這樣,當(dāng)流處理能夠處理同樣的工作任務(wù)時(shí),幾乎沒(méi)有理由再選擇使用hadoop這樣的批處理框架了。最后,一些新的應(yīng)用類型諸如處理敏感數(shù)據(jù)經(jīng)常需要持續(xù)查詢,這些應(yīng)用只能使用流架構(gòu)實(shí)現(xiàn)。一個(gè)典型的流架構(gòu)由下面三個(gè)組件組成:

1. 一個(gè)模塊組件是從各種數(shù)據(jù)源收集事件流

2. 一個(gè)模塊組件集成各種流,使它們可用于直接消費(fèi)。

3.一個(gè)模塊組件用來(lái)分析消費(fèi)這些流數(shù)據(jù)

第一步是從各種數(shù)據(jù)源收集事件,事件來(lái)自于數(shù)據(jù)庫(kù),機(jī)器產(chǎn)生日志,事件傳感器等,這些事件需要清理 組織化到一個(gè)中心。

第二步,在一個(gè)中心集成各種流,典型工具如Apache Kafka,Kafka提供一個(gè)broker功能,以失敗容錯(cuò)的高可靠性用來(lái)收集流 日志或緩沖數(shù)據(jù),以及分發(fā)到各種對(duì)不同流感興趣的消費(fèi)者那里進(jìn)行分析。

第三步,對(duì)流進(jìn)行真正的分析,比如創(chuàng)建計(jì)數(shù)器 實(shí)現(xiàn)聚合,Map/Reduce之類計(jì)算,將各種流Join一起分析等等,提供了數(shù)據(jù)分析所需的一步到位的高級(jí)編程。Apache Flink正是這步實(shí)現(xiàn)。

http://flink.apache.org/introduction.html