畢業季週記(一)win7系統 spark 安裝配置及排錯

日期:17.5.1-5.4


我原本計劃在Linux Ubuntu系統上安裝Spark,網上教程和攻略細細讀了幾篇,準備工作基本就緒,卻唯獨差了一個u盤。爲了趕時間,不因此拖進度的後腿,臨時起意轉戰windows。

對於我來說,在Linux系統上安裝和配置Spark是一件麻煩事,沒有接觸過,學習如何解壓縮、各種代碼命令需要花費比較多的時間。Windows系統操作比較熟悉,排錯會更容易一些。

安裝容易,但後期配置和編譯時windows系統就略顯劣勢了。整個工作耗費了我很多的精力和時間。一次次較真、一次次苦惱,又一次次驚喜、一次次欣慰。其實總的看,只是把這幾個軟件的配置好而已,但十分讓我臉紅的是,兩個整晚沒有睡覺,因爲較真也因爲急着想趕趕進度。所以我很慶幸我以文字的形式記錄下了這個過程,這幫助我做有條不紊的思路整理。原理是互通的,這些排錯的思路過程,對下次我在Linux系統上配置Spark會有幫助。但願也能幫助到遇類似困難的同學,儘早解決問題,節約寶貴的時間。

ps:如果老師不要求寫題記,我不會主動做記錄,便不會有這份小收穫。十分感謝老師。By the way~ 希望畢設順利,花開結果。


1.JDK安裝與環境變量配置

參考:https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
剛開始教程看的不仔細,jdk和jre沒放在分開的文件夾。正準備卸載,發現電腦還有舊版本JDK,360一併卸載並強力清掃殘留後重裝,出現問題:”Invalid characters in hostname”。
網上沒有合適的解決方法,想到idea: 恢復文件,但文件數量龐大故放棄。
配置了JDK的環境變量,cmd檢測配置成功,故不再理會這個問題。

2.scala安裝

官網下載安裝(spark官方文檔要求的相應版本,spark2.0要求scala2.11.x)。儘管有些教程沒提及環境變量配置(貌似現在版本的scala會自動修改系統的環境變量),保險起見,和JDK一樣配置了環境變量。

3.spark安裝

4.sbt安裝和配置

問題(1)
cd到spark安裝目錄,敲入命令sbt/sbt package,出錯:

“sbt 不是內部命令或外部命令。”

重新配置sbt環境變量,問題解決。

問題(2)
重新敲入,等待。。。(this may take some time,其實真的蠻久)。
結果依然報錯,報錯內容:

Jaca HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; suport was removed in 8.0

stackoverflow找到解答:對於Java8.0版本,這條報錯是無意義的,可忽略

問題(3)
sbt出了問題。。

WARN:: No sbt.version set in project/build.properties, base directory: F:\spark\spark-2.0.2-bin-hadoop2.7\spark-2.0.2-bin-hadoop2.7

官網重新下載scala2.11.11相應版本的sbt後解決

問題(4)
還是sbt的問題。。

[info] The current project is built against Scala 2.10.6

stackoverflow找到官方解答:

“We can’t break binary compatibility for all the sbt 0.13 plugins
until we release the next version sbt 0.14 or potentially sbt 1.0, so
no Scala 2.11.x sbt until then.” “One way to work around this is to
use Fork API. sbt 0.13 is capable of building Scala 2.11 source using
Scala 2.11 compilers. You can mimic the way its done, and run Scala
2.10 or 2.11 code from sbt.”

既然是sbt還沒有相應更新,這個問題先暫時忽略。如果運行過程出問題,再想辦法解決吧。。

(Updata:囧。。剛注意到是14年的回答,三年了都沒有更新嗎,看來得另尋辦法了。)

(我的思想鬥爭過程:如果改用scala2.10,則需要下載相應的spark源碼包和支持文件(Spark官網這樣說的),這不是更可取的辦法,所以只好忽略這個sbt和scala版本差異。)

問題(5)
但不在spark的根目錄下運行sbt package,不影響嗎?以後搞清楚再解答吧。

5.更新python到3.6.1

