一、安裝虛擬機及Ubuntu
虛擬機選擇VirtualBox,操作系統選擇Ubuntu的server版。
這兩個軟件都是免費的,可以在官網上用迅雷下載得到。
1 安裝虛擬機
這個過程比較簡單。直接雙擊以及下一步就搞定了。
最后記得在加載Ubuntu的iso之前設置下網絡模式。在網卡2上記得配置Host-Only模式,這樣可以讓Windows通過SSH以及Samba去訪問虛擬機。
另外還可以通過Ctrl+G來配置全局的網絡環境。一般來說可以不用這么做。
2 安裝Ubuntu
在virtualBox中加載ubuntu的iso后就可以啟動安裝程序。需要注意的是要選English語言,不然如果選中文簡體會造成后面亂碼的情況。雖然可能在SSH終端中不亂,但是為了省事還是選English吧。
另外在選擇額外軟件的時候記得把SSH和Samba都選上,不過如果錯過了后面用adp-get安裝也可以。
3 配置Ubuntu環境
通過安裝和重啟把Ubuntu裝好后,接下來就是如何通過SSH以及Samba來使用ubuntu了。
3.1 配置eth1
eth0是讓ubuntu通過虛擬機的NAT(網絡地址轉換)來直接訪問外網。
eht1是讓Windows通過Host-Only模式來連接Ubuntu,這樣可以互相ping通并使用SSH以及Samba。
在ubuntu中ifconfig,可以看到eth1可能并沒有啟動起來。那么需要在/etc/network/interfaces中加入eth1的配置:設置為靜態IP,并自動啟動。
paul@spark-PC:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
#Virtualbox Host-only mode
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
#network 192.168.56.0
寫好后再重新啟動下網絡:
paul@spark-PC:~$ sudo /etc/init.d/networking restart
此時再ifconfig,就可以看到eth1的網絡信息了。
不過有可能你會很悲劇,發現上面這個命令在執行中顯示stop fail,然后顯然不能再次start,這時候你可以再試試sudo service networking restart,不過八九不離十還是不行。這時候索性來個痛快sudo ifdown -a && sudo ifup -a,這時候會顯示網卡都關閉和打開好了。然后可能會發現依然不能正常和Windows通信。這時候再sudo reboot 吧,重啟后應該就萬事ok了。(再補充下,如果你一開始遇到這個問題,那么可能你需要以后每次打開虛擬機后都要reboot下,不然可能網絡還是不通。)
然后可以在Windows中ping 192.168.56.101以及在ubuntu中ping 192.168.56.1看看互相是否都能ping通。
這時使用MobaXtermPro9建立SSH連接就可以和ubuntu在SSH上交互了。
3.2 配置Samba
配置Samba的用處在于后面可能會使用Windows的IDE。如果純粹只是傳輸文件的話,其實MobaXtermPro已經可以輕松通過可視化sftp搞定了。
如果之前沒有安裝Samba,那么就sudo apt-get insall samba來安裝下。
在自己的home目錄中創建一個用于Samba分享的目錄:
mkdir share/ ? ?//如果配置的共享目錄不存在則創建
sudo chown -R paul.paul share/ ? ?//設置共享目錄歸屬為 你的系統用戶
sudo chmod 777 share/ ? ?//將共享目錄屬性設置為 777
說明:share你可以隨便起個名字做為共享文件夾
為了以防萬一:sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
然后在對/etc/samba/smb.conf修改,在文件最后添加:
[share]
path = /home/paul/share
available = yes
browseable = yes
public = yes
writable = yes
valid users = paul
create mask = 0700
directory mask = 0700
force user = paul
force group = paul
添加完畢后,再把用戶添加進去
sudo?smbpasswd -a paul ?//系統用戶名字
重啟samba服務器:
sudo testparm?? 驗證一下配置參數有沒有問題,如果有問題在回去修改
sudo /etc/init.d/samba restart(有可能在init.d下面沒有samba這個服務。那么就換成smbd,或者用下面這兩行命令)
sudo service samba restart
sudo service smbd restart
現在可以在Windows的映射網絡驅動器中添加網盤了。
二、在Ubuntu下安裝Spark
Spark基本不依賴于別的軟件,只需要一個jdk7以及以上的環境就夠了。當然后面用到Python以及Scala的時候還需要安裝這兩個。
1、安裝jdk8
1、首先到Oracle官網上下載最新版的jdk,比如這次是jdk-8u121-linux-i586.tar.gz
2、將jdk-8u121-linux-i586.tar.gz拷貝到/usr/lib/jdk/目錄下面,這里如果沒有jdk文件夾,則創建該文件夾,命令:(可以使用Xmoba的sftp傳輸)
sudo mkdir jdk? //創建文件夾jdk
復制到剛剛創建的目錄后
sudo tar -zxvf jdk-7u51-linux-i586.tar.gz? ? //解壓縮文件
3、設置環境變量,用vim打開/etc/profile文件
sudo vim /etc/profile
在文件的最后面增加:
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_121
export JRE_HOME=/usr/lib/jdk/jdk1.8.0_121/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存并關閉文件
4、將系統默認的jdk修改過來
sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.8.0_121/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.8.0_121/bin/javac 300
sudo update-alternatives --config java
sudo update-alternatives --config javac
5、檢測Java是否安裝成功,
輸入:
java -version
顯示如下說明成功(具體jdk版本根據自己下載的可能不一樣):
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
2、Spark的quick start
到了這里就開始真的接觸使用spark了。最開始的quick start比較簡單,就是把在官網上下載好的最新版本的預編譯過的包安裝解壓出來就可以了。我自己下載的時候解壓的最新版本是:tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
然后按照Spark官網的spark.apache.org/docs/latest/quick-start.html說明
進行一些操作,檢查下是否有問題。比如./bin/run-example SparkPi 10 2>/dev/null如果能顯示Pi is roughly 3.141059141059141就說明spark所需的環境都裝好了。
3、 給Python配置pyspark
在單獨使用python,代碼中import pyspark時會遇到問題:不是無法加載pyspark就是py4j的庫找不到。這需要在環境變量中告訴python這些包的路徑。
在~/.bashrc中添加
export SPARK_HOME=/home/paul/tools/spark-2.1.0-bin-hadoop2.7
export PYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
這樣Python中就可以任意使用了,而不是必須走spark的submit的bin了。比如don‘’t run your py file as:python filename.pyinstead use:spark-submit filename.py
接下來還要再研究用Java,(use Maven to compile an application JAR)
4、 在Windows中配置maven
為什么要在Windows中使用maven,主要是寄希望于win平臺下編譯產生的jar能夠在ubuntu上提交給spark運行。
首先還是下載maven,我自己配合maven使用的IDE是IntelliJ IDEA。idea直接在官網下載最新版本即可,然后在http://idea.lanyus.com/上獲得注冊碼完成注冊。下載maven也是從官網下載最新版本然后解壓。按照解壓出來的README指示配置下環境變量就ok了。不過我自己還是按照網上的說法自己配的復雜一些的環境變量。
使用系統屬性設置環境變量。
M2_HOME=C:\Program Files\apache-maven-3.5.0
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
添加字符串 “;%M2%” 到系統“Path”變量末尾
再運行mvn -version就可以看到mvn的一些基本信息了。
接下來開始在idea中創建maven的spark項目了。(可以在google中搜索spark maven看到很多示例)
首先在idea中選擇新建一個project,然后在project中選擇maven,但是在接下來的界面中不選擇任何archetype,點擊next。然后在GroupID中輸入自己公司的名字,比如com.paulHome.app,artifactId輸入firstSpark-App。版本號寫1.0.繼續next。project name和location隨便填寫,然后finish。
再緊接著顯示出的pom.xml中在version之后仿照spark的quick start添加:
然后在選中src/main/java之后新建一個java類文件出來,比如取名叫firstSparkMain
然后輸入spark的quick start的demo代碼
期間先不要急著在idea中build,因為右下狀態欄中顯示還在下載一些依賴文件。這時候要等一等。如果不想等,那么可以cmd到這個工程目錄下,用命令mvn package,然后你會發現還是需要下載,還是要等。(另外可以添加國內的鏡像加速maven的下載依賴的速度。)
比如加載國內阿里的鏡像:
對于直接用命令mvn來說需要修改下載安裝目錄下的conf目錄中的settings.xml文件。把mirror的配置修改為上面圖片中的信息。對于使用idea來說,可以在file->setting中搜索maven。然后修改user settings file為修改后的xml,或者干脆使用自己下載的maven。不管哪種設置只要是把修改的setting配置上去就可以了。
這些搞定后,就可以通過命令行mvn package或者idea的build來生成jar了。(我這邊由于第一次使用idea所以在scheme和代碼的字體格式上也做了修改。)
使用命令行mvn是在工程目錄下面的target目錄下就生成了firstSpark-app-1.0.jar
使用idea是需要先在file->project structure->Artifacts中“+”來添加一個jar生成方式。然后通過build->build Artifacts..就在out目錄下生成了一個firstSparkApp.jar(不過這個文件非常大有80M,比mvn生成的大不少)
至此這部分工作就大功告成了。接下來就是把jar放到ubuntu上運行了。
(第一次使用maven和idea:感覺maven太偉大了,idea比起eclipse來說也更有意思些)
5、在ubuntu的spark下運行
將生成的jar拷到ubuntu中,然后按照spark的quick start中的描述來運行:
比如./spark-2.1.0-bin-hadoop2.7/bin/spark-submit --class "firstSparkMain" --master local[4] firstSparkApp.jar
或者./spark-2.1.0-bin-hadoop2.7/bin/spark-submit --class "firstSparkMain" --master local[4] firstSpark-app-1.0.jar
第一個是idea生成的80多M的jar,第二個是mvn生成的只有3K多的jar。這兩個都能正常運行,結果為:Lines with a: 62, lines with b: 30 ? ? ?暫時沒有搞明白這兩個jar的差別是啥。