這個(gè)問題我應(yīng)該可以回答,零基礎(chǔ)學(xué)習(xí)spark,因?yàn)轫?xiàng)目需要,硬著頭皮上了,先占坑。
這幾天剛好被這貨折騰得死去活來的,晚上來答一發(fā)。
背景:某文科出長(zhǎng)的三流985的cs專業(yè)本科,現(xiàn)大三,即將升大四,成績(jī)剛好夠保研,已放棄,準(zhǔn)備找工作。大一,大二因?yàn)榛钴S于校內(nèi)各社團(tuán),成績(jī)并不是很好,并且,尤其重要的是代碼能力很渣。
大三才開始真正接觸編程。
交代背景只是想讓看到這個(gè)答案的朋友具有更好的借鑒意義。
接觸 Spark 是因?yàn)槔蠋煹囊粋€(gè)和企業(yè)合作的項(xiàng)目需要用到,真正開始接觸 Spark到現(xiàn)在也不過一個(gè)多月,不過確實(shí)學(xué)習(xí)到了非常多的東西。
1、首先,搭環(huán)境一定是必須的啦,答主當(dāng)時(shí)搭環(huán)境,前前后后就折騰了一個(gè)星期,linux,linux不懂,各種奇怪的命令,當(dāng)時(shí)折騰linux命令的時(shí)候心中一萬只草泥馬奔騰而過,權(quán)限的各種奇奇怪怪的問題,跟著網(wǎng)上的教程來做還會(huì)出錯(cuò)更是傷心。但是經(jīng)歷這個(gè)初始的環(huán)境折騰之后,你最基礎(chǔ)的linux命令至少會(huì)了,環(huán)境搭建過程中的各種配置文件坑爹問題,經(jīng)歷你的各種搜索之后,你也可以大概知道各種配置文件的作用,這有助于你后面程序出錯(cuò)的時(shí)候查找錯(cuò)誤。
2、環(huán)境搭建好之后,因?yàn)轫?xiàng)目的關(guān)系,你開始要編程了,但是Spark啥也不懂怎么辦啊。
沒關(guān)系,先搭好開發(fā)環(huán)境。搭好后得看你的項(xiàng)目需求了。根據(jù)你的項(xiàng)目需求來思考學(xué)習(xí)方向。
3、我的項(xiàng)目需求大概是,從mongoDB讀取數(shù)據(jù),進(jìn)行簡(jiǎn)單的計(jì)算之后丟回mongoDB里去。
3.1 先搜索Spark如何連接mongoDB,根據(jù)我當(dāng)時(shí)的情況,我記得使用某度搜索,關(guān)鍵詞 Spark和mongoDB基本是沒啥有用的東西的,所以,這個(gè)時(shí)候,題主需要學(xué)會(huì)科學(xué)上網(wǎng),這種比較新的東西,靠某度是沒啥用的,該飛越的時(shí)候還是要飛越的,mongo-hadoop-core。
3.2 連接好了之后,不懂 Scala怎么辦,這個(gè)根本不是問題,首先,Spark基本是RDD之間的轉(zhuǎn)化操作,就map,split等幾個(gè)東西而已,剩下的只要大概懂最基本的語法就可以了(默認(rèn)題主懂C語言),我們暫時(shí)不需要scala高級(jí)功能。你要是考我語法特性啥的,答主只能說,臣妾做不到啊。
3.3 項(xiàng)目新出了一個(gè)坑爹要求啊,要求將計(jì)算好的數(shù)據(jù)同時(shí)送到MySQL啊,簡(jiǎn)直坑爹有木有,有木有。抱怨歸抱怨,程序還是要好好做的。當(dāng)時(shí)國(guó)內(nèi)某度依然搜索不到任何資料,又飛越了長(zhǎng)城,這個(gè)問題我應(yīng)該可以回答,零基礎(chǔ)學(xué)習(xí)spark,因?yàn)轫?xiàng)目需要,硬著頭皮上了,先占坑。
這幾天剛好被這貨折騰得死去活來的,晚上來答一發(fā)。
背景:某文科出長(zhǎng)的三流985的cs專業(yè)本科,現(xiàn)大三,即將升大四,成績(jī)剛好夠保研,已放棄,準(zhǔn)備找工作。大一,大二因?yàn)榛钴S于校內(nèi)各社團(tuán),成績(jī)并不是很好,并且,尤其重要的是代碼能力很渣。
大三才開始真正接觸編程。
交代背景只是想讓看到這個(gè)答案的朋友具有更好的借鑒意義。
接觸 Spark 是因?yàn)槔蠋煹囊粋€(gè)和企業(yè)合作的項(xiàng)目需要用到,真正開始接觸 Spark到現(xiàn)在也不過一個(gè)多月,不過確實(shí)學(xué)習(xí)到了非常多的東西。
1、首先,搭環(huán)境一定是必須的啦,答主當(dāng)時(shí)搭環(huán)境,前前后后就折騰了一個(gè)星期,linux,linux不懂,各種奇怪的命令,當(dāng)時(shí)折騰linux命令的時(shí)候心中一萬只草泥馬奔騰而過,權(quán)限的各種奇奇怪怪的問題,跟著網(wǎng)上的教程來做還會(huì)出錯(cuò)更是傷心。但是經(jīng)歷這個(gè)初始的環(huán)境折騰之后,你最基礎(chǔ)的linux命令至少會(huì)了,環(huán)境搭建過程中的各種配置文件坑爹問題,經(jīng)歷你的各種搜索之后,你也可以大概知道各種配置文件的作用,這有助于你后面程序出錯(cuò)的時(shí)候查找錯(cuò)誤。
2、環(huán)境搭建好之后,因?yàn)轫?xiàng)目的關(guān)系,你開始要編程了,但是Spark啥也不懂怎么辦啊。
沒關(guān)系,先搭好開發(fā)環(huán)境。搭好后得看你的項(xiàng)目需求了。根據(jù)你的項(xiàng)目需求來思考學(xué)習(xí)方向。
3、我的項(xiàng)目需求大概是,從mongoDB讀取數(shù)據(jù),進(jìn)行簡(jiǎn)單的計(jì)算之后丟回mongoDB里去。
3.1 先搜索Spark如何連接mongoDB,根據(jù)我當(dāng)時(shí)的情況,我記得使用某度搜索,關(guān)鍵詞 Spark和mongoDB基本是沒啥有用的東西的,所以,這個(gè)時(shí)候,題主需要學(xué)會(huì)科學(xué)上網(wǎng),這種比較新的東西,靠某度是沒啥用的,該飛越的時(shí)候還是要飛越的,mongo-hadoop-core。
3.2 連接好了之后,不懂 Scala怎么辦,這個(gè)根本不是問題,首先,Spark基本是RDD之間的轉(zhuǎn)化操作,就map,split等幾個(gè)東西而已,剩下的只要大概懂最基本的語法就可以了(默認(rèn)題主懂C語言),我們暫時(shí)不需要scala高級(jí)功能。你要是考我語法特性啥的,答主只能說,臣妾做不到啊。
3.3 項(xiàng)目新出了一個(gè)坑爹要求啊,要求將計(jì)算好的數(shù)據(jù)同時(shí)送到MySQL啊,簡(jiǎn)直坑爹有木有,有木有。抱怨歸抱怨,程序還是要好好做的。當(dāng)時(shí)國(guó)內(nèi)某度依然搜索不到任何資料,又飛越了長(zhǎng)城,發(fā)現(xiàn)Spark的新版本有個(gè)新功能,insertIntoJDBC,結(jié)果這貨也是個(gè)坑啊,哎,發(fā)現(xiàn)它不會(huì)自己關(guān)閉,插入數(shù)據(jù)較多的之后,MySQL連接池不夠用啊,而且這貨根據(jù)最新版Spark官方文檔,已經(jīng)被廢棄了,因此自己寫了一個(gè)使用scala連接到MySQL的類(和java連接MySQL差不多)。
4、是的,你沒猜錯(cuò),我又遇到坑問題了。這個(gè)問題已經(jīng)折騰兩三天了,暫時(shí)還沒解決,希望各位前輩,能夠指點(diǎn)一點(diǎn)。
坑問題描述:
開發(fā)機(jī)環(huán)境,一個(gè)master,一個(gè)salve,程序不管是local模式還是standalone模式都運(yùn)行正常。
服務(wù)器環(huán)境,一個(gè)master,兩個(gè)slave,程序在local模式下運(yùn)行正確,standalone模式拋出java.lang.IllegalStateException open錯(cuò)誤。目前有較大的可能性,是在連接mongodb進(jìn)行查詢操作的時(shí)候,前面一個(gè)操作完之后直接關(guān)閉了連接,而后一個(gè)操作還沒操作完造成的錯(cuò)誤。具體問題描述請(qǐng)看這里mongodb - Spark on standalone cluster throws java.lang.illegalStateException
上面這個(gè)問題已經(jīng)解決了,是因?yàn)閙ongo-hadoop-core版本支持的問題。而最關(guān)鍵的是我沒有清理編譯器的緩存,這也導(dǎo)致了,即使一開始我知道是connector版本可能有問題,也沒有解決,這也導(dǎo)致了我多花費(fèi)了好幾天來搞了這個(gè)問題,但是,這次的經(jīng)歷讓我對(duì)如何查找錯(cuò)誤,如何解決問題,有了更深刻的體會(huì)。
強(qiáng)烈建議題主找一個(gè)實(shí)際項(xiàng)目做!
強(qiáng)烈建議題主找一個(gè)實(shí)際項(xiàng)目做!
強(qiáng)烈建議題主找一個(gè)實(shí)際項(xiàng)目做!
實(shí)在沒辦法,自己想一個(gè)需求,比如寫個(gè)程序,隨便找個(gè)地抓取一堆數(shù)據(jù),然后用Spark來分析數(shù)據(jù)。知乎有很多如何抓取數(shù)據(jù)的好問題和好回答,題主可以自行搜索。
最后,提醒題主一句話,Spark并不是一顆銀彈。
估計(jì)有人會(huì)奇怪,答主說自己編程能力弱還敢搞這個(gè)東西,首先我這么有信心的原因是我大二暑假去一個(gè)小公司實(shí)習(xí),該公司需要有人做iOS,然后直接丟給我,答主當(dāng)時(shí),mac啥的,objective-c啥的也不懂,但是沒關(guān)系,隨便買兩本書,大概看一下語法,做了書本幾個(gè)相關(guān)的簡(jiǎn)單例子就可以實(shí)際操作了,最后還是做成功了,雖然代碼有點(diǎn)亂。但是正是這次的完整的項(xiàng)目經(jīng)歷,給了我學(xué)習(xí)的極大信息。
然后,最最重要的一點(diǎn)是,Spark是一個(gè)讓人會(huì)又恨又愛的東西,為什么呢?因?yàn)槟銜?huì)遇到更種坑問題,但也正是因?yàn)槿绱耍鉀Q這種坑問題會(huì)給你極大的滿足感,能激發(fā)你持續(xù)進(jìn)步。