Python PySpark 大数据时代
????????大數(shù)據(jù)的基本任務(wù)有數(shù)據(jù)的存儲、計算、查詢分析和挖掘,這些任務(wù)往往需要多臺計算機共同調(diào)度才能完成。大數(shù)據(jù)時代,數(shù)據(jù)變成一種生成資料,其價值也提升到了新的高度。隨著各行各業(yè)的數(shù)據(jù)化,使得數(shù)據(jù)逐步形成數(shù)據(jù)資產(chǎn),利用大數(shù)據(jù)技術(shù)可以更好地讓數(shù)據(jù)資產(chǎn)價值化。當(dāng)前越來越多的企業(yè)管理決策都轉(zhuǎn)變成以數(shù)據(jù)為驅(qū)動的大數(shù)據(jù)輔助決策。
主要介紹的知識點有:
- 大數(shù)據(jù)概述:介紹大數(shù)據(jù)相關(guān)的概念和特征
- 大數(shù)據(jù)分析工具:介紹當(dāng)前大數(shù)據(jù)生態(tài)系統(tǒng)下的常見分析工具
Part1 什么是大數(shù)據(jù)
大數(shù)據(jù)(Big Data),是一個IT行業(yè)術(shù)語,是指無法在一定時間范圍內(nèi)用單機軟件工具進行捕捉、管理和處理的數(shù)據(jù)集合,它需要使用分布式模式才能處理,其數(shù)據(jù)具有數(shù)量大、來源廣、價值密度低等特征。
至于什么數(shù)據(jù)量算得上大數(shù)據(jù),這個也沒有一定的標(biāo)準(zhǔn),一般來說,單機難以處理的數(shù)據(jù)量,就可以稱得上大數(shù)據(jù)。
大數(shù)據(jù)時代,分布式的數(shù)據(jù)存儲和查詢模式可以對全量數(shù)據(jù)進行處理。舉例:以前DNA和指紋數(shù)據(jù)庫的建立,由于信息技術(shù)水平的限制,只能重點采集并存儲部分人口的DNA和指紋數(shù)據(jù),這種限制對于很多案件的偵破是非常不利的。
進入大數(shù)據(jù)時代后,從理論上來講,采集并存儲全球人口的DNA和指紋信息是可行的。因此,建立全量的DNA和指紋數(shù)據(jù)庫,這對DNA和指紋數(shù)據(jù)的對比工作來說,具有非常大的價值。
以前我們的研究問題,主要研究幾個要素之間的因果關(guān)系,而在大數(shù)據(jù)時代,更多的是對幾個要素之間相關(guān)性進行分析。基于大數(shù)據(jù)的推薦系統(tǒng),可能比你自己都要了解你自己。這也是在大數(shù)據(jù)時代人類越來越關(guān)心個人隱私信息的安全問題的原因。
相關(guān)性分析是尋找因果關(guān)系的利器。可以說相關(guān)分析和因果分析是相互促進的。如果多個因素之間有明顯的相關(guān)性,那么就可以進一步研究其因果關(guān)系。
大數(shù)據(jù)的價值就在于從海量數(shù)據(jù)中,通過機器學(xué)習(xí)算法自動搜索多個因素之間的相關(guān)性,這些相關(guān)性可以大大減少人工搜尋的時間。人工從海量數(shù)據(jù)中往往很難發(fā)現(xiàn)多個因素之間的相關(guān)性,而這恰恰是機器學(xué)習(xí)比較擅長的領(lǐng)域。
Part 1.1 大數(shù)據(jù)的特點
Part 1.1.1 Volume(大量)
大數(shù)據(jù)場景下,對數(shù)據(jù)的采集、計算和存儲所設(shè)計的數(shù)量是非常龐大的,數(shù)據(jù)量往往多到單臺計算機無法處理和存儲,必須借助多臺計算機構(gòu)建的集群來分布式處理和存儲。
分布式存儲要保證數(shù)據(jù)存儲的安全性。如果某一個節(jié)點上的數(shù)據(jù)損壞,那么必須從其他節(jié)點上對損壞節(jié)點上的數(shù)據(jù)進行自動修復(fù),這個過程中就需要數(shù)據(jù)的副本,同一份數(shù)據(jù)會復(fù)制多份,并分布式存儲到不同的節(jié)點上。
如果不借助大數(shù)據(jù)工具,自己實現(xiàn)一個分布式文件系統(tǒng),那么其工作量非常大。因此對于大數(shù)據(jù)的處理和存儲來說,更好的方案就是選擇一款開源的分布式文件系統(tǒng)。
Part 1.1.2 Velocity(高速)
大數(shù)據(jù)系統(tǒng)可以借助分布式集群構(gòu)建的強大計算力,對海量數(shù)據(jù)進行快速處理。若處理數(shù)據(jù)的響應(yīng)時間能到秒級,甚至毫秒級,那么其價值將非常大。實時大數(shù)據(jù)的處理,也是目前眾多大數(shù)據(jù)工具追求的一個重要能力。
Part 1.1.3 Variety(多樣)
數(shù)據(jù)的載體多種多樣,一般來說,可以分為結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)。其中很多業(yè)務(wù)數(shù)據(jù)都屬于結(jié)構(gòu)化數(shù)據(jù),而視頻、音頻和圖像等都可劃分為非結(jié)構(gòu)化數(shù)據(jù)。在大數(shù)據(jù)時代下,非結(jié)構(gòu)化數(shù)據(jù)從數(shù)量上來說占了大部分。因此,對視頻、音頻、圖像和自然語言等非結(jié)構(gòu)化數(shù)據(jù)的處理,也是當(dāng)前大數(shù)據(jù)工具要攻克的重點。
Part 1.1.4 Value(低價值密度)
大數(shù)據(jù)首先是數(shù)據(jù)量龐大,一般來說,都是PB級別的。但是在特定場景下,真正有用的數(shù)據(jù)可能較少,即數(shù)據(jù)價值密度相對較低。但是存儲過程這些數(shù)據(jù)非常重要,其中部分?jǐn)?shù)據(jù)對于特定場景會起到至關(guān)重要的作用。
Part 1.1.5 Veracity(真實性)
大數(shù)據(jù)場景下,由于數(shù)據(jù)來源的多樣性,互相可以驗證,因此數(shù)據(jù)的真實性往往比較高。這里說的真實性,是指數(shù)據(jù)的準(zhǔn)確性和及時性。數(shù)據(jù)的真實性也是大數(shù)據(jù)可以形成數(shù)據(jù)資產(chǎn)的一個重要前提,只有真實、可信的數(shù)據(jù)才能挖掘出有用的價值。
大數(shù)據(jù)由于具有如上的特點,這就對大數(shù)據(jù)信息化軟件提出了非常高的要求。一般的軟件系統(tǒng)是無法很好的處理大數(shù)據(jù)的。從技術(shù)上看,大數(shù)據(jù)與云計算密不可分。大數(shù)據(jù)無法用單臺計算機進行存儲和處理,而必須采用分布式架構(gòu),即必須依托云計算提供的分布式存儲和計算能力。
Part 1.2 大數(shù)據(jù)的發(fā)展趨勢
Part 1.2.1 大數(shù)據(jù)是一種生產(chǎn)資料
目前人類已經(jīng)步入數(shù)字經(jīng)濟時代,大數(shù)據(jù)是非常重要的一種生產(chǎn)資料,與土地、石油等資源作為重要的生產(chǎn)資料類似,數(shù)字經(jīng)濟時代以大數(shù)據(jù)作為最基礎(chǔ)也是最重要的生產(chǎn)資料。
在大數(shù)據(jù)時代,信息的載體是數(shù)據(jù)。對于數(shù)據(jù)的分析與挖掘來說,其實質(zhì)是生產(chǎn)各類信息產(chǎn)品,這些信息產(chǎn)品可以看作是一種數(shù)字商品,是可以產(chǎn)生實際價值的資產(chǎn)。若將大數(shù)據(jù)比作土地,那么基于大數(shù)據(jù)分析和挖掘出的信息產(chǎn)品,就好比在土地上種植出來的各種農(nóng)產(chǎn)品。
Part 1.2.2 與物聯(lián)網(wǎng)和5G的融合
大數(shù)據(jù)的基礎(chǔ)是數(shù)據(jù),而產(chǎn)生數(shù)據(jù)的源頭更多是來自物聯(lián)網(wǎng)和5G。物聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)和5G等新興技術(shù),將進一步助力大數(shù)據(jù)的發(fā)展,讓大數(shù)據(jù)為企業(yè)管理決策和政府決策提供更多的價值。特別是5G技術(shù)的推廣,將進一步提升大數(shù)據(jù)的應(yīng)用。
Part 1.2.3 大數(shù)據(jù)理論的突破
隨著5G的發(fā)展,大數(shù)據(jù)很可能爆發(fā)新一輪的技術(shù)革命。人類處理信息往往借助視頻、圖像和聲音(語言),因此大數(shù)據(jù)技術(shù)目前正在與機器學(xué)習(xí)、人工智能等相關(guān)技術(shù)進行深度結(jié)合,在視頻、圖像和語音的處理上,必須在理論上繼續(xù)突破,才可能實現(xiàn)科學(xué)技術(shù)上的突破。視頻中的行為檢測、圖像物體識別和語音識別等應(yīng)用會產(chǎn)生極大的經(jīng)濟效益和社會效益。
Part 1.2.4 數(shù)據(jù)公開和標(biāo)準(zhǔn)化
數(shù)據(jù)作為一種重要的資產(chǎn),只有流動起來才能更好地發(fā)揮價值。數(shù)據(jù)在流轉(zhuǎn)的過程中,數(shù)據(jù)的標(biāo)準(zhǔn)化非常重要,這樣才能打破信息孤島,從而更多地讓數(shù)據(jù)產(chǎn)生價值。
Part 1.2.5 數(shù)據(jù)安全
大數(shù)據(jù)中涉及各類數(shù)據(jù),其中難免有敏感的數(shù)據(jù),數(shù)據(jù)在流轉(zhuǎn)過程中,如何對敏感數(shù)據(jù)進行加密和脫敏,這將至關(guān)重要。因此,大數(shù)據(jù)應(yīng)用必須充分考慮數(shù)據(jù)安全的問題。
Part 2 大數(shù)據(jù)下的分析工具
大數(shù)據(jù)技術(shù)首先需要解決的問題是如何高效、安全地存儲:其次是如何高效、及時地處理海量的數(shù)據(jù),并返回有價值的信息;最后是如何通過機器學(xué)習(xí)算法,從海量數(shù)據(jù)中挖掘出潛在的價值,并構(gòu)建模型,以用于預(yù)測預(yù)警。
當(dāng)今大數(shù)據(jù)的基石,來源于谷歌公司的三篇論文,這三篇論文主要闡述了谷歌公司對于大數(shù)據(jù)問題的解決方案。這三篇論文分別是:
- Google File System
- Google MapReduce
- Google BigTable
其中,Google File System主要解決大數(shù)據(jù)分布式存儲的問題,Google MapReduce 主要解決大數(shù)據(jù)分布式計算的問題,Google Bigtable主要解決大數(shù)據(jù)分布式查詢的問題。
值得注意的是,當(dāng)前每個大數(shù)據(jù)工具都專注于解決大數(shù)據(jù)領(lǐng)域的特定問題,很少有一種大數(shù)據(jù)工具可以一站式解決所有的大數(shù)據(jù)問題。因此,一般來說,大數(shù)據(jù)應(yīng)用需要多種大數(shù)據(jù)工具相互配合,才能解決大數(shù)據(jù)相關(guān)的業(yè)務(wù)問題。
大數(shù)據(jù)工具非常多,常用的只有10多種,這些大數(shù)據(jù)工具重點解決的大數(shù)據(jù)領(lǐng)域各不相同:
- 分布式存儲:主要包含Hadoop HDFS和Kafka等。
- 分布式計算:包括批處理和流計算,主要包含Hadoop MapReduce、Spark和Flink等。
- 分布式查詢:主要包括Hive、HBase、Kylin、Impala等。
- 分布式挖掘:主要包括Spark ML和Alink等。
據(jù)中國信通院企業(yè)采購大數(shù)據(jù)軟件調(diào)研報告來看,86.6%的企業(yè)選擇基于開源軟件構(gòu)建自己的大數(shù)據(jù)處理業(yè)務(wù),下面重點介紹大數(shù)據(jù)常用的幾種分析工具。
Part 2.1 Hadoop
Hadoop是一個由Apache基金會開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),源于論文Google File System。Hadoop工具可以讓用戶在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,從而大大降低數(shù)據(jù)程序的開發(fā)難度。它可以充分利用計算機集群構(gòu)建的大容量、高計算能力來對大數(shù)據(jù)進行存儲和計算。
在大數(shù)據(jù)剛興起之時,Hadoop可能是最早的大數(shù)據(jù)工具,它也是早期大數(shù)據(jù)技術(shù)的代名詞。時至今日,雖然大數(shù)據(jù)工具種類繁多,但是不少工具的底層分布式文件系統(tǒng)還是基于Hadoop的HDFS(Hadoop Distributed File System)。
Hadoop框架前期最核心的組件有兩個,即HDFS和MapReduce。后期又加入了YARN組件,用于資源調(diào)度。其中HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce則為海量的數(shù)據(jù)提供了分布式計算能力。
HDFS有高容錯性的特點,且支持在低廉的硬件上進行部署,而且Hadoop訪問數(shù)據(jù)的時候,具有很高的吞吐量,適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。
可以說,Hadoop工具是專為離線和大規(guī)模數(shù)據(jù)分析而設(shè)計的,但它并不適合對幾個記錄隨機讀寫的在線事務(wù)處理模式。Hadoop軟件是免費開源的,官網(wǎng)地址為http://hadoop.apache.org.
注意:目前來說,Hadoop工具不支持?jǐn)?shù)據(jù)的部分update操作,因此不能像關(guān)系型數(shù)據(jù)庫那樣,可以用SQL來更新部分?jǐn)?shù)據(jù)。
Part 2.2 Hive
對于數(shù)據(jù)的查詢和操作,一般開發(fā)人員熟悉的是SQL語句,但是Hadoop不支持SQL對數(shù)據(jù)的操作,而是需要用API來進行操作,這個對于很多開發(fā)人員來說并不友好。因此,很多開發(fā)人員期盼能用SQL語句來查詢Hadoop種的分布式數(shù)據(jù)。
Hive工具基于Hadoop組件,可以看作是一個數(shù)據(jù)倉庫分析系統(tǒng),Hive提供了豐富的SQL查詢方式來分析存儲在Hadoop分布式文件系統(tǒng)中的數(shù)據(jù)。
Hive可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)表,這樣就可以利用SQL來查詢數(shù)據(jù)。本質(zhì)上,Hive是一個翻譯器,可以將SQL語句翻譯為MapReduce任務(wù)運行。
Hive SQL使不熟悉MapReduce的開發(fā)人員可以很方便地利用SQL語言進行數(shù)據(jù)的查詢、匯總和統(tǒng)計分析。但是Hive SQL與關(guān)系型數(shù)據(jù)庫的SQL略有不同,雖然它能支持絕大多數(shù)的語句,如DDL、DML以及常見的聚合函數(shù)、連接查詢和條件查詢等。
Hive還支持UDF(User-Defined Function,用戶定義函數(shù)),也可以實現(xiàn)對map和reduce函數(shù)的定制,為數(shù)據(jù)操作提供了良好的伸縮性和可擴展性。Hive不適用于聯(lián)機事務(wù)處理,也不適合實時查詢功能。它最適應(yīng)應(yīng)用在基于大量不可變數(shù)據(jù)的批處理作業(yè)。Hive的特點包括:可伸縮、可擴展、容錯、輸入格式的松散耦合。Hive最佳使用場合是大數(shù)據(jù)集的批處理作業(yè),例如網(wǎng)絡(luò)日志分析。官網(wǎng)網(wǎng)址為http://hive.apache.org。
注意:目前來說,Hive種的SQL支持度有限,只支持部分常用的SQL語句,且不適合update操作去更新部分?jǐn)?shù)據(jù),即不適合基于行級的數(shù)據(jù)更新操作。
Part 2.3 HBase
HBase工具是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于Google BigTable的論文。它在Hadoop之上提供了類似于Google BigTable的能力。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合存儲非結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)庫,且采用了基于列而不是基于行的數(shù)據(jù)存儲模式。
HBase在很多大型互聯(lián)網(wǎng)公司得到應(yīng)用,HBase適用場景有:
- 密集型寫應(yīng)用:寫入量巨大,而相對讀數(shù)據(jù)量較小的應(yīng)用,比如消息系統(tǒng)的歷史消息,游戲的日志等。
- 查詢邏輯簡單的應(yīng)用:HBase只支持基于rowkey的查詢,而像SQL種的join等查詢語句,它并不支持。
- 對性能和可靠性要求非常高的應(yīng)用:由于HBase本身沒有單點故障,可用性非常高。它支持在線擴展節(jié)點,即使應(yīng)用系統(tǒng)的數(shù)據(jù)在一段時間內(nèi)呈井噴式增長,也可以通過橫向擴展來滿足功能要求。
HBase讀取速度快得益于內(nèi)部使用了LSM樹型結(jié)構(gòu),而不是B或B+樹。一般來說,磁盤的順序讀取速度很快,但相對而言,尋找磁道的速度就要慢很多。HBase的存儲結(jié)構(gòu)決定了讀取任意數(shù)量的記錄不會引發(fā)額外的尋道開銷。官網(wǎng)地址為http://hbase.apache.org。
注意:目前來說,HBase不能基于SQL來查詢數(shù)據(jù),需要使用API。
Part 2.4 Apache Phoenix
Hive是構(gòu)建在Hadoop之上,可以用SQL對Hadoop中的數(shù)據(jù)進行查詢和統(tǒng)計分析。同樣地,HBase原生也不支持用SQL進行數(shù)據(jù)查詢,因此使用起來不方便,比較費力。
Apache Phoenix是構(gòu)建在HBase數(shù)據(jù)庫之上的一個SQL翻譯層。它本身用Java語言開發(fā),可作用HBase內(nèi)嵌的JDBC驅(qū)動。Apache Phoenix引擎會將SQL語句翻譯為一個或多個HBase掃描任務(wù),并編排執(zhí)行以生產(chǎn)標(biāo)準(zhǔn)的JDBC結(jié)果集。
Apache Phoenix提供了用SQL對HBase數(shù)據(jù)庫進行查詢操作的能力,并支持標(biāo)準(zhǔn)SQL中大部分特性,其中包括條件運算、分組、分頁等語法,因此降低了開發(fā)人員操作HBase當(dāng)中的數(shù)據(jù)的難度,提高了開發(fā)效率。官網(wǎng)地址為http://phoenix.apache.org。
Part 2.5 Apache Drill
Apache Drill是一個開源的、低延遲的分布式海量數(shù)據(jù)查詢引擎,使用ANSI SQL兼容語法,支持本地文件、HDFS、HBase、MongoDB等后端存儲,支持Parquet、JSON和CSV等數(shù)據(jù)格式。本質(zhì)上Apache Drill是一個分布式的大規(guī)模并行處理查詢層。
它是Google Dremel工具的開源實現(xiàn),而Dremel是Google的交互式數(shù)據(jù)分析系統(tǒng),性能非常強悍,可以處理PB級別的數(shù)據(jù)。
Google開發(fā)的Dremel工具,在處理PB級數(shù)據(jù)時,可將處理時間縮短到秒級,從而作為MapReduce的有利補充。它作為Google BigQuery的報表引擎,獲得了很大的成功。Apache Drill的官網(wǎng)地址為https://drill.apache.org。
Part 2.6 Apache Hudi
Apache Hudi代表Hadoop Upserts and Incrementals,由Uber開發(fā)并開源。它基于HDFS數(shù)據(jù)存儲系統(tǒng)之上,提供了兩種流原語:插入更新和增量拉取。它可以很好地彌補Hadoop和Hive對部分?jǐn)?shù)據(jù)更新的不足。
Apache Hudi工具提供兩個核心功能:首先支持行級別的數(shù)據(jù)更新,這樣可以迅速地更新歷史數(shù)據(jù);其次是僅對增量數(shù)據(jù)的查詢。Apache Hudi提供了對Hive、Presto和Spark的支持,可以直接使用這些組件對Hudi管理的數(shù)據(jù)進行查詢。
Hudi的主要目的是高效減少數(shù)據(jù)攝取過程中的延遲。HDFS上的分析數(shù)據(jù)集通過兩種類型的表提供服務(wù):
- 讀優(yōu)化表(Read Optimized Table):通過列式存儲提高查詢性能。
- 近實時表(Near-Real-Time Table):基于行的存儲和列式存儲的組合提供近實時查詢。
Hudi的官網(wǎng)地址為https://hudi.apache.org。
Part 2.7 Apache Kylin
Apache Kylin是數(shù)據(jù)平臺上的一個開源OLAP引擎。它采用多維立方體預(yù)計算技術(shù),可以將某些場景下的大數(shù)據(jù)SQL查詢速度提升到亞秒級別。值得一提的是,Apache Kylin是國人主導(dǎo)的第一個Apache頂級開源項目,在開源項目有較大的影響力。
它的查詢速度如此之快,是基于預(yù)先計算盡量多的聚合結(jié)果,在查詢時應(yīng)該盡量利用預(yù)先計算的結(jié)果得出查詢結(jié)果,從而避免直接掃描超大的原始記錄。
使用Apache Kylin主要分為三步:
Apache Kylin的官網(wǎng)地址為http://kylin.apache.org。
Part 2.8 Apache Presto
Apache Presto 是一個開源的分布式SQL查詢引擎,適用于交互式分析查詢,數(shù)據(jù)量支持GB到PB字節(jié)。它的設(shè)計和編寫完全是為了解決像Facebook這樣規(guī)模的商業(yè)數(shù)據(jù)倉庫的交互式分析和處理速度的問題。
Presto支持多種數(shù)據(jù)存儲系統(tǒng),包括Hive、Cassandra和各類關(guān)系數(shù)據(jù)庫。Presto查詢可以將多個數(shù)據(jù)源的數(shù)據(jù)進行合并,可以跨越整個組織進行分析。
國內(nèi)的京東和國外的Facebook都使用Presto進行交互式查詢。Apache Presto的官網(wǎng)地址為 https://prestodb.io。
Part 2.9 ClickHouse
Yandex在2016年6月15日開源了一個用于數(shù)據(jù)分析的數(shù)據(jù)庫,名字叫作ClickHouse,這個列式存儲數(shù)據(jù)庫的性能要超過很多流行的商業(yè)MPP數(shù)據(jù)庫軟件,例如Vertica。
Clickhouse的具體特點如下:
- 面向列的DBMS
- 數(shù)據(jù)高效壓縮
- 磁盤存儲的數(shù)據(jù)
- 多核并行處理
- 在多個服務(wù)器上分布式處理
- SQL語法支持
- 向量化引擎
- 實時數(shù)據(jù)更新
- 索引支持
- 適合在線查詢
- 支持近似預(yù)估計算
- 支持嵌套的數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)復(fù)制和對數(shù)據(jù)完整性的支持。
ClickHouse的官網(wǎng)地址為https://clickhouse.tech。
Part 2.10 Apache Spark
Apache Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎。開源的通用并行框架。它不同于Hadoop MapReduce,計算任務(wù)中間輸出結(jié)果可以保存在內(nèi)存中,而不再需要讀寫HDFS,因此Spark計算速度更快,也能更好地適用于機器學(xué)習(xí)等需要迭代的算法。
Apache Spark是由Scala語法開發(fā)的,可以與Java程序一起使用。它能夠像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。它具有運行速度快、易用性好、通用性強和隨處運行等特點。
Apache Spark提供了Java、Scala、Python以及R語言的API。還支持更高級的工具,如Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等。
Apache Spark主要有如下幾個特點:
- 非常快的計算速度:它主要在內(nèi)存中計算,因此在需要反復(fù)迭代的算法上,優(yōu)勢非常明顯,比Hadoop快100倍。
- 易用性:他大概提供了80多個高級運算符,包括各種磚和、聚合等操作。這相對于Hadoop組件中提供的map和reduce兩大類操作來說,豐富了很多,因此可以更好地適應(yīng)復(fù)雜數(shù)據(jù)的邏輯處理。
- 通用性:它除了自身不帶數(shù)據(jù)存儲外,其他大數(shù)據(jù)常見的業(yè)務(wù)需求,比如批處理、流處理、圖計算和機器學(xué)習(xí)等都有對應(yīng)的組件。因此,開發(fā)者通過Spark提供的各類組件,如Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等,可以在同一個應(yīng)用程序中無縫組合使用這些庫。
- 支持多種資源管理器:它支持Hadoop YARN、Apache Mesos,以及Spark自帶的Standalone集群管理器。
Spark的官網(wǎng)地址為http://sparkapache.org。
Part 2.11 Apache Flink
Apache Flink是一個計算框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進行有狀態(tài)計算,該框架完全由Java語言開發(fā),也是國內(nèi)阿里巴巴主推的一款大數(shù)據(jù)工具。其針對數(shù)據(jù)流的分布式計算提供了數(shù)據(jù)分布、數(shù)據(jù)通信以及容錯機制等功能。基于流執(zhí)行引擎,Flink提供了諸多更高抽象層的API,以便用戶編寫分布式任務(wù)。
- DataSet API:對靜態(tài)數(shù)據(jù)進行批處理操作,將靜態(tài)數(shù)據(jù)抽象成分布式的數(shù)據(jù)集,用戶可以方便地使用Flink提供的各種操作符,對分布式數(shù)據(jù)集進行處理。
- DataStream API:對數(shù)據(jù)流進行流處理操作,將流式的數(shù)據(jù)抽象成分布式的數(shù)據(jù)流,用戶可以方便地對分布式數(shù)據(jù)流進行各類操作。
- Table API:對結(jié)構(gòu)化數(shù)據(jù)進行查詢操作,將結(jié)構(gòu)化數(shù)據(jù)抽象成關(guān)系表,并通過類SQL的語句對關(guān)系表進行各種查詢操作。
Apache Flink的官網(wǎng)地址為http://flink.apache.org。
Part 2.12 Apache Storm
Apache Storm是開源的分布式實時計算系統(tǒng),擅長處理海量數(shù)據(jù),適用于數(shù)據(jù)實時處理而非批處理。Hadoop或者Hive是大數(shù)據(jù)中進行批處理使用較為廣泛的工具,這也是Hadoop或者Hive的強項。但是Hadoop MapReduce并不擅長實時計算,這是Hadoop或者Hive的強項。但是Hadoop MapReduce并不擅長實時計算,這也是業(yè)界一致的共識。
當(dāng)前很多業(yè)務(wù)對于實時計算的需求越來越強烈,這也是Storm推出的一個重要原因。Apache Storm的官網(wǎng)地址為 http://storm.apache.org。
注意:隨著Spark和Flink對于流數(shù)據(jù)的處理能力增強,目前不少實時大數(shù)據(jù)處理分析都從Storm遷移到Spark和Flink上,從而降低了維護成本。
Part 2.13 Apache Druid
Apache Druid是一個分布式的、支持實時多為OLAP分析的數(shù)據(jù)處理系統(tǒng)。它即支持高速的數(shù)據(jù)實時攝入處理,也支持實時且靈活的多維數(shù)據(jù)分析查詢。因此他最常用的大數(shù)據(jù)場景就是靈活快速的多維OLAP分析。
另外,它支持根據(jù)時間戳對數(shù)據(jù)進行預(yù)聚合攝入和聚合分析,因此也經(jīng)常用于對時序數(shù)據(jù)進行處理分析。
Apache Druid的主要特性如下:
- 亞秒響應(yīng)的交互式查詢,支持較高并發(fā)。
- 支持是是導(dǎo)入,導(dǎo)入即可被查詢,支持高并發(fā)導(dǎo)入。
- 采用分布式shared-nothing的架構(gòu),可以擴展到PB級。
- 數(shù)據(jù)查詢支持SQL。
Apache Druid的官網(wǎng)地址為http://druid.apache.org。
注意:目前Apache Druid不支持精確去重,不支持Join和根據(jù)主鍵進行單條記錄更新。同時,需要與阿里開源的Druid數(shù)據(jù)庫連接池區(qū)別開來。
Part 2.14 Apache Kafka
Apache Kafka是一個開源流處理平臺,它的目標(biāo)是為處理實時數(shù)據(jù)提供一個統(tǒng)一、高通量、低等待的平臺。Apache Kafka最初由LinkedIn開發(fā),并于2011年初開源。2012年10月從Apache Incubator畢業(yè)。在非常多的實時大數(shù)據(jù)項目中,都能見到Apache Kafka的身影。
Apache Kafka不僅僅是一個消息系統(tǒng),主要用于如下場景:
- 發(fā)布和訂閱:類似一個消息系統(tǒng),可以讀寫流式數(shù)據(jù)。
- 流數(shù)據(jù)處理:編寫可擴展的流處理應(yīng)用程序,可用于實時事件響應(yīng)的場景。
- 數(shù)據(jù)存儲:安全地將流式的數(shù)據(jù)存儲在一個分布式、有副本備份且容錯的集群。
它的一個重要特點是可以作為連接各個子系統(tǒng)的數(shù)據(jù)管道,從而構(gòu)建實時的數(shù)據(jù)管道和流式應(yīng)用。它支持水平擴展,且具有高可用、速度快的優(yōu)點,已經(jīng)運行在成千上萬家公司的生產(chǎn)環(huán)境中。Apache Kafka的官網(wǎng)地址為http://kafka.apache.org。
注意:某種程度上來說,很多實時大數(shù)據(jù)系統(tǒng)已經(jīng)離不開Kafka,他充當(dāng)一個內(nèi)存數(shù)據(jù)庫,可以快速地讀寫流數(shù)據(jù)。
Part 2.15 TensorFlow
TensorFlow最初由谷歌公司開發(fā),用于機器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,它是一個端到端開源機器學(xué)習(xí)平臺。它擁有一個全面而靈活的生態(tài)系統(tǒng),包含各種工具、庫和社區(qū)資源,可助力研究人員推動先進的機器學(xué)習(xí)技術(shù)的發(fā)展,并使用開發(fā)者能夠輕松地構(gòu)建和部署由機器學(xué)習(xí)提供支持的應(yīng)用。
TensorFlow的特征如下:
- 輕松地構(gòu)建模型:它可以使用API輕松地構(gòu)建和訓(xùn)練機器學(xué)習(xí)模型,這時的我們能夠快速迭代模型并輕松地調(diào)試模型。
- 隨時隨地進行可靠的機器學(xué)習(xí)生產(chǎn):它可以在CPU和GPU上運行,可以運行在臺式機、服務(wù)器和手機移動端等設(shè)備上。無論使用哪種語言,都可以在云端、本地、瀏覽器中或設(shè)備上輕松地訓(xùn)練和部署模型。
- 強大的研究實驗:現(xiàn)在科學(xué)家可以用它嘗試新的算法,產(chǎn)品團隊則用它來訓(xùn)練和使用計算模型,并直接提供給在線用戶。
TensorFlow的官網(wǎng)地址為https://tensorflow.google.cn。
Part 2.16 PyTorch
PyTorch的前身是Torch,其底層和Torch框架一樣,但是使用Python重新寫了很多內(nèi)容,不僅更加靈活,支持 動態(tài)圖,而且還提供了Python接口。
它是一個以Python優(yōu)先的深度學(xué)習(xí)框架,能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò),這是很多主流深度學(xué)習(xí)框架比如TensorFlow等都不支持的。
PyTorch是相當(dāng)簡潔且高效的框架,從操作上來說,非常符合我們的使用習(xí)慣,這能讓用戶盡可能地專注于實現(xiàn)自己的想法,而不是算法本身。PyTorch是基于Python的,因此入門也更加簡單。PyTorch的官網(wǎng)地址為https://pytorch.org。
Part 2.17 Apache Superset
前面介紹的大數(shù)據(jù)工具,主要涉及大數(shù)據(jù)的存儲、計算和查詢,也涉及大數(shù)據(jù)的機器學(xué)習(xí)。但是這些數(shù)據(jù)的查詢和挖掘結(jié)果如何直觀地通過圖表展現(xiàn)到UI上,以輔助更多的業(yè)務(wù)人員進行決策使用,這也是一個非常重要的課題。
Apache Superset是由Airbnb開源的數(shù)據(jù)可視化工具,目前屬于Apache孵化器項目,主要用于數(shù)據(jù)可視化工作。分析人員可以不用直接寫SQL語句,而是通過選擇指標(biāo)、分組條件和過濾條件,即可繪制圖表,這無疑降低了它的使用難度。它在可視化方面做得很出色,是開源領(lǐng)域中的佼佼者。
Apache Superset的官網(wǎng)地址為http://superset.spache.org。
注意:與Apache Superset類似的還有開源的Metabase,官網(wǎng)地址為https://www.metabase.com。
Part 2.18 Elasticsearch
Elasticsearch是一個開源的、分布式的、提供Restful API的搜索和數(shù)據(jù)分析引擎,它的底層是開源庫Apache Lucene。它使用Java編寫,內(nèi)部采用Lucene做索引與搜索。它的目標(biāo)是使全文檢索變得更加簡單的。
Elasticsearch具有如下特征:
- 一個分布式的實施文檔存儲
- 一個分布式實時分析搜索引擎
- 能橫向擴展,支持PB級別的數(shù)據(jù)。
Elasticsearch的官網(wǎng)地址為https://www.elastic.co/cn/。
注意:Elasticsearch中涉及的數(shù)據(jù)可以用Kibana實現(xiàn)數(shù)據(jù)可視化分析。
Part 2.19 Jupyter Notebook
Jupyter Notebook是一個功能非常強大的Web工具,不僅僅用于大數(shù)據(jù)分析。它的前身是IPython Notebook,是一個基于Web的交互式筆記本,支持40多種編譯語言。
它的本質(zhì)是一個Web應(yīng)用程序,便于創(chuàng)建和共享程序文檔,支持實時代碼、數(shù)學(xué)方程、可視化和Markdown。它主要用于數(shù)據(jù)清理和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計建模、機器學(xué)習(xí)等。
Jupyter Notebook的官網(wǎng)地址為https://jupyter.org
Part 2.20 Apache Zeppelin
Apache Zeppelin和Jupyter Notebook類似,是一個提供交互式數(shù)據(jù)分析且基于Web的筆記本。它基于Web的開源框架,使交互式數(shù)據(jù)分析變得可行的。Zeppelin提供了數(shù)據(jù)分析、數(shù)據(jù)可視化等功能。
借助Apache Zeppelin,開發(fā)人員可以構(gòu)建數(shù)據(jù)驅(qū)動的、可交互且協(xié)作的精美的在線文檔,并且支持多種語言,包括Apache Spark、PySpark、Spark SQL、Hive、Markdown、Shell等。
Apache Zeppelin主要功能有:
- 數(shù)據(jù)提取
- 數(shù)據(jù)挖掘
- 數(shù)據(jù)分析
- 數(shù)據(jù)可視化展示
Apache Zeppelin的官網(wǎng)地址為http://zeppelin.apache.org。
大數(shù)據(jù)工具發(fā)展非常快,有很多工具可能都沒聽說過。就當(dāng)前的行情來看,Apache Spark基本上已經(jīng)成為批處理領(lǐng)域的佼佼者,且最新版本在流處理上也做得不錯,是實現(xiàn)流批一體化數(shù)據(jù)處理很好的框架。
需要大數(shù)據(jù)分析與處理的公司,應(yīng)該根據(jù)自身的人員技能結(jié)構(gòu)和業(yè)務(wù)需求,選擇合適的大數(shù)據(jù)工具。雖然大數(shù)據(jù)工具非常多,但是Hadoop、HBase、Kafka、Spark和Flink幾乎是必備的大數(shù)據(jù)工具。
Part 3 小結(jié)
大數(shù)據(jù)工具繁多,當(dāng)前并沒有一個一站式的大數(shù)據(jù)解決方案,不同大數(shù)據(jù)工具需要配合才能構(gòu)建出一個完整的大數(shù)據(jù)應(yīng)用。毫無疑問,雖然大數(shù)據(jù)工具如此之多,但是常用的大數(shù)據(jù)工具中,Hadoop、HBase、Kafka、Spark或Flink是不可或缺的工具。
-- END
總結(jié)
以上是生活随笔為你收集整理的Python PySpark 大数据时代的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采购虚拟磁带库(VTL)的四项关键性指标
- 下一篇: 艺赛旗RPA验证码处理系列(一):解决滑