Hadoop 完全分布式(Fully Distributed)安裝

原文地址:https://www.inlighting.org/archives/install-hadoop-in-fully-distributed-mode

本篇文章主要介紹如何搭建完全分布式的 Hadoop 集群,介于 Hadoop 配置復雜,特此寫下此篇文章記錄。

基礎準備

這一次我使用三臺服務器組建一個 Hadoop 集群,三臺機器我通過虛擬機(Parallel Desktop)模擬,當然大家也可以使用 VirtualBox 或 VMWare 等軟件。

三臺機器配置信息如下:

CPU:雙核

內(nèi)存:2G

磁盤:12G

root 密碼:123456

系統(tǒng):Centos 8.0 (Minimal Install)

image

環(huán)境安裝

更新系統(tǒng)軟件(可選)

其實不更新也沒啥事估計。

允許 dnf update -y 。

從 Centos 8 開始內(nèi)置了 dnf 命令,所以這里我使用 dnf 命令代替了 yum 。

安裝 openjdk 1.8

執(zhí)行 dnf install java-1.8.0-openjdk-devel.x86_64 -y

安裝 vim

為了方便后面 Hadoop 配置文件的編輯,我們安裝一個 vim 。

執(zhí)行 dnf install vim -y

安裝 tar

安裝解壓軟件,用于解壓 tar 的壓縮文件。

執(zhí)行 dnf install tar.x86_64 -y

機器克隆

通過虛擬機管理軟件將這臺機器克隆 2 臺當做 slave 節(jié)點。

通信配置

我們要讓三臺機子組成一個小型局域網(wǎng)。

我這里三臺機子分配的虛擬 IP 為:

  • Master : 10.211.55.11
  • Slave1 : 10.211.55.12
  • Slave2 : 10.211.55.13

hostname 編輯(非必須,只是為了命令行方便管理,不然都是千篇一律的 localhost )

我這里以 master 節(jié)點為例:

執(zhí)行 hostname 命令我能看到默認為 localhost.localdomain 。

執(zhí)行 hostnamectl set-hostname master ,重啟系統(tǒng)即可。

hosts 文件編輯

修改三臺機子的 /etc/hosts 文件,添加如下代碼:

10.211.55.11 master
10.211.55.12 slave1
10.211.55.13 slave2

靜態(tài) IP 配置(可選)

我這里主機默認的 IP 是通過 DHCP 服務獲取的,如果下次分配的地址變了,會導致 3 臺機子之間的通訊出現(xiàn)異常。所以這里我們配置 Centos 8 改為靜態(tài) IP 。

編輯 ifcfg-xxxx

xxxx 一般是你的網(wǎng)卡名,這里我輸入命令 vim /etc/sysconfig/network-scripts/ifcfg-ens18 編輯我的網(wǎng)卡配置信息。

修改 BOOTPROTO="static" ,在文件后面追加 IP 地址,網(wǎng)關等信息:

IPADDR=10.211.55.11
NETMASK=255.255.255.0
GATEWAY=10.211.55.255

保存后輸入命令 systemctl restart NetworkManager 重啟網(wǎng)絡(Centos 7 命令為 systemctl restart network)。

權(quán)限配置

系統(tǒng)安裝完默認使用 root 賬號, hadoop 如果在 root 下運行不安全,需要額外配置,為了省事,這里我們在三臺機子里均創(chuàng)建一個名為 hadoop 的用戶。

以某一節(jié)點為例:

執(zhí)行 adduser hadoop 即可創(chuàng)建 hadoop 用戶,執(zhí)行 passwd hadoop 為 hadoop 用戶創(chuàng)建密碼,這里密碼為 123456 。(第一次系統(tǒng)會提示 BAD PASSWORD,密碼強度不夠,你再輸入一次即可)。

SSH 免密登入

我們需要配置 master 主機到 slave1 , slave2 和其本身的 SSH 免密登入。

  1. 先執(zhí)行 su hadoop 切換到 hadoop 用戶。

  2. 在 Master 主機執(zhí)行 ssh-keygen -t rsa ,一路回車,生成密鑰。

  3. 分別執(zhí)行 ssh-copy-id hadoop@master ,ssh-copy-id hadoop@slave1ssh-copy-id hadoop@slave2 將密鑰拷貝到三個節(jié)點。完成后我們可以輸入 ssh hadoop@slave1 進行測試。

注意本機 master 也需要免密設置,因為我們后面會將 master 既做管理節(jié)點,也做一個 slave 節(jié)點。

