Spark教程(一)爲什麼要學spark

介紹

Apache Spark是一個開源集羣運算框架,最初是由加州大學柏克萊分校AMPLab所開發。相對於Hadoop的MapReduce會在運行完工作後將中介數據存放到磁盤中,Spark使用了存儲器內運算技術,能在數據尚未寫入硬盤時即在存儲器內分析運算。

Spark在存儲器內運行程序的運算速度能做到比Hadoop MapReduce的運算速度快上100倍,即便是運行程序於硬盤時,Spark也能快上10倍速度。Spark允許用戶將數據加載至集羣存儲器,並多次對其進行查詢,非常適合用於機器學習算法

Spark也支持僞分佈式(pseudo-distributed)本地模式,不過通常只用於開發或測試時以本機文件系統取代分佈式存儲系統。在這樣的情況下,Spark僅在一臺機器上使用每個CPU核心運行程序。

Apache Spark™ is a unified analytics engine for large-scale data processing.

優勢

  1. 首先,Spark爲我們提供了一個全面、統一的框架用於管理各種有着不同性質(文本數據、圖表數據等)的數據集和數據源(批量數據或實時的流數據)的大數據處理的需求。
  2. Spark可以將Hadoop集羣中的應用在內存中的運行速度提升100倍,甚至能夠將應用在磁盤上的運行速度提升10倍。
  3. Spark讓開發者可以快速的用Java、Scala或Python編寫程序。它本身自帶了一個超過80個高階操作符集合。而且還可以用它在shell中以交互式地查詢數據。
  4. 除了Map和Reduce操作之外,它還支持SQL查詢,流數據,機器學習和圖表數據處理。開發者可以在一個數據管道用例中單獨使用某一能力或者將這些能力結合在一起使用。

親身體會

經過這兩週的折騰,總算是在本地環境下完成了第一個spark項目,完成十萬級文本分詞和去重,速度還是挺快的,從讀取數據、處理數據、再到保存數據,大概花了十分鐘左右。這裏操作的數據庫都是MongoDB,因爲爬蟲爬取的數據都是直接保存到Mongo。

之後再增加數據量,達到四千多萬,讀取數據花了8分鐘,下圖是正在處理和保存數據的Spark UI

以前處理數據會使用pandas,數據會保存在內存中,數據量過大就會崩了,這也是爲什麼要使用分佈式計算的原因。沒有做過橫向對比,暫時還不知道有多大差別。

最後花了1.3h,本地處理完了四千多萬數據,CPU和內存都要炸了,看來以後計算部分還是要搭集羣。

學習計劃

我在Github上開了一個倉庫,記錄所學,地址在原文鏈接中。

剛開始使用的語言還是Python,目標是學Scala,看了些基礎語法,和Python挺類似的,以後多寫寫,維持這個項目,記錄各種坑。

ok,BB了這麼多,下一篇就要開始真正的代碼實戰了。

爲什麼學spark,因爲想要升職加薪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章