WSL2+Ubuntu配置Java Maven Hadoop Spark環境

所需文件:

更新日期為2021/5/8:

Linux 內核更新包

JDK1.8

maven3.8.1

hadoop3.3.0

spark3.1.1

WSL?WSL2?

WSL是適用於 Linux 的 Windows 子系統可讓開發人員按原樣運行 GNU/Linux 環境 – 包括大多數命令行工具、實用工具和應用程式 – 且不會產生傳統虛擬機或雙啟動設置開銷。

您可以:

  • 在 Microsoft Store 中選擇你偏好的 GNU/Linux 分發版。
  • 運行常用的命令行軟體工具(例如 grepsedawk)或其他 ELF-64 二進位文件。
  • 運行 Bash shell 腳本和 GNU/Linux 命令行應用程式,包括:
    • 工具:vim、emacs、tmux
    • 語言:NodeJS、Javascript、Python、Ruby、C/ C++、C# 與 F#、Rust、Go 等。
    • 服務:SSHD、MySQL、Apache、lighttpd、MongoDBPostgreSQL
  • 使用自己的 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

image-20210508171158501

檢查系統是否支援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

image-20210508171455696

重啟電腦

下載安裝 Linux 內核更新包:點擊下載

打開 PowerShell,然後在安裝新的 Linux 發行版時運行以下命令,將 WSL 2 設置為默認版本

wsl --set-default-version 2

安裝Linux發行版

image-20210508172057015

image-20210508172714461

安裝完成後點擊啟動,首次啟動需要輸入用戶名和密碼。

子系統安裝java

首先描述一下如何進行Windows和Linux之間的文件操作:

方法一:通過 \\wsl$ 訪問 Linux 文件時將使用 WSL 分發版的默認用戶。 因此,任何訪問 Linux 文件的 Windows 應用都具有與默認用戶相同的許可權。

image-20210508173452287

image-20210508173505060

方法二:通過VS Code訪問Linux文件

image-20210508173654794

參考文檔:CSDN部落格

正式安裝:

將所需的文件複製到WSL的目錄中,我一般遵循實體機的習慣放置到下載目錄。

image-20210508195157301

cd到存放目錄使用tar命令解壓壓縮文件:

tar -zxvf jdk-8u291-linux-x64.tar.gz

image-20210508195432732

使用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

image-20210508200001858

添加完成後按ESC鍵輸入:wq!保存並退出。

使用如下命令刷新:

source /etc/profile

輸入 java -version和javac -version測試無異常即可。

子系統安裝Maven

安裝步驟與Java基本相同,解壓到制定目錄,添加到環境。

image-20210508200803292

image-20210508201047562

寫入:(同樣注意修改路徑)

# maven
export MAVEN_HOME=/usr/bin/maven
export PATH=$PATH:$MAVEN_HOME/bin

使用source /etc/profile刷新後使用mvn -v檢查能否正常使用。

image-20210508201408277

子系統安裝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」,然後按提示輸入密碼。如果出現以下提示:

image-20210508203159696

修改/etc/ssh/sshd_config文件中PasswordAuthentication為yes

image-20210508203310871

重啟服務即可。

進入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)

image-20210508201925362

配置環境

#Hadoop
export HADOOP_HOME=/opt/hadoop
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH

刷新後使用hadoop verson命令檢查:

image-20210508202315915

子系統安裝Spark

解壓spark到制定目錄:(我放在了/opt/spark)

image-20210508203818567

關聯用戶:

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"

image-20210508205048765

如果正常則安裝完成。