最近老大讓用spark
做乙個etl專案,搭建了一套只有三個結點standalone模式的spark集群做測試,基礎資料量大概8000w左右。看了官方文件,spark確實在map-reduce上提公升了很多,可是官方明確提出了在interactive data
方面效能提公升最大。但是做etl的資料之間是平行結構,沒有任何互動,資料處理完直接就推送走了,也不用做任何快取,因此完全體現不出來spark的優勢。具體可以用下面這個例子來說,
假設hadoop集群中有乙個檔案,每行有乙個隨機數,我們現在需要計算這些資料的方差 (假設中間過程不會溢位)那麼計算過程可以表示為
方差公式
var file = sc.textfile("hdfs:")這個過程很簡單,但是可以體現出這個互動的過程。file 是乙個file.persist()
var length = file.count()
var sum = file.reduce((a, b) => a+b)
var sqsum = file.map(line => line * line).reduce( (a,b) => a+b )
var variance = sqsum / length / - sum * sum / length / length
rdd
,這個例子有且僅有乙個rdd。spark中對rdd的操作有兩類transformation
和action
,transformation
是乙個延時的過程,只有當具體的action
應用時,才會對具體的資料做運算。spark的容錯機制也正是根據了transformation
對rdd進行了lineage
的推算,即使在某個結點在某種狀態下資料丟失,也可以根據記錄的transformations
推算出當前請求的rdd資料集。 扯遠了,還是看上面這個例子,
var file = sc.textfile("hdfs:")這裡不會立即去集群讀取這個檔案,而是會延遲到後面具體的
action
例如count()
時,才會遍歷檔案。獲取所有資料的長度,需要讀取一次dataset.txt這個檔案,集群中遍歷這個檔案雖然很快,但是下一次在求和與平方和時,又需要遍歷兩次次這個檔案,那麼差別就來了
map - reduce 程式是需要三次io,集群需要從hdfs上三次獲取這個檔案進行遍歷這個例子很簡單,那麼我們在做spark 能夠將 file 這個rdd快取在集群的共享記憶體中,那麼在處理時實際上只有一次io,另外兩次遍歷直接從記憶體讀取
資料探勘
或者迭代運算
時,這樣的互動行為會很多,需要快取的中間資料集也會有很多,那麼在map-reduce過程中,由於沒有記憶體快取的機制,只有將中間狀態快取到hdfs中,而spark通過快取避免了這些io,效率就提公升了。 駕駛行為分析及其應用場景初探
隨著車聯網的迅猛發展,基於行駛資料的大資料分析正在變得越來越火。今天,我們就來聊聊其中的駕駛行為分析及其應用的話題。什麼是駕駛行為?個人認為它就是駕駛員駕駛汽車行駛過程中的一系列行為組合。它涉及環境因素 心理因素 性格因素等方方面面。為什麼要做駕駛行為分析?說白了,就是通過及時發現並干預不良的駕駛行...
Spark的應用場景
spark的生態圈 1.spark的設計遵循 乙個軟體棧滿足不同應用場景 的理念,逐漸形成一套完整的生態系統 2.spark可以部署在資源管理器yarn之上,提供一站式大資料解決方案 3.spark所提供的的生態系統可對應以下三種場景 複雜的批量資料處理 通常時間跨度在數十分鐘到數小時之間 基於歷史...
SQLite及其應用場景
sqlite是乙個庫 software library 檔案資料庫 它可以將資料庫的所有表 索引 檢視等儲存乙個單獨的檔案裡 a single disk file 特點 應用場景當交付乙個應用程式時,並不需要額外安裝 和配置rdbms服器。嵌入式系統 embedded devices 檔案檔案 fi...