大概兩年前寫過同樣標(biāo)題的一篇文章,對(duì)于這個(gè)問題感興趣的人不少,后臺(tái)收到不少同學(xué)的提問,所以準(zhǔn)備細(xì)致地解答一下這些問題,希望能解決掉大家90%的疑問。下次再看到相關(guān)的提問我會(huì)理直氣壯地把這篇文章的鏈接甩你臉上。但是可能又會(huì)有同學(xué)有疑問了,那剩下10%的疑問怎么辦?可以關(guān)注我的公眾號(hào)【老蒙大數(shù)據(jù)】。

          開發(fā)語言


          言歸正傳,對(duì)于新手來說,老是會(huì)有類似這樣的問題,“做大數(shù)據(jù)需要學(xué)Java嗎?”“不會(huì)Java可以嗎”“需要學(xué)到什么程度”...我的回答是“需要!”,“不可以”,“精通”。當(dāng)然對(duì)于一個(gè)新手來說讓你精通Java是不可能的,寫Java沒個(gè)十年半載真的不敢說精通,但是你得走在通往“精通”的這條路上,精通程度和你拿到的錢是成正比的。


          其實(shí)我想表達(dá)的是,不要有僥幸心理,不要覺得大數(shù)據(jù)就是搭搭環(huán)境,用用組件,大數(shù)據(jù)是正兒八經(jīng)需要寫代碼做開發(fā)的,而且對(duì)代碼能力的要求是比較高的,為什么這么說,因?yàn)榇髷?shù)據(jù)生態(tài)圈有很多優(yōu)秀的開源組件,如果你的
          Java 是半吊子的水平那我可以很明確地說,你能看得懂的代碼可能都不超過100行。不信的話可以找個(gè)開源項(xiàng)目看看。

          Java 可以說是大數(shù)據(jù)開發(fā)的第一語言,至少當(dāng)前還是的,雖然垃圾回收的問題經(jīng)常被大家詬病,但是有龐大的生態(tài)圈在呢,一時(shí)半會(huì)都還會(huì)是 Java
          的天下?!癑ava 要學(xué)到什么程度?”JavaSE 必須掌握,JVM,多線程之類的都是基礎(chǔ),面試必問系列;JavaEE 必須熟悉,丟個(gè)Java
          web項(xiàng)目給你,不求你把底層了解地多么透徹,但是必須得會(huì)寫,因?yàn)榇髷?shù)據(jù)開發(fā)實(shí)際工作中少不了寫接口。

          SQL。如果說有一門語言可能會(huì)撼動(dòng) Java 一哥的位置的話,那絕對(duì)是 SQL,雖然 SQL 和 Java
          都算不上是一個(gè)層面上的語言,但是它太重要了,太多人的 SQL 寫得太渣了,太多人寫 SQL
          的時(shí)候不考慮底層優(yōu)化了,要重視呀兄弟們,不是增刪查改就完事了的。有小伙伴問過要怎么提升寫 SQL 的能力?孰能生巧,多寫,多了解底層原理,多思考優(yōu)化的方案。

          Scala 要學(xué)到什么程度?語法得懂,除了基本的,還有什么隱式轉(zhuǎn)換,什么柯里化,什么閉包等等。學(xué)Scala 最大的目的就是寫 Spark,Spark
          在大數(shù)據(jù)生態(tài)圈的存在感太強(qiáng)了,學(xué)習(xí)一門語言最好的方式就是實(shí)踐,多寫寫 Spark 相關(guān)的項(xiàng)目,或者去看看 Spark 的源碼。

          shell 也是必不可少的,大數(shù)據(jù)開發(fā)其實(shí)一般都會(huì)承擔(dān)起大數(shù)據(jù)集群的運(yùn)維工作,說到運(yùn)維,shell的重要性應(yīng)該不用我多說了吧。


          語言是程序員的兵器,兵器肯定是越鋒利越好,種類越多越好,弓箭,刀,劍,盾,都有它們各自使用的場(chǎng)景。程序員不要有僥幸心理,不要得過且過,對(duì)于技術(shù)來說要知其然且知其所以然,如果你還達(dá)不到這個(gè)地步,那一定要走在這個(gè)方向上。

          大數(shù)據(jù)技術(shù)組件



          上面這張讓人犯密集恐懼癥的東西是什么?是2019年據(jù)不完全統(tǒng)計(jì)的大數(shù)據(jù)產(chǎn)品。


          是的,人人都知道,大數(shù)據(jù)技術(shù)實(shí)在是太多了,變化也太快了,新技術(shù)層出不窮,作為一個(gè)新人在面對(duì)這些技術(shù)的時(shí)候,常有的一個(gè)狀態(tài)就是懵,所以新人加我微信最常見的問題就是怎么學(xué)?這個(gè)要不要學(xué)?那個(gè)需要學(xué)到什么程度?等等。

          哪些要學(xué)?

          hadoop基礎(chǔ)全家桶,hdfs,yarn,hbase,hive,zookeeper等,再加個(gè) spark
          全家桶,以及流式計(jì)算全家桶kafka,flink,redis。


          如果真的是認(rèn)認(rèn)真真吃透了上面的那些技能的話,那我能保證你已經(jīng)基本上能解決90%的大數(shù)據(jù)問題,那剩下的10%怎么辦?這個(gè)問題好像有點(diǎn)熟悉,當(dāng)然還是繼續(xù)學(xué),但是你有了這解決90%問題的能力,剩下的10%的問題其實(shí)也不是什么大問題了。

          怎么學(xué)?


          從局部到整體。說得通俗一點(diǎn)就是要腳踏實(shí)地,不要老是飄在天上,因?yàn)樵谔焐峡吹降氖且徽麄€(gè)生態(tài),你當(dāng)然會(huì)看到有很多很多東西,但是如果你不走近看的話你是不會(huì)知道,其實(shí)有很多東西都是類似的,經(jīng)典的理論就那么幾個(gè),大家的系統(tǒng)很多都是照著這些理論去實(shí)現(xiàn)的,只是實(shí)現(xiàn)的方式會(huì)有些不一樣,所以同類型的產(chǎn)品可能場(chǎng)景會(huì)稍有不同,但是架構(gòu)是非常類似的,熟悉了之后你會(huì)發(fā)現(xiàn),分布式系統(tǒng)萬變不離其宗。

          簡(jiǎn)單地說,從一個(gè)入手,比如存儲(chǔ),舉個(gè)例子可以從HBase入手,因?yàn)樗闶且粋€(gè)比較經(jīng)典的分布式存儲(chǔ)引擎,《Big
          Table》也是非常經(jīng)典的一篇paper,HBase里面存在的 LSM-Tree,Bloom
          Filter,壓縮,分區(qū)等等原理和概念在很多分布式存儲(chǔ)中也是適用的。

          再比如,計(jì)算,mr很經(jīng)典,但是我還是建議直接從Spark入手,它的很多設(shè)計(jì)是基于mr又超過了mr的,而且 spark
          生態(tài)系統(tǒng)非常的全能,能干的事情非常多,先學(xué)Spark
          Core,搞懂編程模型,了解大概原理,接著學(xué)SparkSQL,了解catalyst等,再接著就是SparkStreaming,以及后面的StructedStreaming,學(xué)到到這里,如果學(xué)得足夠有深度,F(xiàn)link也是可以輕松拿下的了,二者都大量借鑒了《DataFlow》這篇paper的理論,還是那句話,萬變不離其宗。

          還有很多的其他的例子,比如調(diào)度系統(tǒng) AirFlow,Azkaban 以及最近挺火的
          DolphinScheduler,本質(zhì)上的實(shí)現(xiàn)都是類似的,只是在各自都增加了不同的功能來滿足用戶的需求。

          還有數(shù)據(jù)可視化等等很多的例子就部一一列舉了。

          說這么多目的只有一個(gè),腳踏實(shí)地一步一步走,程序猿這個(gè)工種還是很依賴經(jīng)驗(yàn)的,孰能生巧是沒有錯(cuò)的。

          要學(xué)到什么程度?


          我再強(qiáng)調(diào)一遍大數(shù)據(jù)平臺(tái)的開發(fā)人員不是簡(jiǎn)簡(jiǎn)單單會(huì)個(gè)搭建和使用就可以的了,這是最基礎(chǔ)和淺顯的內(nèi)容,所以平時(shí)有些小伙伴貼一大堆報(bào)錯(cuò)信息給我,問我安裝怎么報(bào)錯(cuò)了,怎么這個(gè)功能用不了了,這些問題基本上我都不會(huì)回答,除非我那天真的我心情非常好。因?yàn)槿绻氵B這些在google一搜一大把的問題都沒法解決的話,你覺得你是不是應(yīng)該重新思考一下自己的職業(yè)選擇。


          回到正題,要學(xué)到什么程度,取決于你現(xiàn)在什么水平,如果你剛?cè)腴T,你要學(xué)會(huì)理解場(chǎng)景,搭建,使用;熟練了之后就要理解原理,懂得調(diào)優(yōu);再接下來,需要你主動(dòng)去發(fā)現(xiàn)應(yīng)用中的問題,以及找解決方案來解決問題,這個(gè)時(shí)候就不僅限于眼前的某一種技術(shù)了,需要有一個(gè)大局觀,如何培養(yǎng)你的這種大局觀呢,多混社區(qū)多和優(yōu)秀的同行交流,多看源碼多學(xué)習(xí)優(yōu)秀的開源項(xiàng)目。

          當(dāng)然最好是能夠成為優(yōu)秀開源項(xiàng)目的 contributor 甚至 committer,這無論是在跳槽的面試中還是在晉升的述職中都是非常亮眼的加分項(xiàng)。

          擁抱開源

          學(xué)好語言的目的是為了寫代碼,寫優(yōu)秀的代碼,那么如何能寫出優(yōu)秀的代碼呢,人類最初學(xué)習(xí)的過程是從模仿開始的。


          上面都提到了源碼,為什么我要反復(fù)提這個(gè)問題呢,大數(shù)據(jù)的技術(shù)逐漸成熟,大數(shù)據(jù)的下半場(chǎng)絕對(duì)不會(huì)像前幾年一樣會(huì)搭個(gè)Hadoop,會(huì)寫個(gè)Spark就能拿比較高的薪資,高薪大數(shù)據(jù)平臺(tái)方向的程序員未來的趨勢(shì)一定能夠是搗鼓各種源碼進(jìn)行二次開發(fā)的。

          都說一入開源深似海,那為什么還是有那么多人往坑里跳呢,坑里有好處呀。


          首先開源的目的就是能給更多的人使用這個(gè)產(chǎn)品,同時(shí)能讓開發(fā)者參與開發(fā),讓使用者提出需求,這對(duì)產(chǎn)品而言是有積極推進(jìn)作用的,但是,開發(fā)者核心團(tuán)隊(duì)會(huì)篩選使用者的需求,因?yàn)殚_源的東西考慮的是大多數(shù)人通用的需求,不可能為個(gè)人定制,所以它是不能適應(yīng)所有的場(chǎng)景,而業(yè)務(wù)是千變?nèi)f化的,需求方是神通廣大的,他們總是能夠發(fā)掘一些刁鉆的需求,總是會(huì)“想方設(shè)法”地為難你,如果你經(jīng)常被難倒的話,N+1會(huì)在不遠(yuǎn)處向你招手。而如果你能夠改動(dòng)一下源碼,讓這個(gè)東西滿足你的需求,不是很美好嗎?


          參與開源項(xiàng)目的建設(shè)是提升程序員個(gè)人水平的一個(gè)很好的方式,通過一些頭部的開源項(xiàng)目,你可以看到業(yè)界優(yōu)秀的程序員是怎么合理設(shè)計(jì)架構(gòu)的,是怎么寫出高質(zhì)量代碼的,是怎么實(shí)現(xiàn)刁鉆需求的。人總是在模仿中不斷成長(zhǎng)的,你的水平怎么樣很大一部分取決于你接觸的人水平怎么樣,這也是大廠經(jīng)歷可以給簡(jiǎn)歷加分的原因,沒有大廠經(jīng)歷怎么辦呢,送你四個(gè)字,“入開源坑”。


          大部分人工作說到底都是為了錢,不晉升哪來的錢。造輪子,二次開發(fā)都是晉升很好的資本,不然阿里在github也不會(huì)有那么多KPI產(chǎn)物了。你可以看不慣,但是沒辦法,這就是競(jìng)爭(zhēng)力,別人都沒有做出來,而你做出來了。


          那么如何入坑呢,先從簡(jiǎn)單的開始,最好是能結(jié)合公司現(xiàn)在在使用東西,或者潛在需要使用的東西來下手。國外apache的項(xiàng)目一般都是比較高質(zhì)量的,也要參照一下github上的star個(gè)數(shù)和活躍度來看,另外沒進(jìn)入apache的一些項(xiàng)目,比如cloudera,facebook,linkin等這些公司開源的也有很多高質(zhì)量的大數(shù)據(jù)項(xiàng)目。

          國內(nèi)的話,阿里也有不少應(yīng)用非常廣泛的Java項(xiàng)目,比如druid,fastjson,datax,canal等等,可以先從這些下手,先讀懂,然后可以看看
          Github 上的 Issues,有沒有和自己遇到的問題類似的,或者有沒有問題是你可以解決的,提個(gè)PR,至此,你已經(jīng)邁出了第一步,一只腳已經(jīng)踩進(jìn)坑里了。

          總而言之,要多讀優(yōu)秀源碼,模仿人家寫代碼的思想。源碼閱讀相關(guān)的內(nèi)容可能會(huì)枯燥乏味,但是一點(diǎn)點(diǎn)堅(jiān)持下來的話,各方面都會(huì)有蛻變的。

          還沒有看夠?掃下面的二維碼關(guān)注下公眾號(hào)吧!

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                亚洲女同中文字幕在线 | 无码一区二区三区四区五区六区 | 男生操女生的b | 亚洲AV乱码成人精品国5 | 久久人人爽人人爽人人片aV免费 |