一. 集羣規劃
1.1 集羣節點分配
注意 : 可以根據自己電腦配置調整 , 如果配置比較低就少配置幾臺子節點
主機名 | 主機IP |
---|---|
master | 192.168.100.100 |
slave1 | 192.168.100.101 |
slave2 | 192.168.100.102 |
slave3 | 192.168.100.1003 |
1.2 軟件版本
軟件名稱 | 軟件版本 |
---|---|
Java | 1.8.0_152 |
Centos | CentOS-7-x64-1708 |
Hadoop | 2.7.7 |
1.3 各軟件安裝路徑
軟件名 | 安裝路徑 |
---|---|
Hadoop | /opt/SoftWare/Hadoop/ |
Java | /opt/SoftWare/Java/ |
二. 各主機基礎軟件安裝及操作
特別注意 : 四臺主機均按照下面步驟安裝基礎軟件工具
2.1 openssh安裝,便於遠程上傳文件
[root@master ~]# yum -y install openssh-clients
2.2 同步時間工具
#安裝ntpdate工具
[root@master ~]# yum -y install ntp ntpdate
#設置與網絡時間同步
[root@master ~]# ntpdate cn.pool.ntp.org
#系統時間寫入硬件時間
[root@master ~]# hwclock --systohc
2.3 文件上傳(rz)下載(sz)工具
可以在Xshell工具中通過rz調出上傳文件的窗口進行文件上傳,也可以通過sz 文件名下載
某一個文件
[root@master ~]# yum -y install lrzsz
2.4 安裝網絡下載工具 wget
[root@test ~]# yum -y install wget
2.5 關閉防火牆
注意 : 我們只需要執行關閉防火牆以及禁止開機啓動防火牆的命令即可!
#查看防火牆開啓狀態
[root@test ~]# systemctl status firewalld
#關閉防火牆
[root@test ~]# systemctl stop firewalld
#禁止開機啓動防火牆
[root@test ~]# systemctl disable firewalld
#開啓防火牆
[root@test ~]# systemctl start firewalld
#設置開機啓動防火牆
[root@test ~]# systemctl enable firewalld
#重啓防火牆
[root@test ~]# systemctl restart firewalld
三. 配置SSH免密碼登錄
注意 : 四臺主機均按照步驟2安裝基礎軟件工具
3.1 修改hosts文件
注意 : 添加以下內容,是四臺主機都需要添加的
[root@master ~]# vi /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.100 master
192.168.100.101 slave1
192.168.100.102 slave2
192.168.100.103 slave3
3.2 配置SSH免密登錄
3.2.1 創建.ssh目錄
- 在每臺機器的root目錄下創建一個.ssh 文件夾
[root@master ~]# mkdir .ssh
- 每臺機器均進入~/.ssh 目錄進行操作
[root@master ~]# cd ~/.ssh
3.2.2 創建公鑰和祕鑰
- 在每臺機器的root目錄下創建一個.ssh 文件夾
[root@master ~]# mkdir .ssh
- 每臺機器均進入~/.ssh 目錄進行操作
[root@master ~]# cd ~/.ssh
- 輸入以下命令,一路回車,用以產生公鑰和祕鑰
[root@master .ssh]# ssh-keygen -t rsa -P ''
- 出現以下信息說明生成成功
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6YO1h1emM9gcWvv9OT6ftHxLnjP9u8p25x1o30oq3No root@master
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| . |
| S o o |
| + O * . |
| . B.X. o.+.|
| +o=+=**%|
| .oEo*^^|
+----[SHA256]-----+
3.2.3 合併公鑰文件
- 將每臺機器上的id_rsa.pub公鑰內容複製到authorized_keys文件中
[root@master .ssh]# cp id_rsa.pub authorized_keys
-
將所有的authorized_keys文件進行合併(最簡單的方法是將其餘三臺slave主機的文件內容追加到master主機上)
注意 : 這個是在三臺機器上分別執行的 , 注意下面的主機名
[root@slave1 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys'
[root@slave2 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys'
[root@slave3 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys
- 查看master上的authorized_keys文件內容,類似如下即可
ssh-rsAAAAB3NzaC1yc2EAAAADAQABAAABAQC5iw8+LlLxo0d77uaTChOKKJqfMHzp2jgzqV2hFAneFXqqWmr
36Z4/FrMUPenmdss19bP4Up9G7PGbJu29yZDvkDwlmuqnVajYyDOsCl7PPXPWXMIlxMGUHgSXLnQQi6QnWp04vJKD37s0EbiRTd0ZYCSQefzJcZ8jbQ7bLYt6jtil7FfUupTdHTeexKKd8Mq3K7YFZHumKvhzs6wWiM+n41jANS083ss3O38YmAdO2cU0w1BhLVvJhdzd6fNG3RXVCXI2v0XxCUHiqI9Oewl2qPOfKzeyy09bJxo371Ezjmt8GMrkA/Ecepkvx1392qwNzC9bSPLfbnPWVo2gIxe4mMaFqCFJ root@master
40ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQC3CkB3Jejavt+yFphsbciktWciJmbcUBOv3ZLPVLW18ZxXGZK
41vG50EPXo/4By7P6IRW0wCa5YuckQEW+q6kmSatxqJ8e/K9a1mAk13N4f7V7M71Nn8IkujlF3gHYjKrmnEWpGJCy425YBURzywIQTRArlIac1xj2SeM6q+gTMV9WrAKJupIRHli+W0kHVaYHNdKl7KMUT4KVrSl+h4wFwAd7Tcyj7JIbU43cCCL6o/v/LqGFwpcJfbfUsuKJJho+tImh41j7mSXR8kRbTSZkcq5K+iANrANwOHZ58tV5KXmMQjuVq7aJ985C1446hHssB6zq/zjAxpxAyQIeE8Incc8U8ix root@slave1
45ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQC//uaMbzbkYqxdgZJSdq+gdQYldzMQ7D3SxsUaNO5oVnVOszw
46+mbNnmL8vp1EUUehabQHPCAvCmLKUPXzfcxlyJEF/pnY77u4ySwsRVEpHvsDZbrclgCOrS6hW00sSx303KHLOgX47T70LfrmnohfUhvTxajzLXT+C8f5ZfTZ8meKD73HKl16jRwZQ8YhW9GUyuCkgQTGtKtTKPsRUd9LpAc/7/u8xvvv48NvTYPxgyTJcUMzGSOHh8J3upI54ykY0FgBkjs1fCUaDalxAgsHw9B1iyx706WbcT6ymiQVMKGnnnM6k2KPvUvfD490swVfUSG+4ZsYSRHRTgWuiBbHoIr7DVd root@slave2
50ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQDDTzTTdGRTd1zts3m7uKobcgRom4lVyF9EdNOdbBWMucYjbCs
51BgP1ideDDQed2TyBj3Szz3Yx6h1L4McGmATY/D9qRLml26VW/x0Tod8JYkqOQpQL9knLW2cwITnhLzq5VDugOix5206r/uweP3Zed9CO7ld3jUxJJNZCYpsNz+eUKq9SWM5+ehUu9pfZZu9zUk7Q01js3uCHzu1AhsajgNzgB4+YLLcc53dHBfxGg4ix5wuaF82PlEEh70hTdfRkq8pqPMZ+FIQtTgfD5XllKTcnPItUY23hc7Umx4I3ujOd810vzffWYK07c54Otv1r7LEcYtYqbZ6zIvII+M775iRkzQX root@slave3
3.2.4 分發 authorized_keys 文件
- 將master上的authorized_keys文件分發到其他主機上
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave2:~/.ssh/
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave3:~/.ssh/
3.2.5 測試免密登錄
- 每臺機器之間進行ssh免密碼登錄操作,包括自己與自己
[root@master ~]# ssh master
[root@master ~]# ssh slave1
[root@slave1 ~]# ssh master
[root@master ~]# ssh slave2
[root@slave2 ~]# ssh master
[root@master ~]# ssh slave3
[root@slave3 ~]# ssh master
[root@master ~]# ssh slave1
[root@slave1 ~]# ssh slave1
[root@slave1 ~]# ssh slave2
[root@slave2 ~]# ssh slave1
[root@slave1 ~]# ssh slave3
[root@slave3 ~]# ssh slave1
[root@slave1 ~]# ssh slave2
[root@slave2 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave3
四. 安裝配置Java環境並測試
注意 : 所有主機都需要配置Java環境
4.1 下載jdk
下載地址 :https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-x64.tar.gz
4.2 卸載其他jdk
如果centos中已經安裝的有jdk,則需要先卸載當前jdk,重新安裝新的jdk
4.2.1 查詢當前所有安裝的jdk版本
[root@master ~]# rpm -qa|grep jdk
如果什麼都沒有展示說明沒有已安裝的jdk,則無需卸載,如果出現以下jdk,則卸載之
copy-jdk-configs-2.2-3.el7.noarch
java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
4.2.2 卸載jdk
-
使用下面的方法卸載即可 [參考]
[root@master ~]# yum -y remove copy-jdk-configs-2.2-3.el7.noarch [root@master ~]# yum -y remove java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 [root@master ~]# yum -y remove java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
-
再次查詢當前所有安裝的jdk版本
[root@master ~]# rpm -qa|grep jdk
4.3 開始安裝jdk
4.3.1 在master主節點上創建指定目錄
[root@master ~]# mkdir -p /opt/SoftWare/Java
[root@master ~]# mkdir -p /opt/SoftWare/Hadoop
4.3.2 解壓
- 進入到Java目錄
[root@master ~]# cd /opt/SoftWare/Java
- 使用rz命令從windows主機上傳jdk壓縮包到master節點
[root@master Java]# rz
- 解壓到當前目錄
[root@master Java]# tar -zxvf jdk-8u152-linux-x64.tar.gz
4.3.3 配置環境變量
- 打開 profile文件
[root@master Java]# vi /etc/profile
- 在文件的末尾追加以下內容
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
export JRE_HOME=/opt/SoftWare/Java/jdk1.8.0_152/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
- 使剛纔的設置生效
[root@master Java]# source /etc/profile
- 檢測是否配置成功
[root@master Java]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
五. 安裝配置Hadoop並配置
5.1 下載Hadoop安裝包
下載地址 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.ta
5.2 上傳至master節點
- 上傳Hadoop安裝包
[root@master ~]# cd /opt/SoftWare/Hadoop
[root@master Hadoop]# rz
- 解壓
[root@master Hadoop]# tar -zxvf hadoop-2.7.7.tar.gz
5.3 創建目錄
5.3.1 進入解壓後的Hadoop根目錄
[root@master Hadoop]# cd hadoop-2.7.7
5.3.2 創建以下目錄
# 創建hadoop 緩存文件目錄
[root@master hadoop-2.7.7]# mkdir tmp
# 創建hadoop 日誌文件目錄
[root@master hadoop-2.7.7]# mkdir logs
# 創建hadoop NameNode數據目錄
[root@master hadoop-2.7.7]# mkdir -p hdfs/name
# 創建hadoop DataNode數據目錄
[root@master hadoop-2.7.7]# mkdir -p hdfs/data
5.4 修改配置
5.4.1 修改hadoop-env.sh文件
[root@master hadoop-2.7.7]# vi etc/hadoop/hadoop-env.sh
#修改JAVA_HOME爲以下內容,否則容易出現Hadoop無法啓動問題
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
5.4.2 修改yarn-env.sh文件
[root@master hadoop-2.7.7]# vi etc/hadoop/yarn-env.sh
#修改JAVA_HOME爲以下內容
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
5.4.3 編輯slaves文件
#該文件用於記錄本集羣有哪些數據節點
[root@master hadoop-2.7.7]# vi etc/hadoop/slaves
#刪除該文件中原來的內容,添加以下內容
slave1
slave2
slave3
5.4.4 修改core-site.xml文件
- 打開 core-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/core-site.xml
- 將下面的內容添加到 core-site.xml 文件
<!--在<configuration></configuration>中間添加一下內容-->
<property>
<name>fs.defaultFS</name><!--定義Hadoop Master的URI和端口-->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name><!--hadoop的臨時存儲目錄-->
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name><!--用作序列化文件處理時讀寫buffer的大小-->
<value>131702</value>
</property>
5.4.5 修改hdfs-site.xml文件
- 打開 hdfs-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/hdfs-site.xml
- 將下面的內容添加到 hdfs-site.xml
在中間添加一下內容
<!--在<configuration></configuration>中間添加一下內容-->
<property><!--namenode節點數據存儲目錄-->
<name>dfs.namenode.name.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name</value>
</property>
<property><!--datanode數據存儲目錄-->
<name>dfs.datanode.data.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/data</value>
</property>
<property><!--指定DataNode存儲block的副本數量,不大於DataNode的個數就行,默認爲3-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property><!--指定master的http協議訪問地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property><!--指定master的https協議訪問地址-->
<name>dfs.namenode.secondary.https-address</name>
<value>192.168.10.250:50091</value>
</property>
<property><!--必須設置爲true,否則就不能通過web訪問hdfs上的文件信息-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
5.4.6 修改yarn-site.xml文件
- 打開 yarn-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/yarn-site.xml
- 將下面的內容添加到 yarn-site.xml
<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.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
5.4.7 修改mapred-site.xml文件
- 這個文件並不存在,先複製再打開
#使用cp命令複製一份出來,不要自己創建
[root@master hadoop-2.7.7]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@master hadoop-2.7.7]# vi etc/hadoop/mapred-site.xml
- 添加下面的內容
<property><!--使用yarn運行mapreduce程序-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property><!--MapReduce JobHistory Server地址-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property><!--MapReduce JobHistory Server Web界面地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
5.5 分發Hadoop文件
- 將master節點上的Hadoop目錄遠程拷貝到其他slave節點
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave1:/opt/SoftWare/
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave2:/opt/SoftWare/
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave3:/opt/SoftWare/
5.6 修改環境變量
- 編輯 /etc/profile 文件
[root@master hadoop-2.7.7]# vi /etc/profile
- 添加以下內容
#添加以下內容
export HADOOP_HOME=/opt/SoftWare/Hadoop/hadoop-2.7.7
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
- 使設置生效
[root@master hadoop-2.7.7]# source /etc/profile
5.7 格式化Hadoop
注意 : 這個只需要在 master節點上執行即可, 其他的不需要執行!
不要重複格式化 ! 如果需要重複格式化, 先把之前創建的hdsf目錄下的name 和data 目錄刪除,然後再重新創建!
- 執行下面的命令
[root@master hadoop-2.7.7]# bin/hdfs namenode -format
- 在最後出現以下內容說明格式化成功
18/03/01 10:07:59 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1057357071-192.168.100.100-1519870079201
18/03/01 10:07:59 INFO common.Storage: Storage directory /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name has been successfully formatted.
18/03/01 10:07:59 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
18/03/01 10:07:59 INFO namenode.FSImageFormatProtobuf: Image file /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
18/03/01 10:07:59 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/03/01 10:07:59 INFO util.ExitUtil: Exiting with status 0
18/03/01 10:07:59 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.100.100
************************************************************/
注意上面的第二行最後的successfully formatted
5.8 啓動Hadoop集羣
5.8.1 啓動HDFS
- 按照新版要求,不建議直接使用start-all.sh命令
[root@master hadoop-2.7.7]# sbin/start-dfs.sh
- 然後會在控制檯打印以下信息
Starting namenodes on [master]
master: starting namenode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootnamenode-master.out
slave1: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave1.out
slave2: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave2.out
slave3: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave3.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadooproot-secondarynamenode-master.out
5.8.2 啓動Yarn
- 執行 start-yarn.sh
[root@master hadoop-2.7.7]# sbin/start-yarn.sh
- 然後會在控制檯打印以下信息
starting yarn daemons
starting resourcemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootresourcemanager-master.out
slave2: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave2.out
slave3: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave3.out
slave1: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave1.out
5.9 檢測集羣是否搭建成功
5.9.1 在 Master上執行
[root@master hadoop-2.7.7]# jps
44658 ResourceManager
44509 SecondaryNameNode
44318 NameNode
44958 Jps
5.9.2 在 slave節點上執行
[root@slave1 ~]# jps
2262 DataNode
2360 NodeManager
2461 Jps
5.9.3 使用WEB界面訪問
- 在瀏覽器地址欄中輸入http://192.168.100.100:50070 即可