spark作為乙個新的分布式計算引擎正慢慢流行起來,越來越來的企業也準備用它的替換mapreduce,根據自己在工作的一些體會談談的優勢。
分布式計算歸根到底還是乙個map和reduce操作,map操作對每個資料塊進行計算,reduce操作對結果進行彙總,現在一些nosql分布式資料庫其實也是這麼一套計算框架,只是map和reduce太基礎,太簡陋,實現相關的業務時開發比較複雜,不符合生產力發展的需求,這樣spark對map和reduce進行了抽象和封裝提出了rdd的概念
rdd的提出是spark的最大的進步,它讓我們不再關注計算本身,以前我們老想著map,reduce啥的,rdd對資料集進行抽象,我們的關注點變成了資料集本身,又借鑑了函式式程式設計的一些思想,我們可以對資料集做各種各樣的操作(spark的transformation和action),spark框架底層轉換了map和reduce的操作,大大的提高了生成力。當然還加入了一些優化,比如map的輸出不需要落地,其實要做大資料的計算怎麼可能不落地。做大資料的聚集操作時磁碟和網路io依舊是制約速度的主要原因
spark提供了更加靈活的dag程式設計模型,在spark,每乙個rdd用來描述資料集的乙個狀態,而這個狀態是從上乙個狀態轉換過來的,因此rdd之間會形成乙個依賴關係,這種rdd的依賴鏈會觸發乙個job,而job會被切分成乙個stage的dag圖。給了job很大的優化空間,目前dag減少了資料的讀寫(緩衝在記憶體中)和網路的傳輸(寬依賴和窄依賴),用於迭代和互動計算支援。 傳統的mapreduce為了進行迭代計算,需要多個job進行依賴,資料要不停的在hdfs上進行讀寫,效能大大降低。
還乙個優化就是spark的作業排程。spark的job是執行緒級別的,而spark sql中乙個sql就是乙個job, sql的執行輕量很多。hive的job是程序級別的,乙個sql就是乙個job,需要啟動多個jvm程序。
我對DataFrame的理解(Spark)
以下鏈結為spark sql中的dataframe api dataframe 官方說明 在spark中,dataframe是乙個以命名列方式組織的分布式資料集,等同於關係型資料庫中的乙個表,也相當於r python中的data frames 但是進行了更多的優化 dataframes可以由結構化資...
對spark中RDD的理解
update at 2016.1.25 rdd作者的 鏈結 的理解 spark要解決的問題 1 有些資料要多次讀寫,磁碟速度很慢 2 沒有互動的介面,不能看到中間結果 適用的應用 1 機器學習 多個迭代次運算,逼近 優化問題 是不是三維重建中優化也可以用到這個 2 計算結果還要用的 pagerank...
Spark 快速理解
是什麼 目標scope 解決什麼問題 在大規模的特定資料集上的迭代運算或重複查詢檢索 官方定義 amapreduce like cluster computing framework designed for low latency iterativejobs and interactive use...