(Updata:因爲anaconda已內嵌python3.6.0,擔心版本衝突,我卸載了python。ps:Spark2.1並不支持3.6版本的python並不支持,需要改用3.5版本。此時anaconda的一個優點得以體現,內嵌可同時含有3.5和3.6版本的python)

在簡書上找到一篇很有幫助的博文:
http://www.jianshu.com/p/7b325155edab

6.hadoop安裝

問題(1)
解壓縮時報錯。。錯誤信息:

F:\hadoop\hadoop-2.7.1.tar.gz: 無法創建符號鏈接
F:\hadoop\hadoop-2.7.1\hadoop-2.7.1\lib\native\libhadoop.so 您可能需要以管理器身份運行 WinRAR! 客戶端沒有所需的特權。
F:\hadoop\hadoop-2.7.1.tar.gz: 無法創建符號鏈接
F:\hadoop\hadoop-2.7.1\hadoop-2.7.1\lib\native\libhdfs.so 您可能需要以管理器身份運行 WinRAR! 客戶端沒有所需的特權。

以管理員身份運行WinRAR後解壓,問題解決。

問題(2)
%HADOOP_HOME%\bin\winutils.exe chmod 777 \tmp\hive
這個命令的意思是讓winutils.exe文件對 \tmp\hive有讀寫權限
但在cmd運行時報錯:

ChangeFileModeByMask error (3): ???????????

網上找到類似問題解決辦法:
http://blog.csdn.net/u011242657/article/details/53968135
其中第三條,我又在網上搜索,右鍵菜單沒有“管理員獲取所有權”的解決辦法
https://jingyan.baidu.com/article/2f9b480d6cfccd41ca6cc276.html
相關代碼:
http://bbs.ithome.com/thread-162629-1-1.html
最後,完美解決。

問題(3)
下面貼一個看起來比較重要,但我還沒有掌握的東西:
(From blogspot:Apache Spark checkpoint issue on windows)

set environmental variable “HADOOP_HOME” to the folder which contains bin/winutils.exe
- option A: use global environment variables. My Computer -> Properties -> Advanced system settings -> Environment variables
- option B: from your source code
System.setProperty("hadoop.home.dir", <PATH_TO_WINUTILS>)

(Note: 上方的<PATH_TO_WINUTILS> 應該根據winutils的路徑做相應的修改,比如我的路徑是:F:\hadoop\hadoop-2.7.1\hadoop-2.7.1\bin\winutils.exe。那麼我應該把<PATH_TO_WINUTILS> 改成”F:\hadoop\hadoop-2.7.1\hadoop-2.7.1”)

7.Spark-shell配置小插曲之出錯

cmd運行spark-shell,仍然只有下面的spark context,沒有sql context,並且sc在單引號內:‘sc’,我不知道是否有問題,待排查。

Spark context available as sc.
SQL context available as sqlContext.

在百度上查了很多很多資料,試了很多很多方法,都沒能解決。
時間過得很快,一個小問題困擾了我整個下午。找不到前人的經驗,我決定在stackoverflow提問。等待中…..
(Updata:沒過多久便收穫瞭解答:spark2.0版本之後,SQL context 被表示爲 spark version。)
第一次在stackoverflow上提問,以往只是看已有的問答,有點小激動。

第二篇很有幫助的博文:
http://blog.csdn.net/u011513853/article/details/52896230

8.ItelliJ IDEA安裝

記錄(1)
加scala插件,
配置jdk安裝路徑,加載jdk
配置sdk安裝路徑,加載scala sdk

(出現小插曲,而後搜索資料,已解決)

(Updata:回想一下,sbt和scala版本不匹配,是不是sdk配置不順利的原因呢?僅僅是一個猜測,以後搞清楚了再回答吧。)
(Updata:網上查找資料,搞清楚了其實IDEA自帶集成scala,導致IDEA ivy的scala與System的scala衝突,版本不同。我選擇了本地scala,這個問題就解決了。)

記錄(2)
最後,編寫了第一個scala程序,調試一下。hello world!
哈哈,終於成功了。開心。渺小的人,感動於渺小。
感動之餘,趁熱打鐵學習了打包jar。

(Updata:後期發現一篇比較好的blog:)
http://nanxiao.me/en/build-apache-spark-application-in-intellij-idea-14-1/
(Updata:外加一篇思路比較清晰的blog,儘管並沒有多少幫助,但還是想記錄一下:)
http://blog.csdn.net/jameshadoop/article/details/52305228

