[转]Spark能否取代Hadoop?
大數據的浪潮風靡全球的時候,Spark火了。在國外 Yahoo!、Twitter、Intel、Amazon、Cloudera 等公司率先應用并推廣 Spark 技術,在國內阿里巴巴、百度、淘寶、騰訊、網易、星環等公司敢為人先,并樂于分享。在隨后的發展中,IBM、Hortonworks、微策略等公司紛紛將 Spark 融進現有解決方案,并加入 Spark 陣營。Spark 在IT業界的應用可謂星火燎原之勢。?
創新都是站在巨人的肩膀上產生的,在大數據領域Spark也不例外。在 Spark 出現前,要在一個平臺內同時完成批處理、各種機器學習、流式計算、圖計算、SQL 查詢等數種大數據分析任務,就不得不與多套獨立的系統打交道,這需要系統間進行代價較大的數據轉儲,但是這無疑會增加運維負擔。Spark一開始就瞄準了性能,實現了在內存中計算。
1.Spark為啥這么火?Spark框架采用的編程語言是什么?是否容易上手?
Spark是基于內存的迭代計算框架,適用于需要多次操作特定數據集的應用場合,如pageRank、K-Means等算法就非常適合內存迭代計算。Spark整個生態體系正逐漸完善中,GraphX 、 SparkSQL、 SparkStreaming 、 MLlib,等到Spark有了自己的數據倉庫后,那就完全能與Hadoop生態體系相媲美。 Spark框架采用函數式編程語言Scala,Scala語言的面向對象、函數式、高并發模型等特點,使得Spark擁有了更高的靈活性及性能。如果你學過java,可能會對scala中的一些新概念表示陌生,如隱式轉換、模式匹配、伴生類等,但一旦入門,你會感覺scala語言的簡潔與強大。
2. Spark能否成為Hadoop的替代者呢?為什么?它們有哪些相似點與區別?
兩者的側重點不同,使用場景不同,個人認為沒有替代之說。Spark更適合于迭代運算比較多的ML和DM運算。因為在Spark里面,有RDD的概念。RDD可以cache到內存中,那么每次對RDD數據集的操作之后的結果,都可以存放到內存中,下一個操作可以直接從內存中輸入,省去了MapReduce大量的磁盤IO操作。但是,我們也要看到spark的限制:內存。我認為Hadoop雖然費時,但是在OLAP等大規模數據的應用場景,還是受歡迎的。目前Hadoop涵蓋了從數據收集、到分布式存儲,再到分布式計算的各個領域,在各領域都有自己獨特優勢。
3. 作為一種內存的迭代計算框架,Spark適用哪些場景??
適用于迭代次數比較多的場景。迭代次數多的機器學習算法等。如pageRank、K-Means等。
4. 淘寶為什么會選擇Spark計算框架呢??
這主要基于淘寶業務的應用場景,其涉及了大規模的數據處理與分析。其主要是應用Spark的GraphX圖計算,以便進行用戶圖計算:基于最大連通圖的社區發現、基于三角形計數的關系衡量、基于隨機游走的用戶屬性傳播等。
5.Mesos 是一個能夠讓多個分布式應用和框架運行在同一集群上的集群管理平臺。那么它是如何來調度和運行Spark的呢?
目前在Spark On Mesos環境中,用戶可選擇兩種調度模式之一運行自己的應用程序 粗粒度模式(Coarse-grained Mode):每個應用程序的運行環境由一個Dirver和若干個Executor組成,其中,每個Executor占用若干資源,內部可運行多個Task(對應多少個“slot”)。應用程序的各個任務正式運行之前,需要將運行環境中的資源全部申請好,且運行過程中要一直占用這些資源,即使不用,最后程序運行結束后,回收這些資源。舉個例子,比如你提交應用程序時,指定使用5個executor運行你的應用程序,每個executor占用5GB內存和5個CPU,每個executor內部設置了5個slot,則Mesos需要先為executor分配資源并啟動它們,之后開始調度任務。另外,在程序運行過程中,mesos的master和slave并不知道executor內部各個task的運行情況,executor直接將任務狀態通過內部的通信機制匯報給Driver,從一定程度上可以認為,每個應用程序利用mesos搭建了一個虛擬集群自己使用。 細粒度模式(Fine-grained Mode):鑒于粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種調度模式:細粒度模式,這種模式類似于現在的云計算,思想是按需分配。與粗粒度模式一樣,應用程序啟動時,先會啟動executor,但每個executor占用資源僅僅是自己運行所需的資源,不需要考慮將來要運行的任務,之后,mesos會為每個executor動態分配資源,每分配一些,便可以運行一個新任務,單個Task運行完之后可以馬上釋放對應的資源。每個Task會匯報狀態給Mesos slave和Mesos Master,便于更加細粒度管理和容錯,這種調度模式類似于MapReduce調度模式,每個Task完全獨立,優點是便于資源控制和隔離,但缺點也很明顯,短作業運行延遲大。
6.Spark 為什么會選擇彈性分布式數據集(RDD)作為它的數據存儲核心?而不是分布式共享內存(Distributed Shared Memory)DSM?它們有哪些區別?
RDD是Spark的最基本抽象,是對分布式內存的抽象使用,實現了以操作本地集合的方式來操作分布式數據集的抽象實現。RDD是Spark最核心的東西,它表示已被分區,不可變的并能夠被并行操作的數據集合,不同的數據集格式對應不同的RDD實現。RDD必須是可序列化的。RDD可以cache到內存中,每次對RDD數據集的操作之后的結果,都可以存放到內存中,下一個操作可以直接從內存中輸入,省去了MapReduce大量的磁盤IO操作。這對于迭代運算比較常見的機器學習算法, 交互式數據挖掘來說,效率提升比較大。 RDD只能從持久存儲或通過Transformations操作產生,相比于分布式共享內存(DSM)可以更高效實現容錯,對于丟失部分數據分區只需根據它的lineage就可重新計算出來,而不需要做特定的Checkpoint。
7.Spark on YARN與Spark有啥區別?
讓Spark運行在一個通用的資源管理系統(如yarn)之上,最大的好處是降低運維成本和提高資源利用率(資源按需分配),部分容錯性和資源管理交由統一的資源管理系統完成。而spark單獨是無法有效提高資源利用率。
8.有人覺得,大數據時代,最精髓的IT技術是Hadoop ,Yarn,Spark,您是否體驗過?看好哪個??
Yarn不就是Hadoop MapReduce新框架嗎,這里為何要單獨列出。個人認為當下Hadoop生態體系相當龐大,且技術日趨成熟,Spark還有待發展。如果有一天,Hadoop加進內存計算模型,到時,Spark又會是怎樣的處境呢?
轉載于:https://www.cnblogs.com/DarrenChan/p/6729289.html
總結
以上是生活随笔為你收集整理的[转]Spark能否取代Hadoop?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装和卸载C#写的 windows se
- 下一篇: 类继承、组合和抽象类