Spark 快速理解

2021-09-07 05:16:16 字數 2478 閱讀 2605

**:

==是什麼==

目標scope(解決什麼問題)

在大規模的特定資料集上的迭代運算或重複查詢檢索

官方定義

amapreduce-like cluster computing framework designed for low-latency iterativejobs and interactive use from an interpreter

個人理解

首先,mapreduce-like是說架構上和多數分布式計算框架類似,spark有分配任務的主節點(driver)和執行計算的工作節點(worker)

其次,low-latency基本上應該是源於worker程序較長的生命週期,可以在乙個job過程中長駐記憶體執行task,減少額外的開銷

然後對interative重複迭代類查詢運算的高效支援,是spark的出發點了。最後它提供了乙個基於scala的shell方便互動式的解釋執行任務

==如何實現==

核心思路,架構

rdd:spark的核心概念是rdd (resilientdistributed dataset),指的是乙個唯讀的,可分割槽的分布式資料集,這個資料集的全部或部分可以快取在記憶體中,在多次計算間重用。

lineage:利用記憶體加快資料載入在眾多的其它的in-memory類資料庫或cache類系統中也有實現,spark的主要區別在於它處理分布式運算環境下的資料容錯性(節點實效/資料丟失)問題時採用的方案。為了保證rdd中資料的魯棒性,rdd資料集通過所謂的血統關係(lineage)記住了它是如何從其它rdd中演變過來的。相比其它系統的細顆粒度的記憶體資料更新級別的備份或者log機制,rdd的lineage記錄的是粗顆粒度的特定資料變換(transformation)操作(filter, map, join etc.)行為。當這個rdd的部分分割槽資料丟失時,它可以通過lineage獲取足夠的資訊來重新運算和恢復丟失的資料分割槽。這種粗顆粒的資料模型,限制了spark的運用場合,但同時相比細顆粒度的資料模型,也帶來了效能的提公升。

總之,spark的核心思路就是將資料集快取在記憶體中加快讀取速度,同時用lineage關聯的rdd以較小的效能代價保證資料的魯棒性。

適用領域

正如其目標scope,spark適用於需要多次操作特定資料集的應用場合。需要反覆操作的次數越多,所需讀取的資料量越大,受益越大,資料量小但是計算密集度較大的場合,受益就相對較小。

細節使用記憶體快取資料集快在**?主要是幾個方面:首先是磁碟io,其次資料的序列化和反序列化的開銷也節省了,最後相對其它記憶體資料庫系統,粗顆粒度的記憶體管理機制減小了資料容錯的代價(如典型的資料備份複製機制)

==相關專案==

上下游專案

構建在spark上處理stream資料的框架,基本的原理是將stream資料分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分資料。個人理解構建在spark上的原因大概是因為spark的低延遲執行引擎(100ms+)勉強可以用於實時處理,而spark的核心理念資料重用和流式資料處理本身並沒有直接的交集,相反個人感覺流式資料的無窮連續性的特性一定程度上和資料重用是衝突的。相比基於record的其它處理框架(如storm),rdd資料集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時相容批量和實時資料處理的邏輯和演算法。方便了一些需要歷史資料和實時資料聯合分析的特定應用場合。

discretized streams, 離散化的流資料處理

shark基本上就是在spark的框架基礎上提供和hive一樣的h iveql命令介面,為了最大程度的保持和hive的相容性,shark使用了hive的api來實現query parsing和logic plan generation,最後的physicalplan   execution階段用spark代替hadoop mapreduce。通過配置shark引數,shark可以自動在記憶體中快取特定的rdd,實現資料重用,進而加快特定資料集的檢索。同時,shark通過udf使用者自定義函式實現特定的資料分析學習演算法,使得sql資料查詢和運算分析能結合在一起,最大化rdd的重複使用。

類似專案

twister :

大概的意思也是通過cache資料,實現迭代的mapreduce過程中的資料重用,不過它的模型貌似相對簡單些,大致是通過拓展mapreduce api,分發管理快取資料,然後通過自己的daemon程序管理和分配mapreduce task到cache對應的節點上,容錯性和計算模型方面沒有shark的rdd來得精巧和通用。

haloop:和twister類似,修改擴充套件了mapreduce框架,增加了迴圈邏輯和data caching

==相關文獻==

專案首頁

shark專案主頁

*******

==其它==

主要實現和程式設計介面基於scala

spark官方文件 Spark快速開發框架

本人從 2014 年開始使用 apache spark,基於以往專案經驗,為了降低專案開發複雜度,減少開發成本,開發了 light spark 框架。本框架遮蔽了底層技術細節,讓開發人員面向 sql 程式設計,更專注於業務邏輯,減少開發過程中 debug 工作,讓 apache spark 更方便使...

Spark機器學習 Day2 快速理解機器學習

有兩個問題 機器學習到底是什麼。大資料機器學習到底是什麼。人正常思維的過程是根據歷史經驗得出一定的規律,然後在當前情況下根據這種規律來 當前的情況下該怎麼做,這種過程就是乙個機器學習的過程。我們可以發現,這個過程裡有規律和當前的情況。規律就是模型,當前情況就是當前的資料,會根據當前的情況會根據不同的...

對Spark的理解

spark作為乙個新的分布式計算引擎正慢慢流行起來,越來越來的企業也準備用它的替換mapreduce,根據自己在工作的一些體會談談的優勢。分布式計算歸根到底還是乙個map和reduce操作,map操作對每個資料塊進行計算,reduce操作對結果進行彙總,現在一些nosql分布式資料庫其實也是這麼一套...