使用WSL2在Windows 11上安裝Hadoop

banq發表於2022-01-06

在這篇文章中,我們將看到如何使用 WSL 在同一臺 Windows 11 機器上安裝完整的 Hadoop 環境。
 

安裝依賴
您需要安裝兩個重要的依賴項才能使Hadoop正常工作。這些不是可選的,除非您已經安裝了它們。因此,請確保安裝這些依賴項。

  • 安裝JDK

第一個依賴項是 java 開發工具包,或 JDK。建議使用 Java 8 或 Java 1.8 for Hadoop。這個建議來自我,因為我在使用較新版本的 Java 時遇到了問題。但是您絕對可以嘗試更新版本。
此外,安裝 Oracle JDK 或 Open JDK 或任何其他版本的 JDK 都沒有關係。你只需要安裝它。我使用以下命令在 Windows 11 上安裝的 Debian Linux 上安裝 JDK 8:
sudo apt install adoptopenjdk-8-hotspot
要在 apt 儲存庫中提供此包,您首先需要新增 PPA。為此,執行以下命令:
sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
安裝 JDK 後,請確保使用 env 變數名稱 JAVA_HOME 匯出 JDK 的路徑。匯出命令如下所示:
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
如果您只是在終端中執行此命令,則只會為當前會話匯出該變數。要使其永久有效,您必須將此命令新增到.zshrc檔案中。
 
  • 安裝 OpenSSH

 下一個要安裝的依賴項是 OpenSSH,以便 Hadoop 可以透過 SSH 連線到本地主機。這也是一個必要的依賴。如果沒有 SSH 到本地主機,Hadoop 的大多陣列件將無法工作。要安裝 OpenSSH,請在終端中執行以下命令:
sudo apt install openssh-server openssh-client -y
一旦我們為 SSH 安裝了伺服器和客戶端,我們就必須生成用於身份驗證的金鑰。為此,請執行以下命令並按照您將獲得的說明進行操作:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
生成金鑰後,您必須將它們複製到授權金鑰列表中,這樣您就不必每次透過 SSH 進入機器時都輸入密碼。這一點尤其重要,因為這是 Hadoop 所期望的。至少我還沒有看到改變這種行為的選項。因此,執行以下命令將我們剛剛建立的金鑰檔案的檔案內容cat,然後將其複製到authorized_keys檔案:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
現在,確保公鑰檔案具有正確的許可權。這是因為如果金鑰檔案的公共訪問許可權比所需的多,系統就會認為該金鑰可以被複制、複製或篡改,這意味著該金鑰是不安全的。這將使系統拒絕金鑰並且不允許 SSH 登入。所以執行以下命令來設定正確的許可權:
chmod 0600 ~/.ssh/id_rsa.pub
接下來,啟動 SSH 服務,以便我們可以測試伺服器是否工作正常。為此,請執行以下命令:
sudo service ssh start
最後,執行以下命令以確保 SSH 正常工作:
ssh localhost
 

安裝 Hadoop
安裝 Hadoop 的第一步是實際下載它。在撰寫本文時,Hadoop 的最新版本是 3.3.1 版,您可以從這裡下載。您將從那裡下載.tar.gz檔案。要解壓縮該檔案,請使用以下命令:
tar xzf hadoop-3.3.1.tar.gz
這將建立一個名為 hadoop-3.3.1 的目錄,並將所有檔案和目錄放在該目錄中。因為我們在本地機器上安裝Hadoop,所以我們要做單節點部署,也稱為偽分散式模式部署。

  • 設定環境變數

我們必須設定一堆環境變數。最好的部分是,您只需自定義一個變數。其他的只是複製貼上。無論如何,以下是我正在談論的變數:

export HADOOP_HOME=/mnt/d/bigdata/hadoop-3.3.1
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS"-Djava.library.path=$HADOOP_HOME/lib/nativ"

您只需更改第一個環境變數HADOOP_HOME 的值。將其設定為反映您放置 Hadoop 目錄的路徑。此外,將這些匯出語句放在.zshrc檔案中也是一個好主意,這樣每次都會自動匯出這些變數,而不必執行此操作。將其放入檔案後,請確保將其作為原始檔以使其立即生效:
source ~/.zshrc
 
  • 配置 Hadoop


