Apache頂級專案介紹6 - Spark
火花四溢,熱情洋溢。極客朋友麼知道,我們翹首以盼的Spark來了。
提及Spark, 這幾年如日中天,談到大資料如果不提及Spark, Hadoop,就好比這年代帶耳機不是2B的,你都不好意思帶。Spark最初由加州大學伯克利分校(太屌的大學,出了多少名人,名作啊)的AMPLab Matei為主的小團隊使用Scala開發,其核心程式碼只有63個Scala檔案(早期版本,這裡提及一下Scala語言又是一個創時代的大作,有人說它太鋒利,有人說它太妖魔)。
Spark作者Matei:
Spark於2010年才成為Apache開源專案之一。經過短短几年的發展,尤其是在2014年很多知名重量級公司如IBM, Cloudera等大力支援,到如今已經是登峰造極,在大資料平行計算,MapReduce領域,完全無人能及其只右,甚至已然代替了Hadoop的MapReduce模組,以及到後來Hadoop也只好把Spark作為其生態重要的一部分作為介紹。
老樣子,看看Spark官方如何介紹吧:
Spark官網是作者比較喜歡的風格,雖說沒有後來Docker那麼cool,但簡單,清新,美觀,有圖有真相,顯然看起來是一個產品,不像Hadoop的官網,這個...
Spark是一個高速,通用大資料計算處理引擎。簡單明瞭,低調中包涵了野心。
官網繼續介紹亮點:
1. 速度快,Spark直接上資料,超過Hadoop記憶體MapReduce速度100+以上,又或者磁碟MapReduce速度10+以上。why?Spark擁有高階DAG(有向無環圖)引擎支援資料迴圈利用,多步資料管道以及in-memory computing。
其實Spark用到了減少IO以及其精華
2.易用性,支援Java, Scala, Python, R. 簡單,高效。還記得我們介紹
hadoop的時候提到案例word count,spark只用下面2行甚至可以簡化到1行程式碼就實現hadoop幾十,上百行的功能,不得感慨其之強大,這裡提一下之所以著麼簡單是得益於函數語言程式設計以及RDD.
3.功能強大,涵蓋資料各個領域: SQL, Streaming, Analytics, Machine
Learning, Graph X, 野心勃勃,一統大資料江山。
4.相容各大生態圈,可以執行在Hadoop,
Mesos單機或者雲端。同時支援訪問多種多樣的資料來源:HDFS, Cassandra, HBase, S3.
可以看出,Spark的團隊除了包涵技術大拿,還有頂級的宣傳廣告達人,看完了這些介紹,你想不用Spark都難。換句話說,Spark提供了一站式大資料解決方案:
Spark目前官方穩定版本為1.6於2016年3月9日釋出,當然激動人心的大版本2.x正在緊鑼密鼓中,我們下面也會提到其新特性。
下面開始介紹一些核心模組。
架構圖如下:
如果我們在縮放一下的化看spark的設計架構:
RDD(Resilient Distributed Dataset):我們首先介紹其最核心的RDD(Resilient Distributed Dataset), 中文翻譯叫彈性分散式資料集,Spark將資料儲存在不同分割槽上的RDD之中。RDD最初思想源於Matei Zaharia自己發表的研究論文。
官方抽象介紹,RDD是一個支援容錯,可以用於平行計算的資料集。夠抽象!
其核心是對分散式記憶體的抽象使用,實現了以操作本地集合的方式來操作分散式資料集,並且已經被Partition。不同的資料集格式對應不同的RDD實現。RDD要支援分散式必然要可序列化,並預設快取到記憶體中(如果記憶體不足,也可以儲存於磁碟)。每次RDD資料集的操作後的結果,都存放到記憶體中,並且可以作為下一個操作的源。這樣省去了MR的大量磁碟讀寫,效率提升至祕籍。說起來容易,這可是Spark最核心之一啊。 另外,其主要特點包括,RDD可以重新安排計算並優化資料處理過程;具有重建RDD和重新計算的容錯性;RDD是不可變的,我們可以修改RDD,但修改後的Transformation是一個新的RDD, 原有的
RDD保持不變。這麼設計顯然是為了支援高併發。
值得一提的是,RDD的儲存級別還包涵,useDisk, useMemory, deserialized, replication, useOfHeap等等12種,其中OFF_HEAP被儲存在Tachyon(一個基於記憶體的分散式檔案系統,潛力巨大)。
Spark提供兩種主要方法建立一個RDD: Parallelizing an existing collection OR External Dataset, i.e. HDFS, HBase etc.
1> Parallelizing an existing collection.
2> External Dataset, i.e. from HDFS File (這個路徑必須可以被所有工作節點訪問)
以上兩種方法看起來都很簡單直接。一旦你有了RDD, 接下來空間無限, 如:
distFile.map( s => s.length ).reduce( (a,b) => a + b)
RDD支援兩種型別操作,Transformation與Action:
Transformation從現有資料集中建立返回一個全新的RDD,如map, filter, flatMap, groupByKey etc.;RDD1 => RDD2, 實際操作是lazy模式。
Action是基於當前資料集計算後返回的一個值,如reduce, collect, count, first, countByKey,save etc. Action主要用來啟動Spark計算。
如簡單sample:
上邊第二句map是一個transformation;第三句reduce是一個action。注意,因為是lazy模式,所有的第二,第三句都是action後啟動。Spark在action啟動後, 核心會繪製一張關於計算路徑的有向無環圖DAG, 之後把計算分解成stage運行於獨立機器,並提交每一個機器會執行M/R,並返回結果。
有向無環圖DAG:
有了計算的DAG, Spark核心下一步就是根據DAG圖在劃分stage時充分考慮分散式計算中的流水線pipeline部分來提高效率,這個過程中RDD引入了Lineage在資料集轉換過程中紀錄了操作資料集的關係,每個操作只關心其父操作,出現錯誤時恢復單個部分,保證了其卓越的效能,其他大多數系統採用類似LOG或備份機制。根據不同transformation操作,RDD在Lineage依賴分為窄依賴Narrow Dependencies和寬依賴Wide Dependencies。窄依賴指生成的RDD的每一個partition都依賴父RDD(s)的固定的partition,如map,filter,union等;對應的寬依賴則生成RDD的每一個partition都依賴於父RDD(s)的所有partition,如groupby,sort等,其往往對應shuffle。所以,對於窄依賴,Spark會盡量把其劃分在同一個stage中,以為他們可以進行並行,流水線計算。
上圖:
整體核心計算DAG與Stage劃分如下:
上面我們花了很大的篇幅介紹RDD,這個是Spark的核心之核心,這個不理解的話後續會吃力。
時間篇幅問題,下面簡要介紹Spark大資料一站式服務的其他功能。
Spark Streaming
Spark Streaming提供了高吞吐,高容錯的實時流處理機制。這裡資料來源可以是多種多樣,如Kafka, Flume, Twitter, ZeroMQ, Kinesis, TCP. Spark會將流式計算分解成一系例短小的批處理作業Discretized Stream, 每一段資料都轉換成
RDD,然後將DStream的transformation操作轉變為針對RDD的transformation。
具體處理流程:
Spark SQL
顯然,Spark SQL使得執行SQL和HiveQL查詢非常簡單,並提供了定位相應表與原資料。查詢時候既可以使用SQL, 也同時支援DataFrame API(RDD)。
SQL使用起來很直接:
DataFrame是一種以RDD為基礎,類似與傳統資料table的抽象,含帶了schema元資訊。可以從sqlContext(已存在RDD, Hive table,或者上圖資料來源)。
DataFrame其實從另一個層面是面向物件的資料訪問查詢, 並提供DSL.
不知大家有沒有看出,Spark SQL為所有的資料來源Hive, Avro, Parquet, ORC,
JSON, JDBC提供了統一的訪問介面模型,甚至跨資料來源訪問,這個非常棒。
Machine Learning
機器學習,屬於高大上AI範疇了。主要理念是演算法通過經驗自動改進演算法的研究,如著名的AlphaGo. Spark MLib是Spark對常用的機器學習演算法的實現庫,包括了相關的測試和資料生成器。四種常見機器學習問(shu)題(xue):二元分類,迴歸,聚類以及協同過濾。抱歉,太深了,雖然學數學出身,但你懂的。
總體來說, MLib支援在大資料中進行機器學習,如資料來源HDFS, HBase;
並且Spark MLib提供的高質量演算法,效能100+倍於Hadoop MapReduce. 就不能給老大哥點面子啊?當然,這在此說明了基礎架構的重要性,完全得益於核心之核心RDD.
Spark Graph X
Spark Graph X是一個分散式圖處理框架,提供了對圖計算和圖挖掘的各種介面。有什麼用?舉例來說,我們常用的社交網路微信,微博等,都需要圖計算處理很多人與人之間的關係鏈,又如著名的PageRank; 類似Pregel(Google的三架馬車之一)在Spark(Scala)上的實現優化。
Spark 2.0
最後,令人期待的Spark 2.0版本也即將釋出。主要核心功能如下:
好了,我們先介紹到這裡了。Spark博大精深,我們拋磚引玉,大家共同分享吧。
最後,看到Spark SUMMIT 2016會在6月初在舊金山舉辦,聲勢浩大,關鍵演講人除了Spark創始人兼CTO, 還包括了Google, Microsoft, 還有我們百度的科學家,Andrew Ng可是業界的頂尖大牛啊!
公眾號: 技術極客TechBooster
相關推薦
Apache頂級專案介紹6 - Spark
火花四溢,熱情洋溢。極客朋友麼知道,我們翹首以盼的Spark來了。 提及Spark, 這幾年如日中天,談到大資料如果不提及Spark, Hadoop,就好比這年代帶耳機不是2B的,你都不好意思帶。Spark最初由加州大學伯克利分校(太屌的大學,出了多少名人,名作啊)
Apache頂級專案介紹4 - Hadoop
大象起舞,天下太平,極客們應該知道我們的重量級人物Hadoop登場了。 提到Hadoop, 正所謂飲水思源,我們不得不提及一下Hadoop之父,其對技術界的影響,在近10年可謂重大, 他就是Doug Cutting, 其傳奇人生及其大作這裡不贅述了,大家可以Goo
Apache頂級專案介紹5 - Kylin
Apache頂級專案介紹5,我們迎來的中國自己的開源,來自本土eBay的頂級專案Kylin。神馬?沒聽過? 別急,放心,Apache的頂級專案各個都身負絕技。 有人問,為什麼突然介紹Kylin,呃,有小夥伴熱情的提及的Kylin,希望來一篇介紹,本人之前有關注瞭解
Dubbo下一站:Apache頂級專案
導讀: 近日,在Apache Dubbo開發者沙龍杭州站的活動中,阿里巴巴中介軟體技術專家曹勝利(展圖)向開發者們分享了Dubbo2.7版本的規劃。 本文將為你探祕 Dubbo 2.7背後的思考和實現方式。 作者:(按姓氏拼音排序,排名不分先後) 曹勝利(展圖):A
Dubbo即將畢業,晉升為Apache頂級專案?
2018年2月9日,Apache 基金會的郵件列表上發起了討論是否接納阿里的 Dubbo 專案進入 Apache 孵化器的投票。 2018年2月15日,郵件列表顯示,Dubbo 獲得了 14 張贊成票,在無棄權和反對票的情況下,正式通過投票,順利成為 Apache 基金會孵化專案。 近日,有
Apache頂級專案8-Geode原始碼深度分析
Apache頂級專案介紹之Geode。Apache頂級專案介紹之8,我們重新恢復Apache頂級專案系列,較之前介紹系列,我們本文直入程式碼分析,原因有二,Geode即上文我們分析的Gemfire的開源版本,其二被逼無奈,閱讀原始碼查詢問題。 1. Geode
Ambari成為Apache頂級專案
Hortonworks上週五宣佈,基於Web的開源Hadoop叢集管理工具Ambari正式從Apache孵化器畢業,成為頂級專案。 Apache Ambari能夠對Apache Hadoop叢集進行供應、管理和監控,已支援HDFS, MapReduce,
【Storm歷史篇】Storm是如何成為Apache頂級專案的
Apache Storm是一個免費、開源的分散式實時計算系統,不久前剛剛升級為Apache頂級專案。近日,該專案建立者Nathan Marz撰文回顧了Storm的發展歷史以及相關的經驗教訓。他認為,任何專案要想取得成功必須具備如下兩個條件: 1、解決了某一類需求; 2、專案
Apache基金會專案介紹
專案名稱 描述 網際網路上首屈一指的HTTP伺服器 Apache Abdera專案的目標是建立一個功能完備,高效能的IETF Atom聯合格式(RFC4287)和Atom釋出協
盤點 35 個 Apache 頂級專案,我拜服了…
## Apache 軟體基金會 Apache 軟體基金會,全稱:**Apache Software Foundation**,簡稱:**ASF**,成立於 1999 年 7 月,是目前世界上最大的最受歡迎的開源軟體基金會,也是一個專門為支援開源專案而生的非盈利性組織。 ![](https://img202
我給 Apache 頂級專案提了個 Bug
![](https://oscimg.oschina.net/oscnet/up-f55a6b89d9a92ef3122de2956c562f2f0c8.png) 這篇文章記錄了給 Apache 頂級專案 - 分庫分表中介軟體 ShardingSphere 提交 Bug 的歷程。 說實話,這是一次比較曲折
我給Apache頂級專案貢獻了點原始碼。
這是why技術的第 91 篇原創文章 這篇文章其實並沒有什麼技術性的分享,從我的角度而言,更多是記錄和思考。 把我對於原始碼和之前寫的部分文章反哺給我的一些東西,帶來的一點點思考分享給大家。 一行原始碼 我很長時間沒開啟我的 Outlook 郵箱了。 前兩天開啟的時候發現我之前給 Dubbo 提交的 pr
Spark新聞專案介紹及Linux叢集準備
(一)專案介紹 本課程基於企業大資料經典案例專案(大資料日誌分析),全方位、全流程講解 大資料專案的業務分析、技術選型、架構設計、叢集規劃、安裝部署、整合繼承與開發和web視覺化互動設計。 不管是零基礎的大資料技術愛好者,還是有基礎的IT小白,都可以通過此課程快速的上升到一個新的高度。 1.適用人群 有
Apache 基金會正式宣佈 Griffin 畢業成為頂級專案
Apache 軟體基金會12月12日正式宣佈 Apache Griffin 畢業成為 Apache 頂級專案。 Apache Griffin 是一個強大的開源大資料質量解決方案,適用於任意規模的分散式資料系統。它提供了一個統一的流程,可以從不同的角度來
6個P2P流媒體開源專案介紹
P2P流媒體開源專案介紹 1. PeerCast 2002年成立,最早的開源P2P流媒體專案。PeerCast把節點按樹結構組織起來, 每個頻道都是一個樹, 直播源是根節點,父節點只給子節點提供資料。節點離根節點越遠,傳輸時延就越大,所以樹的深度應該儘可能短,但節點有限的上行頻寬限制了節點的寬度。 2.
跟天齊老師學Spark(6)--Spark的常用運算元介紹
spark的常用運算元介紹: Resilient(彈性且可復原) Distributed(分散式) Datasets(資料集) (RDDs) 我們以前學的scala的原生方法都是陣列或者集合上定義的,它只能操作單機。 而spark中的方法都是定義在RDD上的,它們操作的是叢
ofbiz 電商專案 apache頂級
近來瞎溜達,偶然看見apache裡竟然有個頂級開源電商專案,本著電商發展的異常活躍,不妨看看開源專案的設計思路。先來大致瞭解下。OFBiz是個什麼東西(下面摘自某科) OFBiz是一個非常著名的電子商務平臺,是一個非常著名的開源專案,提供了建立基於最新J2EE/XML
win10環境下配置django2.0.4+Apache2.4+python3.6專案,以及Django靜態檔案、Apache多專案配置的解決方案(親測)
1 安裝django, Apache,python 要求Apache和python位數一致,比如我的Apache2.4-x86和 python3.6-32位 我的安裝位置: Apache2.4 --- E:\Apache24 python3.6---E:\pht
Apache 基金會宣佈 Apache Airflow 畢業成為頂級專案
Apache 軟體基金會宣佈,Apache Airflow 已經成功地從孵化畢業,成為基金會的一個新的頂級專案。 Apache Airflow 是一個靈活、可擴充套件的工作流自動化和排程系統,可編集和管理數百 PB 的資料流。專案可輕鬆編排複雜的計算工作流,通過智慧排程、
Apache Beam正式成為Apache的頂級專案
目前Apache Beam的最新版本是0.4.0,可以在下載頁面進行下載。 Beam是一個開源的、為資料處理框架提供統一的程式設計模型的SDK,即Beam SDK。目前支援Java SDK,python SDK目前處於開發當中。其社群由Google主導