1、單機模式、偽分布式、分布式的區別,
單機模式: 只在一臺機器上運行,儲存采用本地檔案系統,沒有采用HDFS,
偽分布式: 儲存采用HDFS,但是HDFS的名稱節點和資料節點都在同一臺機器上,
分布式: 儲存采用HDFS,而且HDFS的名稱節點和資料節點都在不同的機器上,
2、分布式規劃
- 一個完全的Hadoop集群需要三臺機器完成
- 一臺主機系統作Master
- 另外兩臺為:slave1、slave2
- 三臺主機機器處于同一局域網下,
- 三臺主機的用戶名均為hadoop
- 三臺主機都能相互Ping通
| 主機角色 | 主機名 | ip地址 | 運行行程 |
|---|---|---|---|
| 主節點 | master | 192.168.1.101 | NameNode、ResourceManager、SecondaryNameNode |
| 從節點 | slave1 | 192.168.1.102 | DataNode、NodeManager |
| 從節點 | slave2 | 192.168.1.103 | DataNode、NodeManager |
3、準備環境
部署需要三臺虛擬機,可以在一臺虛擬機上把基礎的環境搭好再克隆三份,
在配置環境之前可以先配好XShell連接,yum換源,
(1)克隆前準備環境:
- 作業系統:CentOS7(XShell連接)
- JDK1.8安裝,并配置環境變數(查看JDK安裝教程)
- 添加hadoop用戶,并設定管理員權限,后面的所有操作都是用hadoop這個用戶
useradd -m hadoop -s /bin/bash #創建hadoop用戶
passwd hadoop #設定密碼
chmod -v u+w /etc/sudoers #修改sudoers檔案讀寫權限(默認只讀)
vi /etc/sudoers
root ALL=(ALL) ALL #找到這一行
hadoop ALL=(ALL) ALL #添加這一行
#保存退出
chmod -v u-w /etc/sudoers #洗掉sudoers的寫的權限
- hosts檔案修改
vi /etc/hosts
#在檔案中添加下面幾行,IP地址自己規劃好,為對應主機的IP
192.168.183.101 master
192.168.183.102 slave1
192.168.183.103 slave2
(2)克隆后配置
- 配置網路
將規劃好的IP地址對應修改就行(參考這篇文章)
如果克隆前配置好的話,只需要改一下IP地址就行了
記得重啟網卡
- 修改hostname
在對應主機上執行命令
看不到變化重啟一下就可以了
hostnamectl set-hostname master #master主機
hostnamectl set-hostname slave1 #slave1主機
hostnamectl set-hostname slave2 #slave2主機
- 互Ping 其他主機,可以Ping通就OK,

