準備工作
-
三臺虛擬機
hostname hosts配置文件 ip 用戶 hadoop101 192.168.43.11 hadoop101
192.168.43.12 hadoop102
192.168.43.13 hadoop103192.168.43.11 xiaomao hadoop102 同上 192.168.43.12 xiaomao hadoop103 同上 192.168.43.13 xiaomao 注意:IP配置爲靜態,每臺虛擬機用新建的xiaomao賬戶。每個用戶授予管理員權限。
如何配置用戶的管理員權限:
vi編輯 /etc/sudoers 文件,找到 root ALL=(ALL) ALL,在下面添加一行,如下所示:
## Allow root to run any commands anywhere root ALL=(ALL) ALL xiaomao ALL=(ALL) ALL
-
準備安裝目錄:
在/opt/下創建下面兩個目錄:
total 0 drwxr-xr-x. 4 xiaomao xiaomao 40 Jun 3 12:23 module drwxr-xr-x. 2 xiaomao xiaomao 67 Jun 3 12:21 software [xiaomao@hadoop101 opt]$
分別存放安裝包和解壓的程序
部署計劃
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
1.安裝JDK和Hadoop
分別下載JDK和Hadoop安裝包到/opt/software目錄,解壓到/opt/module目錄。(三個節點分別安裝,也可以先配置一臺,克隆後,修改ip和hostname等即可)
vim /etc/profile 配置環境變量
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile
2.編寫一個集羣同步腳本
因爲修改一些配置文件時,需要同步修改其他所有節點,利用腳本可以提升效率。
將腳本xsync文件放在用戶bin目錄:/home/xiaomao/bin 。這樣可以在任意目錄執行。注意授予該文件執行權限:
chmod +x xsync
3.配置Hadoop
以下操作在101進行,最後同步到其他節點
cd /opt/module/hadoop-3.1.3/etc/hadoop
-
環境變量配置:hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8
-
核心配置文件:core-site.xml
<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data/tmp</value> </property> </configuration>
-
HDFS配置文件: hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置,即SecondaryNameNode --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:9868</value> </property> </configuration>
-
YARN配置:yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <!-- Reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop102</value> </property> </configuration>
最後同步配置文件到其他兩個節點:
xsync /opt/module/hadoop-3.1.3/etc/hadoop
至此,安裝配置結束。
更多配置選項和默認值,參加hadoop官網
4.單節點啓動
第一次啓動需要先格式化HDFS:
hadoop101上:
$HADOOP_HOME/bin/hdfs namenode -format
啓動NameNode:
$HADOOP_HOME/bin/hdfs --daemon start namenode
啓動DataNode:
$HADOOP_HOME/bin/hdfs --daemon start datanode
然後分別到102和103上啓動DataNode ,可以通過jps查看進程啓動情況。
顯然,如果集羣節點很多,這樣效率很低。所以hadoop提供了另外的腳步,可以直接啓動所有節點的進程。前提是配置ssh免登錄
在master節點啓動HDFS的namenode和其他所有的datanode腳本:在101執行
$HADOOP_HOME/sbin/start-dfs.sh
啓動yarn:在102(配置ResourceManager所在的機器執行)
$HADOOP_HOME/sbin/start-yarn.sh
5.配置SSH免登錄
Hadoop框架本身並不需要ssh,因爲hadoop是分佈式架構,但是Hadoop提供的啓動腳本(e.g., start-mapred.sh and start-dfs.sh)利用ssh去啓動不同節點的進程,所以需要進行配置。需要配置namenode到其他節點的免登錄(101到101,102,103)和ResourceManager到其他節點的免登錄(102到101,102,103)
-
首先在三臺機器生成對應的ssh公鑰
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
-
101到其他機器的免登錄
ssh-copy-id hadoop101 ssh-copy-id hadoop102 ssh-copy-id hadoop103
-
102到其他機器的免登錄
ssh-copy-id hadoop101 ssh-copy-id hadoop102 ssh-copy-id hadoop103
遇到問題:
配置免登錄後,登錄還提示需要密碼:
跟 sshd 服務相關的登錄日誌可以在 /var/log/secure 中查看
從日誌可以看出是 /home/xiaomao/.ssh/ 目錄權限不對
ll /home/xiaomao/.ssh -d
drwxrwxrwx 3 xiaomao xiaomao 80 Jun 13 15:47 /home/xiaomao/.ssh
權限爲777,安全策略會禁止訪問
修改目錄權限爲 700,問題解決
chmod 700 /home/xiaomao/.ssh
6.集羣啓動
hdfs上面已經格式化了
啓動HDFS: 在101上啓動
$HADOOP_HOME/sbin/start-dfs.sh
啓動yarn: 在102上(ResourceManager配置的是102)啓動
$HADOOP_HOME/sbin/start-yarn.sh
7.訪問
Daemon | Web Interface | Notes |
---|---|---|
NameNode | http://nn_host:port/ | Default HTTP port is 9870. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |
8.集羣時間同步
選取集羣中性能較好的一臺機器作爲時間服務器,其他節點定時向時間服務器做時間同步。
這裏選取101作爲時間服務器。
時間服務器需要做如下配置:
-
1.先安裝ntp服務
查詢是否已安裝
rpm -qa|grep ntp
沒有安裝需要安裝:
yum install -y ntp
-
2.修改ntp配置
vi /etc/ntp.conf
修改內容如下
a)修改1(授權192.168.43.0-192.168.43.255網段上的所有機器可以從這臺機器上查詢和同步時間)
restrict 192.168.43.0 mask 255.255.255.0 nomodify notrap
b)修改2(集羣在局域網中,不使用其他互聯網上的時間)
c) 添加添加3(當該節點丟失網絡連接,依然可以採用本地時間作爲時間服務器爲集羣中的其他節點提供時間同步)
server 127.127.1.0 fudge 127.127.1.0 stratum 10
最後截圖
-
3.修改/etc/sysconfig/ntpd 文件
增加內容如下(讓硬件時間與系統時間一起同步)
SYNC_HWCLOCK=yes
重啓ntpd服務:
service ntpd status service ntpd start
設置開機啓動:
chkconfig ntpd on
其他要同步時間的機器,需要安裝ntpdate
yum install -y ntpdate
編寫一個定時任務:每10分鐘去101同步時間,定時任務編寫教程
crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop101
通過date命令修改時間,然後執行同步測試是否可以正常同步:
[xiaomao@hadoop102 hadoop-3.1.3]$ date
Sat Jun 13 19:07:55 CST 2020
[xiaomao@hadoop102 hadoop-3.1.3]$ sudo date -s "2019-12-11 11:11:11"
[sudo] password for xiaomao:
Wed Dec 11 11:11:11 CST 2019
[xiaomao@hadoop102 hadoop-3.1.3]$ date
Wed Dec 11 11:11:12 CST 2019
[root@hadoop102 sbin]# /usr/sbin/ntpdate hadoop101
13 Jun 19:18:19 ntpdate[9154]: step time server 192.168.43.11 offset 16012648.245208 sec
[root@hadoop102 sbin]# date
Sat Jun 13 19:18:21 CST 2020