問題(3)
IDEA編寫scala程序Spark2.0依賴jar包的問題:
https://zhidao.baidu.com/question/1449809115871447060.html

問題(4)
運行程序時出錯。。

Error in running Spark in Intellij: “object apache is not a member of
package org”

出現這個問題時,解決步驟:Project Structure>>Modules>>Dependencies>>green plus>>library>>jars

(Note:此jars包,在上一步提及)

又發現了一篇博客:
http://blog.csdn.net/a_step_further/article/details/51176969

9.anaconda安裝

記錄(1)
http://www.th7.cn/Program/Python/201507/515289.shtml
(含部分軟件功能講解)
記錄(2)
在anaconda中安裝tenserflow
http://www.th7.cn/system/win/201703/209385.shtml

10.使用pycharm配置tensorflow環境

最後一步不太成功,在網上找到了原因,但現在還不能着手處理。貼一下鏈接,以備以後需要。
http://stackoverflow.com/questions/37866877/pycharm-anaconda-import-tensor-flow-library-issue

原因大概可以總結爲:配置多個python環境時,需要分離。回想一下,我在anaconda中安裝tenserflow時,已經在spyder中配置並進入tenserflow會話,我猜測與這有關。等以後搞清楚再說,待解決。

(Updata:已解決。在網上找到了解決方法:pycharm設置Project Iterpreter時,還需要create VirtualEnv,並選擇tensorflow路徑下的python.exe,創建之後選擇即可。在虛擬環境下,列表中終於包含tenserflow了~)

(或許是因爲,Project Iterpreter列表中的python時最新版本3.6,tensorflow路徑下的python是用anaconda提前下載的舊版本3.5)

(Updata:最後已改用anaconda文件夾下的envs的python35。現在搞清楚了,原因在於版本不兼容,改用python3.5就好了。 並且,需要把spark的python支持包(也就是pyspark文件夾)複製到anaconda\envs\python35\Lib\site-packages目錄下)

11. 在pycharm中配置開發環境

http://blog.csdn.net/huangxia73/article/details/51372557

問題來了。。
cmd中無法啓動pyspark。。提示錯誤信息:

“TypeError:namedtuple<> missing 3 required keyword-only arguments: ‘verbose’, ‘rename’, and ‘module’”

網上找到解答:

Spark 2.1.0 doesn’t support python 3.6.0. To solve this change your
python version in anaconda environment. Run following command in your
anaconda env (To download python3.5 environment,use:) conda create -n
py35 python=3.5 anaconda (To activate this environment, use:) activate
py35 ( To deactivate this environment, use:) deactivate py35

終於成功了!cmd中pySpark終於啓動成功~!!(記得關閉py3.5環境哦~)

12.pySpark安裝&Pycharm

http://blog.csdn.net/a819825294/article/details/51782773
(note:此博客的調試代碼少了一行,導致編譯錯誤,Line10,11的代碼如下:count = lines.count print(count);注意添加。而且print函數也錯了,改爲print()

又出現一個問題。。

pycharm ImportError: No module named ‘py4j’

網上搜了很多,但處理的並不太好,我嘗試了一個方法:在官網下載py4j的zip壓縮包,解壓縮後,在cmd命令行先cd到py4j的安裝目錄下,再cd到py4j-0.10.3\py4j-0.10.3下,運行命令:python setup.py install, 等待安裝,這個問題就被完美解決了。

網上有人提及要把安裝路徑添加到PYTHONPATH,但我沒添加也沒有什麼問題,有待考究吧,參見網址:http://blog.csdn.net/hongrj/article/details/17528293

13.git 安裝和配置

http://www.360doc.com/content/17/0111/10/39439016_621721670.shtml
http://www.cnblogs.com/MrJun/p/3351478.html
學習了IDEA中github相關的操作,以後會用到吧。
(Updata: Pycharm 中也可以用,十分方便。github的克隆和上傳,還可以追訂克隆。暫時沒用到,不過很強大的樣子。。。)

到此結束啦,SunnyGJing畢設加油!!

14.投入實戰吧

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