- SSH免密登錄
SSH免密登錄:是主節點master能夠不需要輸入密碼,直接ssh登錄到從節點slave1、slave2上
默認已經安裝opssh-server服務,沒有安裝的自行安裝
ssh-keygen -t rsa #有提示直接Enter即可
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#ssh-copy-id 將你的公共密鑰填充到一個遠程機器上的authorized_keys檔案中
ssh-copy-id slave1 #傳給slave1
ssh-copy-id slave2 #傳給slave2
查看檔案權限,不對免密登錄不會生效,三臺主機都要修改
[hadoop@slave1 ~]$ ll -a
# .ssh檔案夾權限應為700
drwx------. 2 hadoop hadoop 29 4月 24 13:20 .ssh
[hadoop@slave1 ~]$ cd .ssh/
[hadoop@slave1 .ssh]$ ll
# authorized_keys檔案權限應為600
-rw-------. 1 hadoop hadoop 395 4月 24 13:20 authorized_keys
修改檔案權限
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
完成后登錄測驗一下,
[hadoop@master .ssh]$ ssh localhost
Last login: Sat Apr 24 13:19:36 2021 from master
[hadoop@slave1 ~]$ exit
[hadoop@master .ssh]$ ssh slave1
Last login: Sat Apr 24 13:20:36 2021 from master
[hadoop@slave1 ~]$ exit
[hadoop@master .ssh]$ ssh slave2
Last login: Sat Apr 24 13:21:20 2021 from master
[hadoop@slave2 ~]$ exit
4、安裝Hadoop
我們現在只在主節點上安裝hadoop,然后將配置好的hadoop再分發給從節點,
(1)上傳hadoop檔案
可以使用XFTP上傳hadoop安裝檔案
(2)解壓檔案,并修改檔案夾名
[hadoop@master ~]$tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local/
[hadoop@master ~]$ cd /usr/local/ #切換作業路徑
[hadoop@master local]$ sudo mv hadoop-3.3.0 hadoop #修改檔案夾名
[hadoop@master local]$ sudo chown -R hadoop ./hadoop #修改檔案權限
(3)配置環境變數
三臺主機都要配置一次hadoop和java環境變數
[hadoop@master local]$ vi ~/.bashrc
#添加這幾行
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
沒有java環境變數的也添加一下,
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
讓環境變數生效
[hadoop@master local]$ source ~/.bashrc
5、修改Hadoop組態檔
在master主機上修改Hadoop配置,這些組態檔都位于/usr/local/hadoop/etc/hadoop目錄下,
(1)修改workers
hadoop2.x 中是slaves 這個檔案
hadoop3.x 中已被修改為 workers
把DataNode 的主機名寫入該檔案,每行一個
如果加入localhost 則master 主機即做名稱節點又作資料節點,
slave1
slave2
(2)修改hadoop-env.sh
在這兩個檔案中都取消注釋JAVA_HOME那行,把java的實際路徑寫上
否則啟動集群時,會提示路徑找不到
vi hadoop-env.sh
#添加這一行
export JAVA_HOME=/usr/local/jdk1.8/
(3)修改core-site.xml 檔案
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>臨時檔案夾</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>定義默認的檔案系統主機和埠</description>
</property>
</configuration>
臨時檔案夾需要自己手動創建
[hadoop@master hadoop]$ cd /usr/local/hadoop/
[hadoop@master hadoop]$ mkdir tmp
(4)修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
<description>定義HDFS對應的HTTP服務器地址和埠</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
<description>namenode上存盤hdfs名字空間元資料 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
<description>datanode上資料塊的物理存盤位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>冗余存盤的副本數,即一份資料保存2份副本</description>
</property>
<property>
<name>dfs.permissions</name>
<value>falser</value>
<description>默認為true,設定為false可以不要檢查權限就生成dfs上的檔案</description>
</property>
</configuration>
配置中的 /usr/local/hadoop/dfs/name、/usr/local/hadoop/dfs/name檔案夾需要自己手動創建
[hadoop@master hadoop]$ cd /usr/local/hadoop/
[hadoop@master hadoop]$ mkdir -p dfs/name
[hadoop@master hadoop]$ mkdir -p dfs/data
(5)修改mapred-site.xml
mapred-site.xml檔案如果不存在
復制mapred-site.xml.template 再修改檔案名
[hadoop@master hadoop]$ cp mapred-site.xml.template mapred-site.xml
然后編輯mapred-site.xml檔案
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指定mapreduce運行在yarn平臺,默認為local</description>
</property>
</configuration>
(6)修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>
NodeManager上運行的附屬服務
指定NodeManager獲取資料的方式是shuffle
需配置成mapreduce_shuffle,才可運行MapReduce程式
</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>
指定resourcemanager所在的hostname
即指定yarn的老大即ResourceManger的地址
</description>
</property>
</configuration>
6、打包分發
將hadoop檔案打包,然后分發給 兩個從節點
[hadoop@master local]$ tar -zcf ~/hadoop.master.tar.gz ./hadoop
[hadoop@master local]$ cd ~
[hadoop@master ~]$ scp ./hadoop.master.tar.gz hadoop@slave1:/home/hadoop/
[hadoop@master ~]$ scp ./hadoop.master.tar.gz hadoop@slave2:/home/hadoop/
如果原來安裝過hadoop要洗掉掉,兩個主機都要進行同樣操作,
[hadoop@slave1 ~]$ sudo rm -rf /usr/local/hadoop/
[hadoop@slave1 ~]$ sudo tar -zxvf hadoop.master.tar.gz -C /usr/local/
[hadoop@slave1 ~]$ sudo chown -R hadoop /usr/local/hadoop
7、啟動Hadoop集群
進入到master主機,先格式化名稱節點,然后啟動hadoop
[hadoop@master ~]$ cd /usr/local/hadoop
[hadoop@master hadoop]$ bin/hdfs namenode -format #格式化名稱節點
[hadoop@master hadoop]$ sbin/start-all.sh #啟動hadoop
查看master節點上的行程
[hadoop@master hadoop]$ jps
2707 ResourceManager #ResourceManager是Yarn集群主控節點(yarn的老大)
4758 NameNode #名稱節點
4982 SecondaryNameNode #第二名稱節點
5366 Jps
查看slave1節點上的行程
[hadoop@slave1 local]$ jps
2085 DataNode #資料節點
2184 NodeManager #NodeManager管理一個YARN集群中的每一個節點(yarn的小弟)
2585 Jps
查看slave2節點上的行程
[hadoop@slave2 local]$ jps
3552 DataNode #資料節點
3651 NodeManager #yarn的小弟
3851 Jps
參考資料:
http://dblab.xmu.edu.cn/blog/1177-2/#more-1177
https://blog.csdn.net/m0_46209092/article/details/105352872
https://blog.csdn.net/sjmz30071360/article/details/79889055
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279959.html
標籤:其他
