WSL2+Ubuntu配置Java Maven Hadoop Spark環境

Pteromyini發表於2021-05-08

所需檔案:

更新日期為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的官方文件地址:https://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

如果正常則安裝完成。

相關文章