『壹』 濡備綍鎴愪负Spark楂樻墜
銆銆绗涓闃舵碉細鐔熺粌鎺屾彙Scala璇瑷
1锛宻park妗嗘灦鏄閲囩敤scala璇瑷鍐欑殑锛岀簿鑷翠紭闆呫傛兂瑕佹垚涓簊park楂樻墜锛屼綘灏卞繀椤婚槄璇籹park婧愮爜锛屽氨蹇呴』鎺屾彙scala銆
2锛岃櫧鐒剁幇鍦ㄧ殑spark鍙浠ヤ娇鐢ㄥ氱嶈瑷寮鍙戯紝java,python锛屼絾鏄鏈蹇閫熷拰鏀鎸佹渶濂界殑API渚濈劧骞跺皢姘歌繙鏄疭cala鐨凙PI锛屾墍浠ュ繀椤绘帉鎻scala鏉ョ紪鍐欏嶆潅鐨勫拰楂樻ц兘鐨剆park鍒嗗竷寮忕▼搴忋
3灏ゅ叾鏄鐔熺粌鎺屾彙Scala鐨則rait,apply,鍑芥暟寮忕紪绋嬶紝娉涘瀷锛岄嗗彉锛屼笌鍗忓彉绛夈
銆銆绗浜岄樁娈碉細绮鹃歴park骞冲彴鏈韬鎻愪緵缁欏紑鍙戞姌鐨凙PI
1锛屾帉鎻spark涓闈㈠悜RDD鐨勫紑鍙戞ā寮忥紝鎺屾彙鍚勭峵ransformation鍜宎ction鍑芥暟鐨勪娇鐢ㄣ
2锛屾帉鎻Spark涓鐨勬句緷璧栧拰绐勪緷璧栵紝lineage鏈哄埗銆
3锛屾帉鎻RDD鐨勮$畻娴佺▼锛屽係tage鐨勫垝鍒嗭紝spark搴旂敤绋嬪簭鎻愪氦缁欓泦缇ょ殑鍩虹杩囩▼鍜學ork鑺傜偣鍩虹鐨勫伐浣滃師鐞嗐
銆銆绗涓夐樁娈碉細娣卞叆Spark鍐呮牳
姝ら樁娈典富瑕佹槸閫氳繃Spark妗嗘灦鐨勬簮鐮佺爺璇绘潵娣卞叆Spark鍐呮牳閮ㄥ垎锛
1锛岄氳繃婧愮爜鎺屾彙Spark鐨勪换鍔℃彁浜わ紝
2锛岄氳繃婧愮爜鎺屾彙Spark鐨勯泦缇ょ殑浠诲姟璋冨害锛
3锛屽挨鍏惰佺簿閫欴AGScheler,TaskScheler鍜學orker鑺傜偣鍐呴儴鐨勫伐浣滅殑姣忎竴姝ョ粏鑺傘
銆銆绗鍥涢樁娈碉細鎺屾彙Spark涓婄殑鏍稿績妗嗘灦鐨勪娇鐢
Spark浣滀负浜戣$畻澶ф暟鎹鏃朵唬鐨勯泦澶ф垚鑰咃紝鍦ㄥ疄鏃舵祦寮忓勭悊锛屽浘鎶鏈锛屾満鍣ㄥ︿範锛宯osql鏌ヨ㈢瓑鏂归潰鍏锋湁鏄庢樉鐨勪紭鍔匡紝鎴戜滑浣跨敤Spark鐨勬椂鍊欏ぇ閮ㄥ垎鏃堕棿閮芥槸鍦ㄤ娇鐢ㄥ叾妗嗘灦锛
sparksql,spark streaming绛
1锛宻park streaming鏄鍑鸿壊鐨勫疄鏃舵祦澶卞勭悊妗嗘灦锛岃佹帉鎻★紝DStream,transformation鍜宑heckpoint绛夈
2锛宻park sql鏄绂荤嚎缁熻″垎鏋愬伐鍏凤紝shark宸茬粡娌¤惤銆
3锛屽逛簬spark涓鐨勬満鍣ㄥ︿範鍜孏raphx绛夎佹帉鎻″叾鍘熺悊鍜岀敤娉曘
銆銆绗浜旈樁娈碉細鍋氬晢涓氱骇鐨剆park椤圭洰
閫氳繃涓涓瀹屾暣鐨勫叿鏈変唬琛ㄦх殑spark椤圭洰鏉ヨ疮绌縮park鐨勬柟鏂归潰闈锛屽寘鎷椤圭洰鐨勬嗘灦璁捐★紝鐢ㄥ埌鐨勬妧鏈鐨勫墫鏋愶紝寮濮嬪疄鐜帮紝杩愮淮绛夛紝瀹屽杽鎺屾彙鍏朵腑鐨勬瘡涓涓闃舵靛拰缁嗚妭锛屼互鍚庝綘灏卞彲浠ヤ粠瀹圭殑闈㈠圭粷澶у氭暟spark椤圭洰銆
銆銆绗鍏闃舵碉細鎻愪緵spark瑙e喅鏂规
1锛屽交搴曟帉鎻spark妗嗘灦婧愮爜鐨勬瘡涓涓缁嗚妭锛
2锛屾牴鎹姝ュ悓鐨勪笟鍔″満鏅鐨勯渶瑕佹彁渚泂park鍦ㄤ笉鍚屽満鏅鐨勮В鍐虫柟妗堬紝
3锛屾牴鎹瀹為檯闇瑕侊紝鍦╯park妗嗘灦鍩虹涓婄粡琛2娆″紑鍙戯紝鎵撻犺嚜宸辩殑spark妗嗘灦銆
『贰』 Spark浣跨敤鐨勮瑷鏄浠涔堬紵
Spark鐨勬嗘灦浣跨敤Scala璇瑷缂栧啓鐨勶紝绠娲佽屼紭闆咃紱
Spark鐨勫紑鍙戠洰鍓嶄富瑕佸彲浠ヤ娇鐢ㄤ笁绉嶈瑷锛歋cala銆丣ava銆丳ython
『叁』 Spark 涓鐢 Scala 鍜 java 寮鍙戞湁浠涔堝尯鍒
Scala鍒板簳鏄浠涔?鍦ㄧ洰鍓嶄紬澶氱殑JVM璇瑷褰撲腑锛孲cala鏃犵枒鏄鏈寮曚汉娉ㄦ剰鐨勮瑷涔嬩竴銆係cala鏄涓涓闈欐佽瑷锛屾洿閫傚悎澶у瀷宸ョ▼椤圭洰锛孲cala鐩存帴缂栬瘧鎴怞ava瀛楄妭鐮侊紝鎬ц兘鎺ヨ繎Java銆係cala鏄涓涓澶氳寖寮忕殑璇瑷锛屼綘鍙浠ユ贩鍚堜娇鐢ㄥ嚱鏁板紡鍜岄潰鍚戝硅薄缂栫▼锛屾贩鍚堜娇鐢ㄥ彲鍙樼被鍜屼笉鍙樼被锛屾贩鍚堜娇鐢ˋctor鍜屼紶缁熺殑Java骞跺彂搴撱
鐭鐭涓涓鏈堢殑鏃堕棿锛孲cala浜庢湰鏈堝啿杩涗簡TIOBE鐨勫墠浜斿崄鍚嶃備竴涓 Twitter 鐨勫紑鍙戜汉鍛樿磋繃锛孲cala 灏嗕細鎴愪负鐜颁唬 Web2.0 鐨勫彂璧疯瑷銆侺inkedIn 涔熺敤杩欑嶈瑷銆傚悓鏍疯稿氬叾浠栧ぇ鐨勫叕鍙稿 Sony Picture, EDF, SAP 涔熷紑濮嬩娇鐢ㄨ繖绉嶈瑷銆備负浠涔圫cala鍙戝睍杩欎箞杩呯寷锛屽彲浠ヨ幏寰楀傛ょ儹鐑堢殑绀惧尯鏀鎸併
鏇惧啝涓滆繕琛ㄧず锛孲cala涓嶆槸Java鐨勬潃鎵嬶紝瀹冩棤娉曞彇浠Java鐨勫湴浣嶏紝涔熺獊鐮翠笉浜咼VM鐨勯檺鍒躲丣ava瀹炵幇涓嶄簡鐨勫姛鑳藉畠涔熷疄鐜颁笉浜嗐傛垜浠鍙浠ュ皢Scala褰㈣薄鐨勭悊瑙f垚澶ч噺璇娉曠硸鐨凧ava銆
Scala 寮鍙戝洟闃熷彂甯冧簡鏈鏂扮殑2.9.2绋冲畾鐗堟湰锛孲cala 璇瑷鐨勭壒鎬ф湁璁稿氾紝渚嬪傞珮闃跺嚱鏁板拰瀵硅薄銆佹娊璞$被鍨嬬粦瀹氾紝actor 浣垮緱鍑芥暟鍦 Scala 涓鑳芥槸涓涓瀛愮被鎴愪负鍙鑳斤紝Scala 涓鐨勮捐℃ā寮忎娇寰楅潰鍚戝硅薄鍜屽嚱鏁扮紪绋嬫棤缂濈粨鍚堛侫kka 鏄涓涓鐢 Scala 缂栧啓鐨勫簱锛岀敤浜庣畝鍖栫紪鍐欏归敊鐨勩侀珮鍙浼哥缉鎬х殑 Java 鍜 Scala 鐨 Actor 妯″瀷搴旂敤銆傚畠宸茬粡鎴愬姛杩愮敤鍦ㄧ數淇¤屼笟銆係park 鏄涓绉嶅彲鎵╁睍鐨勬暟鎹鍒嗘瀽骞冲彴锛屽畠鏁村悎浜嗗唴瀛樿$畻鐨勫熀鍏冿紝鍥犳わ紝鐩稿逛簬 Hadoop 鐨勯泦缇ゅ瓨鍌ㄦ柟娉曪紝瀹冨湪鎬ц兘鏂归潰鏇村叿浼樺娍銆係park 鏄鍦 Scala 璇瑷涓瀹炵幇鐨勶紝骞朵笖鍒╃敤浜嗚ヨ瑷锛屼负鏁版嵁澶勭悊鎻愪緵浜嗙嫭涓鏃犱簩鐨勭幆澧冦係cala 缂栬瘧鍣ㄥ彲浠ョ敓鎴愬瓧鑺傜爜锛岀洿鎺ヨ繍琛屽湪浣跨敤JVM涓娿傝ヨ瑷(瀹冨疄闄呬笂浠h〃浜嗗彲鎵╁睍璇瑷)琚瀹氫箟涓哄彲鐩存帴闆嗘垚鍒拌瑷涓鐨勭畝鍗曟墿灞曘
Scala浣滀负涓闂ㄩ潤鎬佽瑷锛屽畠鐨勪富瑕佺壒鎬ф湁鍝浜?
路 Scala鏄闈㈠悜瀵硅薄鐨
Scala鏄涓涓绾闈㈠悜瀵硅薄璇瑷锛屽湪鏌愮嶆剰涔変笂鏉ヨ叉墍鏈夋暟鍊奸兘鏄瀵硅薄銆傚硅薄鐨勭被鍨嬪拰琛屼负鏄鐢眂lass鍜宼rait鏉ユ弿杩扮殑銆侰lass鐨勬娊璞″彲鐢卞瓙绫诲寲鍜屼竴绉嶇伒娲荤殑鍩轰簬mixin鐨勭粍鍚堟満鍒(瀹冨彲浣滀负澶氶噸缁ф壙鐨勭畝鍗曟浛浠f柟妗)鏉ユ墿灞曘
路 Scala鏄鍑芥暟寮忕殑
Scala杩樻槸涓涓鍑芥暟寮忚瑷锛屽湪鏌愮嶆剰涔変笂鏉ヨ叉墍鏈夊嚱鏁伴兘鏄鏁板笺係cala涓哄畾涔夊尶鍚嶅嚱鏁版彁渚涗簡涓绉嶈交閲忕骇鐨勮娉曪紝瀹冩敮鎸侀珮闃(higher-order)鍑芥暟銆佸厑璁稿嚱鏁板祵濂椼佹敮鎸佸眬閮ㄥ楃敤(currying)銆係cala鐨刢ase绫诲強鍏跺唴缃鏀鎸佺殑妯″紡鍖归厤妯″瀷浠f暟绫诲瀷鍦ㄨ稿氬嚱鏁板紡缂栫▼璇瑷涓閮借浣跨敤銆
路 Scala鏄闈欐佺被鍨嬬殑
Scala閰嶅囦簡涓濂楀瘜鏈夎〃鐜板姏鐨勭被鍨嬬郴缁燂紝璇ユ娊璞℃傚康浠ヤ竴绉嶅畨鍏ㄧ殑鍜屼竴鑷寸殑鏂瑰紡琚浣跨敤銆
路 Scala鏄鍙鎵╁睍鐨
Scala鐨勮捐℃壙璁や簡瀹炶返浜嬪疄锛岄嗗煙鐗瑰畾搴旂敤寮鍙戦氬父闇瑕侀嗗煙鐗瑰畾璇瑷鎵╁睍銆係cala鎻愪緵浜嗕竴涓鐙鐗圭殑璇瑷缁勫悎鏈哄埗锛岃繖鍙浠ユ洿鍔犲规槗鍦颁互绫诲簱鐨勫舰寮忓炲姞鏂扮殑璇瑷缁撴瀯锛
浠讳綍鏂瑰紡鍙浠ヨ鐢ㄤ綔涓缂(infix)鎴栧悗缂(postfix)鎿嶄綔绗﹂棴鍖呮寜鐓ф墍鏈熸湜鐨勭被鍨(鐩鏍囩被鍨)鑷鍔ㄥ湴琚鏋勯
涓よ呯粨鍚堜娇鐢ㄥ彲鏂逛究鍦板畾涔夋柊璇鍙ワ紝鏃犻渶鎵╁睍璇娉曪紝涔熸棤闇浣跨敤绫讳技瀹忕殑鍏冪紪绋嬪伐鍏枫
路 Scala鍙涓嶫ava鍜.NET杩涜屼簰鎿嶄綔
Scala璁捐℃椂灏辫冭檻浜嗕笌娴佽岀紪绋嬬幆澧冭壇濂戒氦浜掞紝濡侸ava 2杩愯屾椂鐜澧(JRE)鍜 .NET妗嗘灦(CLR)銆傜壒鍒鏄涓庝富娴侀潰鍚戝硅薄璇瑷锛屽侸ava鍜孋#灏介噺鏃犵紳浜や簰銆係cala鏈夊儚Java鍜孋#涓鏍风殑缂栬瘧妯″瀷(鐙绔嬬紪璇戯紝鍔ㄦ佽呰浇绫)锛屽厑璁歌块棶鎴愬崈涓婁竾鐨勯珮璐ㄩ噺绫诲簱銆
鍦ㄥ苟鍙戞ф柟闈锛屼笌 Scala 鍦 .NET 棰嗗煙涓鐨勫愬硅瑷 F# 鐩镐技锛孲cala 鏄閽堝 鈥滃苟鍙戞ч棶棰樷 鐨勮В鍐虫柟妗堜箣涓锛岃╁紑鍙戜汉鍛樿兘澶熸洿鍔犺交鏉惧湴涓撴敞浜庨棶棰樼殑瀹炶川锛岃屼笉鐢ㄨ冭檻骞跺彂缂栫▼鐨勪綆绾х粏鑺傘侫ctor 缂栫▼妯″紡璁╅珮搴﹀苟琛屽簲鐢ㄧ▼搴忕殑寮鍙戞洿鍔犵畝鍗曘係cala鎶奅rlang椋庢牸鐨勫熀浜巃ctor鐨勫苟鍙戝甫杩涗簡JVM銆傛垜浠鍙浠ュ埄鐢⊿cala鐨刟ctor妯″瀷鍦↗VM涓婅捐″叿浼哥缉鎬х殑骞跺彂搴旂敤绋嬪簭锛屼互鑷鍔ㄨ幏寰楀氭牳蹇冨勭悊鍣ㄥ甫鏉ョ殑浼樺娍锛岃屼笉蹇呬緷鐓у嶆潅鐨凧ava绾跨▼妯″瀷鏉ョ紪鍐欑▼搴忋係cala 涓哄苟鍙戞ф彁渚涗簡涓ょ嶇骇鍒鐨勬敮鎸侊紝杩欎笌鍏朵粬涓 Java 鐩稿叧鐨勪富棰樻瀬涓虹被浼硷細
棣栧厛锛屽瑰簳灞傚簱鐨勫畬鍏ㄨ块棶(姣斿傝 java.util.concurrent)浠ュ強瀵 鈥滀紶缁熲 Java 骞跺彂鎬ц涔夌殑鏀鎸(姣斿傝寸洃鎺х▼搴忓拰wait()/notifyAll())銆傚叾娆★紝杩欎簺鍩烘湰鏈哄埗涓婇潰鏈変竴涓鎶借薄灞
Scala 鎻愪緵浜嗗湪绋冲畾鐨勯珮鎬ц兘骞冲彴(Java 铏氭嫙鏈)涓婄敓鎴愮殑鑳藉姏鍚屾椂涔熸槸涓闂ㄦ晱鎹锋ц瑷銆傝繖涓绫诲瀷鐨勮瑷涔熸湁鍏朵粬鐨勯夋嫨锛屼緥濡 Jython, JRuby, Groovy 鍜 Clojure, 浣嗘槸杩欎簺閮芥槸杩愯屽湪 JVM 涓婄殑鍔ㄦ佺被鍨嬭瑷銆侽pen Class 鐨勬晥鏋滆╁ぇ瀹朵細瑙夊緱Scala鏄鍔ㄦ佽瑷锛屼絾瀹冩槸閫夋嫨闅愬紡杞鎹㈡潵瀹炵幇鐨勶紝杩欎篃姝eソ璇佹槑浜哠cala鏄闈欐佽瑷銆傞殣寮忚浆鎹(Implicit conversion)浣 Scala 鍏锋湁绫诲瀷瀹夊叏鎬э紝姝e傛墿灞曟柟娉(extension method)涔嬩簬 C#锛屽紑鏀剧被(open class)涔嬩簬 ruby銆傚嵆锛氬悜鏈鏇惧畾涔夌殑绫诲瀷娣诲姞鏂规硶(濡傚瓧绗︿覆銆佸垪琛ㄣ佹暣鏁)銆傝繖鏄浣垮緱 Scala 绗﹀悎 DSL(鐗瑰畾棰嗗煙璇瑷)妯″瀷鐨勭壒鎬т箣涓銆
Scala缁撳悎浜嗛潰鍚戝硅薄鍜屽嚱鏁扮紪绋嬬殑浼樺娍锛屽嚱鏁扮紪绋嬬殑涓涓濂藉勫氨鏄浣犺兘澶熷儚杩愮敤涓涓鏁版嵁閭f牱杩愮敤鍑芥暟锛屽彲浠ョ敤鏉ュ畾涔夌湡姝i珮灞傜骇鐨勫簱锛屾垨鑰呭幓瀹氫箟鏂扮殑棰嗗煙鐗规畩璇瑷(DSL)銆
鍦ㄨ皥鍙奐ava涓嶴cala鐨勫规瘮鏃讹紝鏇惧啝涓滆〃绀猴紝Scala鑳借皟鐢ㄧ粷澶ч儴鍒嗙殑Java锛岃孞ava璋冪敤Scala鐙鏈夌殑涓滆タ浼氭瘮杈冮毦銆侸ava 鎷ユ湁闈炲父寮虹殑姒傚康瑙勮寖锛屽洜姝や换浣曚竴涓 Java 绋嬪簭涔嬮棿鍏锋湁闈炲父澶氱殑鐩镐技涔嬪勶紝骞朵笖杩欐牱鑳藉熸柟渚跨殑杩涜岀▼搴忓憳浜ゆ浛銆備絾鏄 Scala 骞舵病鏈夎繖鏍风殑缁熶竴鎬э紝鍥犱负杩欐槸涓闂ㄥ緢鏈夎〃鐜板姏鐨勮瑷銆傜幇鍦烘浘鍐犱笢涓烘垜浠婕旂ず浜嗗疄闄呮堜緥锛屽備笅鍥炬墍绀猴細
姝f墍璋擄紝閲戞棤瓒宠丹锛屼汉鏃犲畬浜恒係cala瀵逛簩杩涘埗涓嶅吋瀹癸紝璇娉曚篃瓒婃潵瓒婂嶆潅锛屼笉鑳界獊鐮碆ytecode鐨勯檺鍒躲佺紪璇戦熷害鏈夋墍缂撴參銆傚綋瀹冭骞挎硾鐢ㄤ簬鍗曞厓娴嬭瘯銆佸紑鍙戝伐鍏枫丼ocket寮鍙戙佷互鍙婇潰瀵瑰氭牳鎸戞垬鐨勫苟鍙戝簲鐢ㄣ傛昏岃█涔嬶紝Scala鏄涓绉嶅嚱鏁板紡闈㈠悜瀵硅薄璇瑷锛屽畠铻嶆眹浜嗚稿氬墠鎵鏈鏈夌殑鐗规э紝鑰屽悓鏃跺張杩愯屼簬JVM涔嬩笂銆傛e侸Ruby 鍒涘缓鑰呬箣涓Charles Nutter 鎵瀹gО鐨勯偅鏍稴cala灏辨槸 Java 鐜嬩綅鐨勫悎娉曠户鎵夸汉銆傞殢鐫寮鍙戣呭筍cala鐨勫叴瓒f棩澧烇紝浠ュ強瓒婃潵瓒婂氱殑宸ュ叿鏀鎸侊紝鏃犵枒Scala璇瑷灏嗘垚涓哄箍澶ц蒋浠跺伐绋嬪笀鎵嬩笂涓浠跺繀涓嶅彲灏戠殑宸ュ叿銆
『肆』 Spark 中用 Scala 和 java 开发有什么区别