WSL2+Ubuntu配置Java Maven Hadoop Spark環境
所需文件:
更新日期為2021/5/8:
WSL?WSL2?
WSL是適用於 Linux 的 Windows 子系統可讓開發人員按原樣運行 GNU/Linux 環境 – 包括大多數命令行工具、實用工具和應用程式 – 且不會產生傳統虛擬機或雙啟動設置開銷。
您可以:
- 在 Microsoft Store 中選擇你偏好的 GNU/Linux 分發版。
- 運行常用的命令行軟體工具(例如
grep
、sed
、awk
)或其他 ELF-64 二進位文件。 - 運行 Bash shell 腳本和 GNU/Linux 命令行應用程式,包括:
- 工具:vim、emacs、tmux
- 語言:NodeJS、Javascript、Python、Ruby、C/ C++、C# 與 F#、Rust、Go 等。
- 服務:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
- 使用自己的 GNU/Linux 分發包管理器安裝其他軟體。
- 使用類似於 Unix 的命令行 shell 調用 Windows 應用程式。
- 在 Windows 上調用 GNU/Linux 應用程式。
WSL 2 是適用於 Linux 的 Windows 子系統體系結構的一個新版本,它支援適用於 Linux 的 Windows 子系統在 Windows 上運行 ELF64 Linux 二進位文件。 它的主要目標是 提高文件系統性能,以及添加 完全的系統調用兼容性。
這一新的體系結構改變了這些 Linux 二進位文件與Windows 和電腦硬體進行交互的方式,但仍然提供與 WSL 1(當前廣泛可用的版本)中相同的用戶體驗。
單個 Linux 分發版可以在 WSL 1 或 WSL 2 體系結構中運行。 每個分發版可隨時升級或降級,並且你可以並行運行 WSL 1 和 WSL 2 分發版。 WSL 2 使用全新的體系結構,該體系結構受益於運行真正的 Linux 內核。
簡而言之WSL類似於windows提供的虛擬機,同時相比VMWare Workstation擁有更好的IO性能且支援硬體直通。
WSL的官方文檔地址://docs.microsoft.com/zh-cn/windows/wsl/
安裝WSL和WSL2
參考官方文檔:文檔地址
執執行手動安裝步驟即可。
以管理員身份打開 PowerShell 並運行如下程式碼安裝WSL:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
檢查系統是否支援WSL2:
- 對於 x64 系統:版本 1903 或更高版本,採用 內部版本 18362 或更高版本。
- 對於 ARM64 系統:版本 2004 或更高版本,採用 內部版本 19041 或更高版本。
- 低於 18362 的版本不支援 WSL 2。
若要檢查 Windows 版本及內部版本號,選擇 Windows 徽標鍵 + R,然後鍵入「winver」,選擇「確定」。
如果不支援WSL2,可以直接重啟電腦,安裝Linux發行版即可。
以管理員身份打開 PowerShell 並運行如下程式碼啟用虛擬機功能:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重啟電腦
下載安裝 Linux 內核更新包:點擊下載
打開 PowerShell,然後在安裝新的 Linux 發行版時運行以下命令,將 WSL 2 設置為默認版本:
wsl --set-default-version 2
安裝Linux發行版
安裝完成後點擊啟動,首次啟動需要輸入用戶名和密碼。
子系統安裝java
首先描述一下如何進行Windows和Linux之間的文件操作:
方法一:通過 \\wsl$
訪問 Linux 文件時將使用 WSL 分發版的默認用戶。 因此,任何訪問 Linux 文件的 Windows 應用都具有與默認用戶相同的許可權。
方法二:通過VS Code訪問Linux文件
參考文檔:CSDN部落格
正式安裝:
將所需的文件複製到WSL的目錄中,我一般遵循實體機的習慣放置到下載目錄。
cd到存放目錄使用tar命令解壓壓縮文件:
tar -zxvf jdk-8u291-linux-x64.tar.gz
使用cp命令修改文件名便於後續操作(jdk1.8.0_291為解壓後文件)
cp -r jdk1.8.0_291 jdk8
將jdk移動到某個目錄,我放在了/usr/bin/java/。(通過mkdir創建java目錄並移動)
sudo mkdir /usr/bin/java/
sudo mv jdk8 /usr/bin/java/
添加java到環境中:
sudo vi /etc/profile
使用vi編輯器在最後面添加:請將JAVA_HOME路徑修改為你的jdk目錄,可以通過pwd查看當前目錄,直接複製輸出即可。
export JAVA_HOME=/usr/bin/java/jdk8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
添加完成後按ESC鍵輸入:wq!保存並退出。
使用如下命令刷新:
source /etc/profile
輸入 java -version和javac -version測試無異常即可。
子系統安裝Maven
安裝步驟與Java基本相同,解壓到制定目錄,添加到環境。
寫入:(同樣注意修改路徑)
# maven
export MAVEN_HOME=/usr/bin/maven
export PATH=$PATH:$MAVEN_HOME/bin
使用source /etc/profile刷新後使用mvn -v檢查能否正常使用。
子系統安裝Hadoop
安裝ssh服務端:
sudo apt-get update
sudo apt-get install openssh-server -y
如果提示已經安裝請刪除後重新安裝。安裝完成後重啟ssh服務:
sudo service ssh --full-restart
使用如下命令測試ssh:
ssh localhost
執行該命令後會,會出現「yes/no」選擇提示,輸入「yes
」,然後按提示輸入密碼。如果出現以下提示:
修改/etc/ssh/sshd_config文件中PasswordAuthentication為yes
重啟服務即可。
進入SSH後,輸入命令「exit
」退出剛才的SSH,就回到了原先的終端窗口;然後,可以利用ssh-keygen生成密鑰,並將密鑰加入到授權中,命令如下:
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa # 會有提示,都按回車即可
cat ./id_rsa.pub >> ./authorized_keys # 加入授權
此時,再執行ssh localhost命令,無需輸入密碼就可以直接登錄了。
下面安裝hadoop
Hadoop包括三種安裝模式:
單機模式:只在一台機器上運行,存儲是採用本地文件系統,沒有採用分散式文件系統HDFS;
偽分散式模式:存儲採用分散式文件系統HDFS,但是,HDFS的名稱節點和數據節點都在同一台機器上;
分散式模式:存儲採用分散式文件系統HDFS,而且,HDFS的名稱節點和數據節點位於不同機器上。
本文只介紹Hadoop的安裝方法
解壓hadoop到制定目錄:(我放在了/opt/hadoop)
配置環境
#Hadoop
export HADOOP_HOME=/opt/hadoop
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH
刷新後使用hadoop verson命令檢查:
子系統安裝Spark
解壓spark到制定目錄:(我放在了/opt/spark)
關聯用戶:
sudo chown -R pteromyini ./spark #pteromyini是你的用戶名
修改Spark的配置文件spark-env.sh模板文件
cd /opt/spark/
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
修改配置文件
sudo vi /opt/spark/conf/spark-env.sh
添加以下資訊:(修改hadoop目錄為你的目錄)
export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath)
有了上面的配置資訊以後,Spark就可以把數據存儲到Hadoop分散式文件系統HDFS中,也可以從HDFS中讀取數據。如果沒有配置上面資訊,Spark就只能讀寫本地數據,無法讀寫HDFS數據。
配置環境:
#Spark
export SPARK_HOME=/opt/spark
export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
PYTHONPATH環境變數主要是為了在Python3中引入pyspark庫,PYSPARK_PYTHON變數主要是設置pyspark運行的python版本。
.bashrc中必須包含JAVA_HOME,HADOOP_HOME,SPARK_HOME,PYTHONPATH,PYSPARK_PYTHON,PATH這些環境變數。如果已經設置了這些變數則不需要重新添加設置。另外需要注意,上面的配置項中,PYTHONPATH這一行有個py4j-0.10.4-src.zip,這個zip文件的版本號一定要和「/usr/local/spark/python/lib」目錄下的py4j-0.10.4-src.zip文件保持版本一致。比如,如果「/usr/local/spark/python/lib」目錄下是py4j-0.10.7-src.zip,那麼,PYTHONPATH這一行後面也要寫py4j-0.10.7-src.zip,從而使二者版本一致。
執行自帶實例檢查是否正常:
run-example SparkPi 2>&1 | grep "Pi is"
如果正常則安裝完成。