在Ubuntu 18.04.1上安裝Hadoop叢集

趙鈺瑩發表於2018-08-17

本文將介紹如何在基於Ubuntu的系統上安裝多節點Hadoop 3.1.1叢集,作者將在Ubuntu 18.04.1上安裝一個包含HDFS的三節點Hadoop叢集。

首先,我們需要為叢集建立三個虛擬機器,建立一個具有4個vCPU,4 GB記憶體和40 GB硬碟空間的Hadoop Master伺服器;為每個節點建立兩個帶有4個vCPU,8 GB記憶體和40 GB硬碟空間的Hadoop節點。

本文的三臺伺服器安裝了Ubuntu Server 18.04.1,安裝了所有更新並重新啟動,一定要確保使用靜態IP地址和內部DNS解析配置每個伺服器,或將每個伺服器新增到/ etc / hosts檔案。

準備執行Hadoop伺服器

首先,我們需要安裝Oracle Java 8,因為從Ubuntu 18.04.1開始,Java 8不再可用。

# add-apt-repository ppa:webupd8team/java
# apt update
# apt install -y oracle-java8-set-default

接受許可條款,並下載Hadoop二進位制檔案

# wget 

解壓縮歸檔並將其移至/ usr / local /

# tar -xzvf hadoop-3.1.1.tar.gz
# mv hadoop-3.1.1 /usr/local/hadoop

更新預設環境變數以包含JAVA_HOME和Hadoop二進位制目錄。

首先,我們需要知道Java的安裝位置,執行以下命令查詢。

# update-alternatives --display java
java - manual mode
  link best version is /usr/lib/jvm/java-8-oracle/jre/bin/java
  link currently points to /usr/lib/jvm/java-8-oracle/jre/bin/java
  link java is /usr/bin/java
  slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-8-oracle/jre/bin/java - priority 1081
  slave java.1.gz: /usr/lib/jvm/java-8-oracle/man/man1/java.1.gz

如上所示,JAVA_HOME應設定為/ usr / lib / jvm / java-8-oracle / jre。

開啟/etc/environment並更新PATH行以包含Hadoop二進位制目錄。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/hadoop/bin:/usr/local/hadoop/sbin"

為JAVA_HOME變數和YARN_RESOURCEMANAGER_OPTS變數新增一行。

vim 
YARN_RESOURCEMANAGER_OPTS="--add-modules=ALL-SYSTEM"

確保該目錄與上面的update-alternatives選項減去bin/java部分的輸出相匹配。

接下來,我們將新增一個hadoop使用者併為他們提供正確的許可權。

# adduser hadoop
# usermod -aG hadoop hadoop
# chown hadoop:root -R /usr/local/hadoop
# chmod g+rwx -R /usr/local/hadoop

以hadoop使用者身份登入並生成SSH金鑰,只需要在Hadoop Master上完成此步驟。

# su - hadoop
# ssh-keygen -t rsa

接受ssh-keygen的所有預設值。

現在以hadoop使用者身份登入並將SSH金鑰複製到所有Hadoop節點。 同樣,只需要在Hadoop Master上完成此步驟。

# su - hadoop
$ ssh-copy-id hadoop@hadoop1.admintome.lab
$ ssh-copy-id hadoop@hadoop2.admintome.lab
$ ssh-copy-id hadoop@hadoop3.admintome.lab

配置Hadoop主伺服器

開啟/usr/local/hadoop/etc/hadoop/core-site.xml檔案並輸入以下內容:

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop1.admintome.lab:9000</value>
  </property>
</configuration>

儲存並退出。

接下來,開啟/usr/local/hadoop/etc/hadoop/hdfs-site.xml檔案並新增以下內容:

<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop/data/nameNode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop/data/dataNode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

儲存並退出。

開啟/usr/local/hadoop/etc/hadoop/workers檔案並新增以下兩行(每個Hadoop節點一行)

hadoop2.admintome.lab
hadoop3.admintome.lab

儲存並退出。

將配置檔案從Hadoop Master複製到每個Hadoop節點。

# scp /usr/local/hadoop/etc/hadoop/* hadoop2.admintome.lab:/usr/local/hadoop/etc/hadoop/
# scp /usr/local/hadoop/etc/hadoop/* hadoop3.admintome.lab:/usr/local/hadoop/etc/hadoop/

格式化HDFS檔案系統

$ source /etc/environmnet
$ hdfs namenode -format

現在可以啟動HDFS:

hadoop@hadoop1:~$ start-dfs.sh
Starting namenodes on [hadoop1.admintome.lab]
Starting datanodes
Starting secondary namenodes [hadoop1]
hadoop@hadoop1:~$

透過在所有Hadoop伺服器上以Hadoop使用者身份執行jps命令來驗證所有內容是否正確啟動。

在Hadoop Master上你應該可以看到如下結果:

hadoop@hadoop1:~$ jps
13634 Jps
13478 SecondaryNameNode
13174 NameNode

在每個Hadoop節點上,你應該可以看到:

hadoop@hadoop2:~$ jps
8672 Jps
8579 DataNode
HDFS Web UI

HDFS Web UI

現在,我們可以透過瀏覽到Hadoop主伺服器埠9870來訪問HDFS Web UI。


可以看到如下UI:

如上所示,我們的HDFS檔案系統上有近60 GB的空閒空間。

開始執行Yarn

現在HDFS正在執行,我們已準備好啟動Yarn排程程式。

Hadoop本身需要執行任務,因此我們需要Yarn以在Hadoop叢集上合理安排任務。

export HADOOP_HOME="/usr/local/hadoop"
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME

執行以下命令以啟動Yarn:

$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers

我們可以透過以下命令來驗證是否可以正確啟動:

$ yarn node -list
2018-08-15 04:40:26,688 INFO client.RMProxy: Connecting to ResourceManager at hadoop1.admintome.lab/192.168.1.35:8032
Total Nodes:2
         Node-Id       Node-State  Node-Http-Address  Number-of-Running-Containers
hadoop3.admintome.lab:35337          RUNNING  hadoop3.admintome.lab:8042                             0
hadoop2.admintome.lab:38135          RUNNING  hadoop2.admintome.lab:8042                             0

沒有任何正在執行的容器,因為我們還沒有開始任何工作。

Hadoop Web UI

我們可以透過以下URL來檢視Hadoop Web UI:


替換Hadoop Master主機名:

執行Hadoop任務示例

我們現在可以執行Hadoop任務示例並在叢集上安排它,我們將執行的示例是使用MapReduce來計算PI。

執行以下命令來執行作業:

yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar pi 16 1000

完成整個過程將需要幾分鐘的時間。完成後,應該可以看到它已經開始計算PI:

Job Finished in 72.973 seconds
Estimated value of Pi is 3.1425000000000000000

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2200305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章