個人對 PySpark 的看法和見解

1. 介紹下爲什麼重新寫pyspark的博客

          很久沒寫過關於pyspark的博客了,最近工作中要用到,所以就重新撿起來了,事先說一下,我pyspark也不怎麼樣,一邊看官網、一邊自己查資料並總結出來的,有些大牛喜歡看源碼,對於我們這些人來說,會用就行,什麼原理暫時不說,等學會了有時間再去看,我自己從最開始的方法寫起,一個算子一個博客,結合他人的思路來多方面的介紹這個算子。

          寫博客的最主要的目的是給我自己看的,因爲我這人記性也不行,學了不用就忘,所以把自己一開始學習的思路、方法記下來,用到的時候搜下自己博客就行了,當然也給大家看的,讓大家在學習Pyspark的路上少走彎路。

 

2.  爲什麼要用到pyspark

          pyspark是用來處理大數據的,究竟多少算大的數據呢,幾十萬、幾百萬、幾千萬?或者以億爲單位的數據?我只前看過一些資料,記得是百萬級別的就算大數據了,我們要跑程序,我用過的高配的電腦最多16G內存,跑過最大的文件最多是2G,還是用readline()讀的,速度那叫一個慢啊,但是我又不怎麼會用pyspark,只能在本地處理了,要是文件再大一點怎麼辦,還是一行行讀嗎?這時候就必須用到集羣了,而現有的集羣就是hadoop和spark,hadoop基於磁盤的,IO開銷大,速度慢,所以就出來了spark這個框架,基於hadoop,spark是基於內存的,pyspark是spark用python寫的api接口,內存讀寫速度肯定比磁盤快。

 

3. pyspark和spark有什麼區別呢

       其實沒有什麼本質上的區別,只是pyspark是spark用python寫的api接口, 指定master同樣可以調用集羣資源,就是說我們可以用python的語法來做處理大數據,但是pyspark有自己定義的規則和語法,一些處理數據的常用方法他們都給我們封裝好了,我們直接用就行。我目前明白了一些東西,我不知道我講的對不對,這是基於我個人的看法和實際上遇到的情況總結出來的,也許以後會有其他看法。

 

4. 個人對集羣的看法

        其實在集羣上跑pyspark代碼,和我們在本地跑python代碼沒有什麼本質的區別,宏觀來講,就是處理的數據量不同而已;微觀來講,就是都要遵循各個方式的規則,比如語法、變量等一些方面上不同,集羣的話功能複雜,規則、方法也多。

        簡單來說,就是我們自己的電腦來跑數據,少量的還行,數據量大了,怎麼辦,內存處理不過來?有人就說,簡單啊,加內存條,好,我加了,但是數據量又比前面翻了幾番,怎麼辦?又有人說,接着加唄,但是電腦裝內存條是有限度的,好像最多能加到64G,我見過最大的也就是32G,但是數據量已經超過了64G怎麼吧,總不能等內存慢慢處理吧。有人說,那就換個方式唄,加內存不行,我把數據拆開不就行了,一份拆成10份,一臺電腦處理一份,這不就行了。好了,到這,就進入到正題了,數據拆分成了10份,我們是不是得把他全部都聚合到一塊,這又是一個耗時操作,還得通過數據庫或者文件等一些形式進行中轉,怎麼辦?又有人說,簡單啊,把這10臺機器連一塊就行了唄,這是就又有人提問了,幹嘛要10臺機器這麼麻煩,把10臺機器的配置加到一臺機器上就行了,還省的維護那麼多臺機器,直接看做一臺電腦加了無限大的內存條, 多簡單,咳咳,本人之前就是這麼想的,要什麼大數據框架,什麼分佈式數據庫,多麻煩啊,還得重新學這麼多東西,一臺電腦上連他個1000G的內存條,就不信處理不了,當時我還是太天真了,爲什麼這麼說呢,首先就是電腦自身問題,只有一臺機器,假如這臺機器壞了怎麼辦,遇到個坑爹的win10,自動藍屏更新重啓(本人跑了三天的數據就是被這個坑了,中途藍屏重啓),徹底涼涼;還有就是數據本身存儲問題,跑完了的數據放到本地,假如被損壞,或者丟失了怎麼辦?等等這些原因,我們不得不用集羣了,集羣有什麼好處呢? 

       1. 出現任何故障,如:硬盤、內存、CPU、主板、I/O板以及電源故障,運行在這臺服務器上的應用就會切換到其它的服務器上。

       2.、集羣系統可解決軟件系統問題,我們知道,在計算機系統中,用戶所使用的是應用程序和數據,而應用系統運行在操作系統之上,操作系統又運行在服務器上。這樣,只要應用系統、操作系統、服務器三者中的任何一個出現故障,系統實際上就停止了向客戶端提供服務,比如我們常見的軟件死機,就是這種情況之一,儘管服務器硬件完好,但服務器仍舊不能向客戶端提供服務。而集羣的最大優勢在於對故障服務器的監控是基於應用的,也就是說,只要服務器的應用停止運行,其它的相關服務器就會接管這個應用,而不必理會應用停止運行的原因是什麼。

網上比較官方的說法:       

       1. 高可伸縮性:服務器集羣具有很強的可伸縮性。隨着需求和負荷的增長,可以向集羣系統添加更多的服務器。在這樣的配置中,可以有多臺服務器執行相同的應用和數據庫操作。

       2. 高可用性:高可用性是指,在不需要操作者干預的情況下,防止系統發生故障或從故障中自動恢復的能力。通過把故障服務器上的應用程序轉移到備份服務器上運行,集羣系統能夠把正常運行時間提高到大於99.9%,大大減少服務器和應用程序的停機時間。

       3. 高可管理性:系統管理員可以從遠程管理一個、甚至一組集羣,就好像在單機系統中一樣。


通俗來講,就是兩個字 牛逼

 

4. 爲什麼有pyspark

          因爲有很多人不會編程,但是又要處理大批量數據,又不想假與他人之手,只能自己幹,pyspark中可以使用SQL語法來處理數據,這樣的話就有很多人能滿足條件了。

       要是數據再複雜一點或者想更好的處理數據的話怎麼辦?學門python語言唄,都說python是最好學的語言,學點基礎語法,然後使用pyspark中的rdd算子,多簡單啊。

 

5.. 我爲什麼選pyspark

        註解:(我知道的目前處理大數據最常用的三種語言:java、scala、python)

        1.因爲lz只會python,大學學的C和C++全都還給老師了。

        2. java太龐大了,而且語法複雜,連一句輸出都得寫個類, 學了python的我看的實在是太難受了(自學過一週放棄了)。

        3. scala和java語法七八分相似,去學scala我還不如學java的呢。

        4. pyspark處理數據也不比java和scala差,把pyspark學深一樣可以開心的玩耍。

 

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