原文地址:www.inlighting.org/2019/instal…html
本篇文章主要介紹如何搭建徹底分佈式的 Hadoop 集羣,介於 Hadoop 配置複雜,特此寫下此篇文章記錄。java
這一次我使用三臺服務器組建一個 Hadoop 集羣,三臺機器我經過虛擬機(Parallel Desktop)模擬,固然你們也能夠使用 VirtualBox 或 VMWare 等軟件。node
三臺機器配置信息以下:web
CPU:雙核apache
內存:2Gvim
磁盤:12G瀏覽器
root 密碼:123456安全
系統:Centos 8.0 (Minimal Install)bash
更新系統軟件(可選)服務器
其實不更新也沒啥事估計。
容許 dnf update -y
。
從 Centos 8 開始內置了 dnf 命令,因此這裏我使用 dnf 命令代替了 yum 。
安裝 openjdk 1.8
執行 dnf install java-1.8.0-openjdk-devel.x86_64 -y
安裝 vim
爲了方便後面 Hadoop 配置文件的編輯,咱們安裝一個 vim 。
執行 dnf install vim -y
安裝 tar
安裝解壓軟件,用於解壓 tar 的壓縮文件。
執行 dnf install tar.x86_64 -y
機器克隆
經過虛擬機管理軟件將這臺機器克隆 2 臺當作 slave 節點。
咱們要讓三臺機子組成一個小型局域網。
我這裏三臺機子分配的虛擬 IP 爲:
hostname 編輯(非必須,只是爲了命令行方便管理,否則都是千篇一概的 localhost )
我這裏以 master 節點爲例:
執行 hostname
命令我能看到默認爲 localhost.localdomain
。
執行 hostnamectl set-hostname master
,重啓系統便可。
hosts 文件編輯
修改三臺機子的 /etc/hosts
文件,添加以下代碼:
10.211.55.11 master
10.211.55.12 slave1
10.211.55.13 slave2
複製代碼
我這裏主機默認的 IP 是經過 DHCP 服務獲取的,若是下次分配的地址變了,會致使 3 臺機子之間的通信出現異常。因此這裏咱們配置 Centos 8 改成靜態 IP 。
編輯 ifcfg-xxxx
xxxx 通常是你的網卡名,這裏我輸入命令 vim /etc/sysconfig/network-scripts/ifcfg-ens18
編輯個人網卡配置信息。
修改 BOOTPROTO="static"
,在文件後面追加 IP 地址,網關等信息:
IPADDR=10.211.55.11
NETMASK=255.255.255.0
GATEWAY=10.211.55.255
複製代碼
保存後輸入命令 systemctl restart NetworkManager
重啓網絡(Centos 7 命令爲 systemctl restart network
)。
系統安裝完默認使用 root 帳號, hadoop 若是在 root 下運行不安全,須要額外配置,爲了省事,這裏咱們在三臺機子裏均建立一個名爲 hadoop 的用戶。
以某一節點爲例:
執行 adduser hadoop
便可建立 hadoop 用戶,執行 passwd hadoop
爲 hadoop 用戶建立密碼,這裏密碼爲 123456 。(第一次系統會提示 BAD PASSWORD,密碼強度不夠,你再輸入一次便可)。
咱們須要配置 master 主機到 slave1 , slave2 和其自己的 SSH 免密登入。
先執行 su hadoop
切換到 hadoop 用戶。
在 Master 主機執行 ssh-keygen -t rsa
,一路回車,生成密鑰。
分別執行 ssh-copy-id hadoop@master
,ssh-copy-id hadoop@slave1
和 ssh-copy-id hadoop@slave2
將密鑰拷貝到三個節點。完成後咱們能夠輸入 ssh hadoop@slave1
進行測試。
注意本機 master 也須要免密設置,由於咱們後面會將 master 既作管理節點,也作一個 slave 節點。
master 節點爲母節點,負責調度兩個 slave 節點,同時其本身也充當一個 slave 節點。
slave 爲奴隸節點(通常叫 worker),負責運算、存儲。
三臺機子均下載 hadoop文件到 /home/hadoop
目錄下,進行解壓(注意權限問題,權限都要屬於 hadoop 用戶,防止後面出現意想不到的問題)
命令行示例:
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
複製代碼
在 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
複製代碼
編輯 ~/hadoop-3.2.1/etc/hadoop/core-site.xml
的代碼以下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
複製代碼
編輯 ~/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>
複製代碼
其中最後一項設置 dfs.replication
表示在 Hadoop 集羣中一份文件要存在幾份備份,數字的設置不要大於真實存在機器的數量。
例如我有三個計算節點(slave),
dfs.replication
的值不能大於 3。
編輯 ~/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>
複製代碼
編輯 ~/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>
複製代碼
slave 這裏的叫法爲 worker ,編輯 ~/hadoop-3.2.1/etc/hadoop/workers
代碼以下:
master
slave1
slave2
複製代碼
我這裏填寫了 master 節點,意味着 master 節點不光充當管理,本身也承擔了一個 worker 節點。
執行命令:
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 節點。
首先要關閉三個節點的防火牆,同時禁止開機運行,防止在內網通訊時出現意想不到的問題,執行以下命令:
systemctl stop firewalld
systemctl disable firewalld
複製代碼
咱們在 master 節點執行下面命令,對 HDFS 進行初始化,./hadoop-3.2.1/bin/hdfs namenode -format
。
隨後執行 ./hadoop-3.2.1/sbin/start-dfs.sh
開啓 hdfs 集羣。
你們能夠在 master 節點輸入 jps
命令看到已經在運行的進程
4930 SecondaryNameNode
4579 NameNode
4739 DataNode
5050 Jps
複製代碼
在 slave 節點 jps
命令能夠看到:
2834 DataNode
2895 Jps
複製代碼
在瀏覽器訪問 localhost:9870
能夠看到 web 的控制界面(虛擬機的訪問須要開啓端口轉發):
執行 ./hadoop-3.2.1/sbin/start-yarn.sh
命令便可開啓,訪問地址 localhost:8088
能夠看到以下界面:
上面咱們能夠看到 3 個節點在正常運行。
至此,完成了 Hadoop 分佈式的配置,爲了儘量精簡配置,不少參數都是使用默認的。其中在 hadoop 目錄下的 sbin 文件夾中提供了不少有用的腳本,例如 start-all.sh
可以一鍵開啓 hdfs 和 yarn 。你們注意關閉系統時須要使用 stop-xx.sh
腳本關閉系統。