#
Spark的整體流程為:Client 提交應用,Master找到一個Worker啟動Driver,Driver向Master或者資源管理器申請資源,之后將應用轉化為RDD Graph,再由DAGScheduler將RDD Graph轉化為Stage的有向無環圖提交給TaskScheduler,由TaskScheduler提交任務給Executor執行。在任務執行的過程中,其他組件協同工作,確保整個應用順利執行。
Spark架構采用了分布式計算中的Master-Slave模型。Master是對應集群中的含有Master進程的節點(ClusterManager),Slave是集群中含有Worker進程的節點。Master作為整個集群的控制器,負責整個集群的正常運行;Worker相當于是計算節點,接收主節點命令與進行狀態匯報;Executor負責任務的執行;Client作為用戶的客戶端負責提交應用,Driver負責控制一個應用的執行,如圖下圖:

Spark 框架圖
Spark集群部署后,需要在主節點和從節點分別啟動Master進程和Worker進程,對整個集群進行控制。在一個Spark應用的執行過程中,Driver和Worker是兩個重要角色。Driver 程序是應用邏輯執行的起點,負責作業的調度,即Task任務的分發,而多個Worker用來管理計算節點和創建Executor并行處理任務。在執行階段,Driver會將Task和Task所依賴的file和jar序列化后傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理。
Spark的架構中的基本組件介紹:
ClusterManager:在Standalone模式中即為Master(主節點),控制整個集群,監控Worker。在YARN模式中為資源管理器。
Worker:從節點,負責控制計算節點,啟動Executor或Driver。在YARN模式中為NodeManager,負責計算節點的控制。
Driver:運行Application的main()函數并創建SparkContext。
Executor:執行器,在worker node上執行任務的組件、用于啟動線程池運行任務。每個Application擁有獨立的一組Executors。
SparkContext:整個應用的上下文,控制應用的生命周期。
RDD:Spark的基本計算單元,一組RDD可形成執行的有向無環圖RDD Graph。
DAG Scheduler:實現將Spark作業分解成一到多個Stage,每個Stage根據RDD的Partition個數決定Task的個數,然后生成相應的Task set放到TaskScheduler中。
TaskScheduler:將任務(Task)分發給Executor執行。
Stage:一個Spark作業一般包含一到多個Stage。
Task:一個Stage包含一到多個Task,通過多個Task實現并行運行的功能。
Transformations:轉換(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是說從一個RDD轉換生成另一個RDD的操作不是馬上執行,Spark在遇到Transformations操作時只會記錄需要這樣的操作,并不會去執行,需要等到有Actions操作的時候才會真正啟動計算過程進行計算。
Actions:操作(Actions) (如:count, collect, save等),Actions操作會返回結果或把RDD數據寫到存儲系統中。Actions是觸發Spark啟動計算的動因。
SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。
SparkEnv內創建并包含如下一些重要組件的引用。
MapOutPutTracker:負責Shuffle元信息的存儲。
BroadcastManager:負責廣播變量的控制與元信息的存儲。
BlockManager:負責存儲管理、創建和查找塊。
MetricsSystem:監控運行時性能指標信息。
SparkConf:負責存儲配置信息。

Spark運行邏輯圖
在Spark應用中,整個執行流程在邏輯上會形成有向無環圖(DAG)。Action算子觸發之后,將所有累積的算子形成一個有向無環圖,然后由調度器調度該圖上的任務進行運算。Spark的調度方式與MapReduce有所不同。Spark根據RDD之間不同的依賴關系切分形成不同的階段(Stage),一個階段包含一系列函數執行流水線。圖中的A、B、C、D、E、F分別代表不同的RDD,RDD內的方框代表分區。數據從HDFS輸入Spark,形成RDD A和RDD C,RDD C上執行map操作,轉換為RDD D, RDD B和 RDD E執行join操作,轉換為F,而在B和E連接轉化為F的過程中又會執行Shuffle,最后RDD F 通過函數saveAsSequenceFile輸出并保存到HDFS或 Hbase中
【習慣】
乞丐到小王家乞討,他給十塊,第二天乞丐又去,又給十塊,持續兩年。一天只給五塊,乞丐:以前給十塊,怎么現在給五塊?小王:我結婚了。乞丐一巴掌打過去:媽的,你竟拿我的錢去養你老婆?啟示:當提供免費服務讓客戶成為一種習慣,這種服務就不再是優勢,而是劣勢。
【窮人】
窮人問佛:我為什么這樣窮?佛說:你沒有學會給予別人。窮人:我一無所有如何給予?佛:一個人一無所有也可以給予別人七種東西。顏施-微笑處事;言施-說贊美安慰的話;心施-敞開心扉對人和藹;眼施-善義的眼光給予別人;身施-以行動幫助別人;座施-即謙讓座位;房施-有容人之心。
【經典故事】
老虎抓到一頭鹿后要把它吃掉!鹿說:“你不能吃我!”老虎愣了一下,問:“為什么?”鹿:“因為我是國家二級保護動物!”老虎大笑道:“總不能為了二級保護動物而讓一級保護動物餓死吧?!”感悟:時刻保持危機感,不要讓自己那點優勢害死。
【夫妻】
夫婦逛商場,女的看中一套高檔餐具,堅持要買,丈夫嫌貴,不肯掏錢。導購一看,悄悄對丈夫說了句話,他一聽馬上掏錢。是什么讓他立馬轉變?導購員對丈夫說:“這么貴的餐具,你太太是不會舍得讓你洗碗的。”啟示:人的觀念沒有什么不可改變,關鍵是角度,要善于揣摩客戶心理。
【班花】
女生公開投票選班花,相貌平平的小梅發表演說:如我當選,再過幾年,在座姐妹可以向自己先生驕傲的說,我上大學時候,比班花還漂亮!結果,她全票當選——啟示:說服別人支持你,不一定要證明比別人都優秀,而是讓別人覺得,因為有你,他們變得更優秀更有成就感。
【管理的弊端】
女孩買了條褲子,一試太長,請奶奶幫忙剪短,奶奶說忙;找媽媽,也沒空;找姐姐,更沒空。女孩失望地入睡了。奶奶忙完家務想起小孫女的褲子,就把褲子剪短了一點;姐姐回來又把褲子剪短了;媽媽回來也把褲子剪短了,最后褲子沒法穿了。——管理的弊端就在于:要么都不管,要么都來管!
【杯子】
當一只玻璃杯中裝滿牛奶的時候,人們會說“這是牛奶”;當改裝菜油的時候,人們會說“這是菜油”。只有當杯子空置時,人們才看到杯子,說“這是一只杯子”。同樣,當我們心中裝滿成見、財富、權勢的時候,就已經不是自己了;人往往熱衷擁有很多,卻往往難以真正的擁有自己。
【碗破的啟示】
一個賣瓷碗的老人挑著扁擔在路上走著,突然一個瓷碗掉到地上摔碎了,但是老人頭也不回地繼續向前走。路人看到覺得很奇怪,便問:“為什么你的碗摔碎了你卻不看一下呢?”老人答到:“我再怎么回頭看,碗還是碎的。”你得到什么啟示呢?
【要害與敏感關鍵點】
公司在男廁小便池上貼了一紙條:“往前一小步,文明一大步。”結果地上仍有許多尿漬。后來公司認真吸取教訓,紙條改成:“尿不到池里說明你短;尿到池外說明你軟”,結果地上比以前干凈許多。啟示:有時揚其長不如揭其短!給客戶的提案要具體并準確地切中其要害與敏感關鍵點才有效。
【個人與團隊】
老師問弟子:一滴水如何能不干枯?弟子沉默不語。老師說道:一滴水,風可以將它吹干、土可以把它吸干、太陽可以把它蒸發,要想要不干枯,只有讓它融入大海。一個人無力獨撐天下,要想獲得成功,就得學會與人合作,獨木難林,這就是我們常說的:再強大的個人都不如一個團結的組織。
【比耐力】
兩只烏龜在田邊相對一動不動,老農對一旁的專家說:它們在比耐力,誰先動誰就輸了。專家指著一只龜殼上有甲骨文的烏龜說:據我多年研究,這只烏龜已死五千多年了。另一只烏龜伸出頭來說:死了也不說一聲,害得老子在這里干等。裝死的烏龜大笑說:你輸了吧,專家的話你也聽!
【經驗與學歷】
一伙劫匪在搶銀行時說了句至理名言:“通通不許動,錢是國家的,命是自己的!”劫匪回去后,其中一新來的碩士劫匪說,老大,我們趕快數一下搶了多少,那老劫匪(小學文化)說:“你傻啊?這么多,你要數到什么時候?今天晚上看新聞不就知道嗎?”網友微評:這年頭工作經驗比學歷更重要!
【值得思考】
某人買了一壇好酒,放在小院,第二天,酒少了1/5,便在酒桶上貼了不許偷酒四個字。第三天酒又少了2/5,又貼了偷酒者重罰。第四天,酒還是被偷,于是貼尿桶二字,看誰還喝。第五天他哭了。桶滿了……故事還沒完,第六天,他再次在酒桶上貼了不許偷酒四字。那一天很多人都哭了。
【鸚鵡與烏鴉】
鸚鵡遇到烏鴉,籠中的鸚鵡安逸;野外的烏鴉自由。鸚鵡羨慕烏鴉自由,烏鴉羨慕鸚鵡安逸,二鳥便商議互換。烏鴉得到安逸,但難得主人歡喜,最后抑郁而死;鸚鵡得到自由,但長期安逸,不能獨立生存,最終饑餓而死。做最好的自己,不要羨慕他人的幸福,也許那并不適合你。
【頓悟】
老師問:“有個人要燒壺開水,生火到一半時發現柴不夠,他該怎么辦?”有的同學說趕快去找,有的說去借、去買。老師說:“為什么不把壺里的水倒掉一些?”。同學頓悟,世事總不能萬般如意,有舍才有得。人生的許多尋找,不在于千山萬水,而在于咫尺之間。
【化妝品】
朋友剛結婚不久,開了家化妝品店,生意好得不得了。有天我去店里玩,見一40多歲的女顧客問小李:“這款化妝品效果怎么樣?”小李:“哦,這款我不熟悉。請等一下,我媽幫你介紹。”說著把他老婆拉了過來。顧客直視其老婆足足十分鐘,什么也沒問就掏出錢包:“買"。
【營銷哲學】
害羞男孩在教室自習,看到一個很中意的女孩,眼看女孩看完書要離開了,害羞的男孩憋紅了臉上前搭訕:同學能借我10塊錢吃面條嗎?錢包丟宿舍了,這是我的學生證,你給我手機號,回頭還你錢。女孩想了想說:行吧。正掏錢,男孩又說:要是能借20,我請你也吃一碗。
【瑣事】
一只鼬鼠要與一只獅子決戰,獅子果斷地拒絕了。鼬鼠說:“你害怕了嗎?”獅子說:“如果答應你,你就可以得到曾與獅子比武的殊榮;而我呢,以后所有的動物都會恥笑我竟和鼬鼠打架。”不要被不重要的人和事過多打攪,因為成功的秘訣就是抓住目標不放,而不是把時間浪費在無謂的瑣事上。
【銷售心理】
某富翁娶妻,有三個人選,富翁給了三個女孩各一千元,請她們把房間裝滿。女孩A買了很多棉花,裝滿房間的1/2。女孩B買了很多氣球,裝滿房間3/4。女孩C買了蠟燭,讓光充滿房間。最終,富翁選了胸部最大的那個。這個故事告訴我們:了解客戶的真實需求非常重要。
【有效溝通】
兩頭牛在一起吃草,青牛問黑牛:“喂!你的草是什么味道?”黑牛道:“草莓味!”青牛靠過來吃了一口,憤怒地喊到“你個騙子!”黑牛輕蔑地看他一眼,回道:“我說草沒味。”啟示:團隊合作、管理過程中,能否有效溝通、掌握有效溝通渠道是凝聚競爭力,強化執行力,提升業績的關鍵。
美女住酒店一晚
結賬時賬單800元,她抱怨太貴。經理說這是標準收費,酒店附設泳池、健身房和wifi。美女說自己完全沒使用,經理說飯店有提供,是她自己不用。女客人打開皮包掏錢付賬,但說要扣除經理和她共度春宵的700元,只拿出100元。經理急呼:“我哪有?”女客人:“我有提供,是你自己不用!”
1、阿里內部的常見級別和定義
P序列=技術崗 M序列=管理崗 (注:樣本有限,以下全部數據僅供參考!)

-阿里的非管理崗分為10級,其中P6、P7、P8需求量最大,也是阿里占比最大的級別。前面例子中那位郁悶的同學拿到了P6+的offer,正處于最龐大但又最尷尬的級別中段,至于為什么差一點兒沒拿到P7,難道是HR在省招聘費?
2、阿里的級別對應薪資

阿里薪資結構:一般是12+1+3=16薪;年底的獎金為0-6個月薪資,90%人可拿到3個月。除了薪水,股票也是重要的收入之一,阿里的股票分年限行權,一般4年拿完。
說到股票,順便普及下常識。股票是公司用來獎勵員工忠誠度的,所以阿里分年限行權,要離職套現得準備好充足的現金。因為當月薪水和歸屬股票是一起算作當月個人收入的,所以歸屬時通常要繳納高達45%的個稅,然后得到的可能還是限制性股票,還不能馬上賣呢。等到可以出售的時候,還得繳納20%股票增值部分的個人所得稅。同時,你必須先繳稅,才能歸屬,繳稅還必須用現金,不能sell to cover!So,拿的越多,先拿出的cash就越多,這里面的流動性風險你自己權衡吧。
二、百度內部級別和薪資待遇
1、百度的技術級別
百度有4萬人,每年招聘應屆生技術產品人員1000人左右,技術崗位級別和阿里類似,分為T序列12級,不贅述了,大概阿里的級別減1或2,就是百度的級別。
主要集中在T5/T6,升T7很困難,T7升T8更困難;T7以上一般就不做coding了;一般來說,在百度待3年能給到T5,很多人都等不到三年,原因下面說,社招過來的,一般是外面公司的技術骨干了;T10是技術總監,十個左右;T11是首席科學家;T12基本沒見過。
2、百度薪資的大概范圍

百度薪資結構:月薪×14.6(12+0.6+2),其他崗位月薪×14;T5以上為關鍵崗位,另外有股票、期權;T5、T6占比最大的級別,T8、T9占比最小;級別越高,每檔之間的寬幅越大。
百度是一家業務定性,內部穩定,金字塔形的成熟公司。也就是說,大部分事情都是按部就班、駕輕就熟,所有人都比較輕松、穩定、舒服,尤其是對老員工而言。但是對于新員工來說,這意味著成長空間的極度壓縮,機會少,上升慢。
百度工資高,福利好,但是這么多年期權已經基本發光了,只有總監以上才有,幾十股幾百股就算多了。問題就來了,百度新老員工的期權數量太懸殊,據說到百度樓下停車場一看,開卡宴的都是老員工,開捷達的都是新員工,其實很多新員工的貢獻比老員工大得多,但是收入反而倒掛,于是很多新人等不到3年就跳了。
三、騰訊的內部級別和薪資待遇
1、騰訊的技術級別
騰訊的分級和阿里/百度都不一樣,分為T1/T2/T3/T4共4級,每級又細分為3小級。員工仍然集中在中段,尤其是 T2.3 和 T3.1;想從T2跨到T3,即從2.3升3.1是非常困難的。
2、騰訊的薪酬和級別的關系

騰訊標準薪資是14薪,但是通常能拿到16-20薪;T3.1以上開始另外有股票。值得一提的是,騰訊是有淘汰制考核的。一般一年兩次考核(6月、12月),實行末尾淘汰制,0-10%優秀,必須有5%的人轉組(轉組也可能出現沒人接收的情況)或者被開除。升級也和考核結果很有關系,要升一個小等級,必須最近兩次考核得過一次A類考核結果。升T3.1是內部晉升的第一道檻,要求架構在領域內優秀,被追問攻擊時能無漏洞應答出來——據說只有30%的通過率。同時,騰訊好的一點在于,底層普通員工如果技術真的不錯,照樣升級,和是不是leader關系不大。leader的帶隊價值在T3.3時才顯現出來。
來看看BAT級別對照表

結語
各個公司頭銜名字都不一樣,級別的數目也不一樣;有些扁平,有些很多level慢慢升;有些薪水范圍嚴格跟級別掛鉤,有些薪水和級別并沒有絕對對應的關系。無論你是向往BAT還是身居其中,把握每年的評級機會/跳槽機會,建立一條上升的職業曲線更為重要。因為,沒有變化是一件很可怕的事情。
摘要: 這幾年,持續集成隨著敏捷在國內的推廣而持續走熱,與之相伴的持續部署也一直備受關注。自前兩年,持續交付這個延續性概念又闖進了國內IT圈,慢慢開始在社區和會議中展露頭角。許多不明真相的群眾跟風哭著喊著要“上”,而許多前CI的半吊子玩家換件衣服就接著干,有的甚至衣服都來不及換……國內的這些土財主如果不巧請了某些所謂的戰略家,除了建了一堆持續集成環境,以及每天嚷嚷著要這個要那個,混亂的狀況在根本上沒有得到改善。本文無意費力探討持續集成和持續交付的概念,而是打算談談對于大型軟件企業,以持續集成為基礎實現持續部署(交付)時,所要面對的問題以及可行的解決方案。地主老財們,夜黑風正猛,山高路又遠,注意腳下……
閱讀全文
摘要: 光說不練假把式,學習Java GC機制的目的是為了實用,也就是為了在JVM出現問題時分析原因并解決之。通過學習,我覺得JVM監控與調優主要的著眼點在于如何配置、如何監控、如何優化3點上。下面就將針對這3點進行學習。 (如果您對Java的內存區域劃分和內存回收機制尚不明確,那在閱讀本文前,請先閱讀我的前一篇博客《Java系列筆記(3) - J...
閱讀全文
摘要: 面向流的I/O系統一次一個字節地處理數據。一個輸入流產生一個字節的數據,一個輸出流消費一個字節的數據。為流式數據創建過濾器非常容易。鏈接幾個過濾器,以便每個過濾器只負責單個復雜處理機制的一部分,這樣也是相對簡單的。不利的一面是,面向流的I/O通常相當慢。 NIO與原來的I/O有同樣的作用和目的,但是它使用塊I/O的處理方式。每一個操作都在一步中產生或者消費一個數...
閱讀全文
實時查看tomcat并發連接數
netstat -na | grep ESTAB | grep 8080 | wc -l
實時查看apache并發連接數
netstat -na | grep ESTAB | grep 80 | wc -l