接下來,我們必須編輯一些檔案來更改各種 Hadoop 元件的配置。讓我們從檔案hadoop-env.sh 開始。執行以下命令在編輯器中開啟檔案:
sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
接下來,找到匯出$JAVA_HOME變數的行並取消註釋。在這裡,您必須提供與之前安裝 Java 時所做的相同的路徑。對我來說,這就是以下內容:
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
接下來,我們必須編輯core-site.xml檔案。這裡我們必須提供 Hadoop 的臨時目錄以及 Hadoop 檔案系統的預設名稱。使用以下命令在編輯器中開啟檔案:
sudo vim $HADOOP_HOME/etc/hadoop/core-site.xml
您會在此處找到一個空檔案,其中包含一些註釋和一個空配置塊。您可以刪除所有內容並將其替換為以下內容:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/mnt/d/hdfs/tmp/</value>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://127.0.0.1:9000</value>
    </property>
</configuration>


確保建立了在此處配置的臨時目錄。接下來,我們必須編輯 HDFS 配置檔案hdfs-site.xml。為此,請使用以下命令在編輯器中開啟檔案:
sudo vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在這個配置檔案中,我們設定了 HDFS 資料節點目錄、HDFS 名稱節點目錄和 HDFS 複製因子。在這裡,您應該再次獲得一個帶有空配置塊的檔案。將其替換為以下內容:

<configuration>
  <property>
      <name>dfs.data.dir</name>
      <value>/mnt/d/hdfs/namenode</value>
  </property>
  <property>
      <name>dfs.data.dir</name>
      <value>/mnt/d/hdfs/datanode</value>
  </property>
  <property>
      <name>dfs.replication</name>
      <value>1</value>
  </property>
</configuration>


再次確保您建立了資料節點和名稱節點目錄。接下來,我們有 MapReduce 配置檔案。要在編輯器中開啟它,請執行以下命令:
sudo vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
您可以使用以下內容替換配置塊:

<configuration> 
  <property> 
    <name>mapreduce.framework.name</name> 
    <value>yarn</value> 
  </property> 
</configuration>


這是一個簡單的配置,它指定了 MapReduce 框架名稱。最後,我們有 YARN 配置檔案yarn-site.xml。使用以下命令在編輯器中開啟檔案:
sudo vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
將以下配置新增到檔案中:

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>127.0.0.1</value>
  </property>
  <property>
    <name>yarn.acl.enable</name>
    <value>0</value>
  </property>
  <property>
    <name>yarn.nodemanager.env-whitelist</name>   
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>



這個配置沒有什麼可以改變的。最後,我們完成了 Hadoop 的配置。我們現在可以繼續格式化名稱節點並啟動 Hadoop。
  • 格式化 HDFS 名稱節點

在第一次啟動 Hadoop 服務之前首先格式化 HDFS 名稱節點很重要。顯然,這可以確保名稱節點中的任何地方都沒有垃圾。一旦您開始更頻繁地使用 HDFS,您就會意識到您正在更頻繁地格式化名稱節點,至少在您的開發機器上是這樣。無論如何,要格式化名稱節點,請使用以下命令:
hdfs namenode -format
收到名稱節點的關閉通知後,格式化就完成了。
  • 啟動所有 Hadoop

最後,我們正處於本活動的最佳部分,即啟動和使用 Hadoop。現在,根據您實際想要使用的元件,有多種啟動 Hadoop 的方法。例如,您可以只啟動 YARN,或同時啟動 HDFS 等。對於本活動,我們將啟動所有內容。為此,Hadoop 發行版提供了一個方便的指令碼。而且因為您之前已經匯出了一堆環境變數,您甚至不必搜尋該指令碼,它已經在您的路徑中。只需執行以下命令並等待它完成:
start-all.sh
這將需要幾秒鐘的時間,因為指令碼只等待前 10 秒鐘而不做任何事情,以便在您錯誤啟動操作時為您提供取消操作的選項。
為了確保,如果您願意,您可以執行jps命令以獲取所有正在執行的程式的列表。您應該至少看到以下服務:

977 ResourceManager
353 NameNode
438 DataNode
615 SecondaryNameNode
1499 Jps

您現在正在使用 WSL 1 或 2 上的 Linux 發行版在 Windows 11 PC 上執行 Hadoop。為了確保,您可以使用以下簡單的 HDFS 命令:
hdfs dfs -ls /
此命令將列出根 HDFS 目錄中的所有檔案和目錄。
 

相關文章