Hadoop 分布式架構(gòu)介紹

  • master 節(jié)點為母節(jié)點,負責調(diào)度兩個 slave 節(jié)點,同時其自己也充當一個 slave 節(jié)點。

    • NameNode 運行在 master 節(jié)點上,負責 DataNode 的統(tǒng)一管理。
    • SecondaryNode 運行在 master 節(jié)點上,輔助 NameNode 的運行。
    • ResourceManager 運行在 master 節(jié)點上,負責 yarn 任務的調(diào)度。
  • slave 為奴隸節(jié)點(一般叫 worker),負責運算、存儲。

    • DataNode 運行在 slave 上,一個數(shù)據(jù)節(jié)點,存儲數(shù)據(jù)。
    • NodeManager 運行在 slave 上,負責執(zhí)行任務。

Hadoop 下載安裝

三臺機子均下載 hadoop文件到 /home/hadoop 目錄下,進行解壓(注意權(quán)限問題,權(quán)限都要屬于 hadoop 用戶,防止后面出現(xiàn)意想不到的問題)

命令行示例:

su hadoop
cd /home/hadoop
wget http://apache.mirror.colo-serv.net/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
tar -zxvf hadoop-3.2.1.tar.gz

JAVA_HOME 配置

在 Centos 8 中 OpenJDK 8 的默認安裝路徑在 /usr/lib/jvm/java-1.8.0-openjdk 下,我們打開 ~/hadoop-3.2.1/etc/hadoop/hadoop-env.sh 修改一行的代碼為

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
image

NameNode 配置

編輯 ~/hadoop-3.2.1/etc/hadoop/core-site.xml 的代碼如下:

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>
image

HDFS 配置

編輯 ~/hadoop-3.2.1/etc/hadoop/hdfs-site.xml 代碼如下:

<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/data/nameNode</value>
  </property>

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/data/dataNode</value>
  </property>

  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>
image

其中最后一項設置 dfs.replication 表示在 Hadoop 集群中一份文件要存在幾份備份,數(shù)字的設置不要大于真實存在機器的數(shù)量。

例如我有三個計算節(jié)點(slave),dfs.replication 的值不能大于 3。

設置 YARN

編輯 ~/hadoop-3.2.1/etc/hadoop/mapred-site.xml 代碼如下:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  
  <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  </property>
  
  <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  </property>
  
  <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  </property>
</configuration>
image

編輯 ~/hadoop-3.2.1/etc/hadoop/yarn-site.xml 代碼如下:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
image

配置 Workers 節(jié)點

slave 這里的叫法為 worker ,編輯 ~/hadoop-3.2.1/etc/hadoop/workers 代碼如下:

master
slave1
slave2

我這里填寫了 master 節(jié)點,意味著 master 節(jié)點不光充當管理,自己也承擔了一個 worker 節(jié)點。

image

拷貝配置到各個 slave 節(jié)點

執(zhí)行命令:

scp hadoop-3.2.1/etc/hadoop/* slave1:/home/hadoop/hadoop-3.2.1/etc/hadoop/
scp hadoop-3.2.1/etc/hadoop/* slave2:/home/hadoop/hadoop-3.2.1/etc/hadoop/

將配置文件拷貝到另外兩個 slave 節(jié)點。

運行測試

關閉防火墻

首先要關閉三個節(jié)點的防火墻,同時禁止開機運行,防止在內(nèi)網(wǎng)通信時出現(xiàn)意想不到的問題,執(zhí)行如下命令:

systemctl stop firewalld
systemctl disable firewalld

HDFS 開啟

我們在 master 節(jié)點執(zhí)行下面命令,對 HDFS 進行初始化,./hadoop-3.2.1/bin/hdfs namenode -format 。

隨后執(zhí)行 ./hadoop-3.2.1/sbin/start-dfs.sh 開啟 hdfs 集群。

大家可以在 master 節(jié)點輸入 jps 命令看到已經(jīng)在運行的進程

4930 SecondaryNameNode
4579 NameNode
4739 DataNode
5050 Jps

在 slave 節(jié)點 jps 命令可以看到:

2834 DataNode
2895 Jps

在瀏覽器訪問 localhost:9870 可以看到 web 的控制界面(虛擬機的訪問需要開啟端口轉(zhuǎn)發(fā)):

image

Yarn 開啟

執(zhí)行 ./hadoop-3.2.1/sbin/start-yarn.sh 命令即可開啟,訪問地址 localhost:8088 可以看到如下界面:

image

上面我們可以看到 3 個節(jié)點在正常運行。

總結(jié)

至此,完成了 Hadoop 分布式的配置,為了盡可能精簡配置,很多參數(shù)都是使用默認的。其中在 hadoop 目錄下的 sbin 文件夾中提供了很多有用的腳本,例如 start-all.sh 能夠一鍵開啟 hdfs 和 yarn 。大家注意關閉系統(tǒng)時需要使用 stop-xx.sh 腳本關閉系統(tǒng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容