【一點(diǎn)資訊】MongoDB + Spark: 完整的大數(shù)據(jù)解決方案 www.yidianzixun.com
http://www.yidianzixun.com/home?page=article&id=0EMRJyyd&up=629
Spark的工作流程可以概括為三部曲:創(chuàng)建并發(fā)任務(wù)殖氏,對數(shù)據(jù)進(jìn)行transformation操作柱衔,如map卖毁, filter镀钓,union,intersect等诱鞠,然后執(zhí)行運(yùn)算付燥,如reduce,count尔破,或者簡單地收集結(jié)果。
從RDDs到Spark – Blueve 湛藍(lán)
http://blueve.me/archives/1437
在Spark官方的宣傳中我們也可以看到浇衬,Hadoop能做到的事情懒构,Spark也可以做,而且通尘毒粒可以做得更好痴脾。事實(shí)上颤介,越來越多的業(yè)內(nèi)公司都開始試水Spark梳星,因?yàn)槠洹竞诵馁u點(diǎn)內(nèi)存計(jì)算加速以及簡潔優(yōu)雅的編程接口不光可以為某些分布式批處理應(yīng)用提速,還可以降低分布式計(jì)算應(yīng)用的編寫門檻滚朵≡┰郑】
在Hadoop MapReduce計(jì)算框架中,面對一個(gè)需要多個(gè)MapReduce組合的大型任務(wù)辕近,在每個(gè)MR任務(wù)之間韵吨,數(shù)據(jù)的交互都是通過HDFS來進(jìn)行的,打個(gè)比方移宅,現(xiàn)在有一個(gè)玩具归粉,在中國制造,但這個(gè)玩具的牌子是美國的漏峰,并且該品牌在中國并沒有開放銷售糠悼,因此想要買這個(gè)玩具的話你就必須從國外買,于是這個(gè)玩具就經(jīng)歷了 中國制造 -> 中國倉庫 -> 美國倉庫 -> 中國倉庫 -> 中國買家 這一過程浅乔,相信有過類似購物經(jīng)歷的人已經(jīng)非尘笪梗苦惱,既然是在中國制造的靖苇,那為什么不在中國的工廠制造完畢之后直接發(fā)給我呢席噩?是的,其實(shí)這就是MapReduce計(jì)算模型的缺陷贤壁,Map -> Reduce -> HDFS -> Map -> Reudce…悼枢,人們很快就意識(shí)到了這個(gè)問題,于是DAG運(yùn)算得以發(fā)展面世脾拆。我很喜歡Apache Tez主頁上的這張圖:
[圖片上傳中馒索。给梅。。(1)]
顯而易見双揪,將前一項(xiàng)作業(yè)的中間結(jié)果直接復(fù)用动羽,將會(huì)帶來巨大的性能提升∮嫫冢回到我們之前的例子中运吓,僅僅這個(gè)改變就相當(dāng)于變成了中國制造 -> 中國倉庫 -> 中國買家,不僅轉(zhuǎn)運(yùn)費(fèi)少了疯趟,物流的時(shí)間還大大縮短拘哨。實(shí)際上,Spark做得還要更為出色一些信峻。
【一點(diǎn)資訊】Spark在GrowingIO數(shù)據(jù)無埋點(diǎn)全量采集場景下的實(shí)踐 www.yidianzixun.com
http://www.yidianzixun.com/home?page=article&id=0EXq2NT4&up=234
因?yàn)镾park最近非常的火倦青,所以它的社區(qū)資源非常的多,基本上所有主流的框架盹舞,像我們常見的Phoenix产镐,Cassandra, MongoDB都有Spark DataSource相關(guān)的實(shí)現(xiàn)。還有一個(gè)就是它提供了一個(gè)統(tǒng)一的數(shù)據(jù)類型踢步,把所有的外部表都統(tǒng)一轉(zhuǎn)化成Spark的數(shù)據(jù)類型癣亚,這樣的話不同的外部表能夠相互的關(guān)聯(lián)和操作。
打開 Spark 的正確姿勢
http://mp.weixin.qq.com/s?timestamp=1477657509&src=3&ver=1&signature=BD1c9-SC3qjEWf0bIjcfETXtBXULaa-iiepZbaZzejUHg6D86q8cBwaWizGFo8gO0ka5vAig6IVvyYmyVrrUHxXW8aMFd4Mxxa4MtoymJr0081wQemkeKU5gdidnyERfao-fzUESge2uS3gX9FZZ5H694fylBt0jtuv8-xY28=
太好用了获印!相見恨晚述雾!
Spark 火起來就是因?yàn)殚_發(fā)者發(fā)現(xiàn)這個(gè)框架太贊了。
雜七雜八的數(shù)據(jù)源都可以抽象成一個(gè)叫 RDD 的東西兼丰,然后就能用統(tǒng)一的高階操作了玻孟,操作符的執(zhí)行都會(huì)盡可能利用內(nèi)存來加速。
如果抽象的時(shí)候能進(jìn)一步指定 schema鳍征,就實(shí)現(xiàn)了 DataFrame接口黍翎,好處是它的操作符都會(huì)被 Spark 進(jìn)一步優(yōu)化 Physical Plan.
實(shí)時(shí)應(yīng)用不需要再接入別的框架,直接用 Spark Streaming 就好了蟆技,編程模型和非實(shí)時(shí)是一樣的玩敏,代碼幾乎不用改。
如果需要做復(fù)雜一些的數(shù)據(jù)分析和挖掘质礼,MLlib 提供了常見的機(jī)器學(xué)習(xí)算法旺聚,不用再把數(shù)據(jù)來回倒騰了,ETL 以后的數(shù)據(jù)直接繼續(xù)訓(xùn)練眶蕉。
更不用提多語言支持和其他一些貼心細(xì)節(jié)了砰粹。說了那么多好,可是本文的主題不是吐槽么?
三個(gè)理由告訴你為什么需要在云端運(yùn)行Spark_百度文庫
http://wenku.baidu.com/link?url=Vzm06xWgOTTZNxJvORtEYtrF4Dsyx6iS7OrYsiP0SeW4iZFto8-ZKo-Wqhxw7wn2H5ddVSZ5oYMt9Q2t7qZz6tLxKO1muItJZvLY3FLu4GW
作為一種替代Hadoop的MapReduce碱璃,并用來處理大數(shù)據(jù)的技術(shù)弄痹,Spark具有極大的吸引力。它結(jié)合了速度嵌器、易于使用的編程模型和統(tǒng)一設(shè)計(jì)肛真,讓用戶能夠?qū)⒔换ナ讲樵儭⒘魇椒治鏊健C(jī)器學(xué)習(xí)和圖形計(jì)算合并到單一系統(tǒng)里面蚓让。
Storm與Spark streaming的比較 | winwill2012博客
http://qifuguang.me/2015/12/16/Storm%E4%B8%8ESpark-streaming%E7%9A%84%E6%AF%94%E8%BE%83/?utm_source=tuicool&utm_medium=referral
Spark是一個(gè)類似于MapReduce的分布式計(jì)算框架,其核心是彈性分布式數(shù)據(jù)集(RDD)讥珍,提供了比MapReduce更豐富的模型历极,可以在快速在內(nèi)存中對數(shù)據(jù)集進(jìn)行多次迭代,以支持復(fù)雜的數(shù)據(jù)挖掘算法和圖形計(jì)算算法衷佃。
解讀2015之Spark篇:新生態(tài)系統(tǒng)的形成
http://www.infoq.com/cn/articles/2015-Review-Spark
轉(zhuǎn)向以DataFrame為核心
在傳統(tǒng)意義上Spark的核心是RDD和RDD之上的各種transformation和action趟卸,也就是各種算子,RDD可以認(rèn)為是分布式的Java對象的集合氏义。2013年推出了DataFrame锄列,可以看做分布式的Row對象的集合。
開源大數(shù)據(jù)技術(shù)漫談
http://sanwen8.cn/p/150ZTVb.html
隨著大數(shù)據(jù)中計(jì)算越來越復(fù)雜觅赊,往往一個(gè)處理過程會(huì)分解成很多小的計(jì)算任務(wù)右蕊,這些計(jì)算任務(wù)的中間結(jié)果需要保存在文件中做為下一個(gè)任務(wù)的輸入。這樣在計(jì)算過程中就會(huì)引入多次磁盤讀寫吮螺,降低了整體的計(jì)算速度∨练基于流處理的開源方案解決了這個(gè)問題鸠补,通過把中間計(jì)算結(jié)果保存在內(nèi)存中,大大減少了磁盤讀寫帶來的性能損失嘀掸。這類方案有代表性的有Spark紫岩,STORM,samza睬塌,其中Spark發(fā)展得最好泉蝌。
Hive on Spark解析 – lxw的大數(shù)據(jù)田地
http://lxw1234.com/archives/2015/05/200.htm
Spark則是最初由加州大學(xué)伯克利分校開發(fā)的分布式計(jì)算引擎,借助于其靈活的DAG執(zhí)行模式揩晴、對內(nèi)存的充分利用勋陪,以及RDD所能表達(dá)的豐富語義,Spark受到了Hadoop社區(qū)的廣泛關(guān)注硫兰。在成為Apache頂級(jí)項(xiàng)目之后诅愚,Spark更是集成了流處理、圖計(jì)算劫映、機(jī)器學(xué)習(xí)等功能违孝,是業(yè)界公認(rèn)最具潛力的下一代通用計(jì)算框架刹前。鑒于此,Hive社區(qū)于2014年推出了Hive on Spark項(xiàng)目(HIVE-7292)雌桑,將Spark作為繼MapReduce和Tez之后Hive的第三個(gè)計(jì)算引擎喇喉。
Spark核心概念 - 瞌睡中的葡萄虎 - 博客園
http://www.cnblogs.com/luogankun/p/3801142.html
1、Application
** 基于spark的用戶程序校坑,包含了一個(gè)Driver Program以及集群上中多個(gè)executor轧飞;**
** spark中只要有一個(gè)sparkcontext就是一個(gè)application**;
啟動(dòng)一個(gè)spark-shell也是一個(gè)application撒踪,因?yàn)樵趩?dòng)shark-shell時(shí)就內(nèi)置了一個(gè)sc(SparkContext的實(shí)例)过咬;
2、Driver Program
** 運(yùn)行Application的main()函數(shù)并且創(chuàng)建SparkContext的程序**制妄。通常用SparkContext代表Driver Program掸绞;
3、Cluster Manager
** 在集群上獲取資源的外部服務(wù)**耕捞。如:standalone衔掸、yarn、mesos俺抽;
各種不同的集群的區(qū)別:只是任務(wù)調(diào)度的粗細(xì)粒度不同敞映,對學(xué)習(xí)spark沒有影響,自己在學(xué)習(xí)時(shí)使用standalone即可磷斧;
4振愿、Worker Node
集群中任何一個(gè)可以運(yùn)行Application代碼的節(jié)點(diǎn);
可以在Worker Node啟動(dòng)Executor進(jìn)程弛饭;
5冕末、Executor
在Worker Node上為某Application啟動(dòng)一個(gè)進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行任務(wù)侣颂,并且負(fù)責(zé)將數(shù)據(jù)存在硬盤或者內(nèi)存中档桃;每個(gè)Application都有各自獨(dú)立的executors;
比如:應(yīng)用A在一個(gè)Node上啟動(dòng)Executor憔晒,B應(yīng)用也在同一個(gè)Node上啟動(dòng)Executor藻肄,他們各自的Executor是相互隔離的,運(yùn)行在不同的JVM上拒担。不同的應(yīng)用對應(yīng)不同的Executor嘹屯;
6、Job
包含很多task的并行計(jì)算澎蛛,spark中的一個(gè)action對應(yīng)一個(gè)job抚垄,如:collect、count、saveAsTextFile呆馁;
用戶提交的Job會(huì)提交給DAGScheduler桐经,Job會(huì)被分解成Stage(TaskSet) DAG;
RDD的transformation只會(huì)記錄對元數(shù)據(jù)的操作(map/filter)浙滤,而并不會(huì)真正執(zhí)行阴挣,只有action觸發(fā)時(shí)才會(huì)執(zhí)行job;
7纺腊、Stage
每****個(gè)Job會(huì)被拆分成多組任務(wù)畔咧,每組****任務(wù)****被稱為一個(gè)Stage,可稱為TaskSet;
一個(gè)stage的邊界往往是從某個(gè)地方取數(shù)據(jù)開始(如:sc.readTextFile)揖膜,在shuffle時(shí)(如:join誓沸、reduceByKey等)終止;
一個(gè)job的結(jié)束(如:count壹粟、saveAsTextFile等)往往也是一個(gè)stage的邊界拜隧;
有兩種類型的Stage:shuffle和result;
8趁仙、Task
被送到executor上的工作單元洪添;
spark分為2類task:
在Spark中有兩類Task:shuffleMapTask和ResultTask,第一類Task的輸出是shuffle所需數(shù)據(jù)雀费,第二類task的輸出是result干奢;
stage的劃分也以此為依據(jù),shuffle之前的所有變換是一個(gè)stage盏袄,shuffle之后的操作是另一個(gè)stage忿峻;
比如:rdd.parallize(1 to 10).foreach(println)這個(gè)操作沒有shuffle,直接就輸出了貌矿,那么它的task就是resulttask炭菌,stage也只有一個(gè);
如果rdd.map((x,1)).reduceByKey(+).foreach(println)逛漫,這個(gè)job因?yàn)橛衦educe,所以有個(gè)一shuffle過程赘艳,那么reduceByKey之前是一個(gè)stage酌毡,執(zhí)行shuffleMapTask,輸出shuffle所需要的數(shù)據(jù)蕾管,reduceByKey到最后是一個(gè)stage枷踏,直接就輸出結(jié)果了。
如果一個(gè)job中有多次shuffle掰曾,那么每個(gè)shuffle之前都是一個(gè)stage旭蠕;
9、Partition
partition類似hadoop的split,計(jì)算是以partition為單位進(jìn)行的
詳細(xì)信息參見官方文檔:http://spark.apache.org/docs/latest/cluster-overview.html
RDD: Resilient Distributed Dataset
RDD的特點(diǎn):
1掏熬、A list of **partitions **
一系列的分片:比如說64M一片佑稠;類似于Hadoop中的split;
2旗芬、A **function **for computing each split
在每個(gè)分片上都有一個(gè)函數(shù)去迭代/執(zhí)行/計(jì)算它
3舌胶、A list of **dependencies **on other RDDs
一系列的依賴:RDDa轉(zhuǎn)換為RDDb,RDDb轉(zhuǎn)換為RDDc疮丛,那么RDDc就依賴于RDDb幔嫂,RDDb就依賴于RDDa
4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
對于key-value的RDD可指定一個(gè)partitioner誊薄,告訴它如何分片履恩;常用的有hash,range
5呢蔫、Optionally, a list of **preferred location(s) **to compute each split on (e.g. block locations for an HDFS file)
要運(yùn)行的計(jì)算/執(zhí)行最好在哪(幾)個(gè)機(jī)器上運(yùn)行切心。數(shù)據(jù)本地性。
為什么會(huì)有哪幾個(gè)呢咐刨?
比如:hadoop默認(rèn)有三個(gè)位置昙衅,或者spark cache到內(nèi)存是可能通過StorageLevel設(shè)置了多個(gè)副本,所以一個(gè)partition可能返回多個(gè)最佳位置定鸟。
前三個(gè)特點(diǎn)對應(yīng)于Lineage而涉,后兩個(gè)對應(yīng)于Optimized
execution
分類: Spark