本文內容不乏對各大佬的案例借鑑,侵刪。
本次實驗用到的有虛擬機器,Xshell,Hadoop壓縮包和jdk壓縮包
hadoop111A:192.168.241.111 | hadoop222B:192.168.241.112 | hadoop333C:192.168.241.113 | |
HDFS |
NameNode DataNode |
DataNode |
secondaryNameNode DataNode |
YARN | NodeManager |
ResourceManager NodeManager |
NodeManager |
我這邊用的三臺虛擬機器和對應的IP是:
hadoop111A 192.168.241.111
hadoop222B 192.168.241.112
hadoop333C 192.168.241.113
先在虛擬機器裡面安裝好一個centOS 7,然後把靜態IP配置好
先進入 /etc/sysconfig/network-scripts 裡面有個名為 ifcfg-ens33 的檔案,修改這個檔案。
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33
修改這些配置的時候 會由於許可權不夠,會報錯已儲存但未修改,我是直接轉換成root使用者進行修改的,這樣一來比較方便。輸入命令:su 轉換成root使用者
把裡面沒用的內容刪掉,保留有用的,我修改的內容是這樣的;複製貼上的時候記得按 i 轉為插入模式
DEVICE=ens33 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.241.111 PREFIX=24 GATEWAY=192.168.241.2 DNS1=192.168.241.2 DNS2=8.8.8.8
然後重啟網路管理
service NetworkManager restart
現在就可以看看你的IP發生的變化,然後ping一下百度,看看是否能建立資料傳輸。
現在可以通過xshell連結linux了,接著就是修改主機名
vim /etc/hostname
hadoop111A 就是我這臺虛擬機器的主機名
這裡我們可以先把對映寫好,預先寫入你另外兩臺虛擬機器的主機名和IP
vim /etc/hosts
然後就是安裝Hadoop和jdk,這兩個軟體包可以去相應的官網下載,值得注意的是,jdk我們要下載1.8版本的,我先前安裝的16.0版本的,出現了問題,可能是不相容吧,我看很多大佬安裝的都是1.8版本的,所以我下載了1.8版本安裝之後,就沒有出現問題了。
我們在Windows上下載好這些軟體包之後,可以通過xshell這一些工具傳進來,我圖方便,就直接拖進虛擬機器,然後找到軟體包在linux裡的位置,進行移動和解壓。
安裝jdk,因為sentos7自帶有jdk,所以我們要將其刪除,先檢視系統中的jdk
rpm -qa | grep java
這裡我們可以看到有1.8和1.7的jdk,我們只需要刪除jdk
rpm -e --nodeps jdk名字
軟體包的名字可以在上面複製貼上,執行 rpm -qa | grep java 檢視是否刪除完畢
現在就是解壓jdk了,路徑可以自己選,我這邊是安裝在 /usr/java 裡面 用命令解壓檔案
tar -zxvf jdk軟體包名
給jdk新增環境變數,新增在最後面
vim /etc/profile
##JAVA_HOME JAVA_HOME=/usr/java/jdk1.8.0_291 JRE_HOME=$JAVA_HOME/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib.dt.jar:$JAVA_HOME/lib/tools.jar:$JER_HOME/lib export JAVA_HOME JRE_HOME PATH CLASSPATH
應用profile配置
source /etc/profile
檢視jkd
java -version
顯示有版本號就說明安裝成功了
按Hadoop和定義配置檔案
和安裝jdk一樣,先把Hadoop壓縮包解壓
新增環境變數
vim /etc/profile
##HADOOP_HOME export HADOOP_HOME=/opt/soft/hadoop/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
進入hadoop的etc裡面修改相應的配置檔案
配置 core-site.xml
<!--指定namenode的地址--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop111A:8020</value> </property> <!-- 指定 Hadoop 執行時產生檔案的儲存目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/soft/hadoop/hadoop-3.3.0/data</value> </property>
配置 hadoop-env.sh 如果這個不新增,那麼hadoop執行的時候就會報錯說找不到jdk的位置
export JAVA_HOME=/usr/java/jdk1.8.0_291
配置 hdfs-site.xml
<!--nn web端訪問地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop111A:9870</value> </property> <!-- 2nn web端訪問地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop333C:9868</value> </property>
配置 yarn-site.xml
<!-- 指定 MR 走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 YARN 的 ResourceManager 的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop222B</value> </property>
配置 mapred-site.xml
<!-- 指定 MR 執行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 workers
hadoop111A
hadoop222B
hadoop333C
配置完畢後關機,在虛擬機器裡面完全克隆兩臺虛擬機器,並將其IP和主機名修改好
完事後,進行免密登陸設定,執行指令建立免密登陸金鑰
ssh-keygen -t rsa
一路回車下去後,私鑰和公鑰就在 /root/.ssh 裡面建立了
進入這個資料夾就可以看到了
cd /root/.ssh
建立一個名為 authorized_keys 的檔案
touch authorized_keys
然後將公鑰寫進這個檔案,三臺主機都要進行這樣的操作
cat id_rsa.pub >> authorized_keys
期間如果寫入不了,那多半是許可權不夠,這時候我們可以修改下他們的許可權
chmod 600 authorized_keys
chmod 700 /root/.ssh
然後用vim開啟 authorized_keys 就可以看到金鑰了,我就不傳來傳去了,直接簡單粗暴,直接複製貼上了
然後用ssh連結試試,我這邊連結hadoop222B
這樣就是連結上了,如個報錯說找不到,那就是前面對映沒設定好,如果報錯無法連結,那就修改下面的配置
修改 /etc/ssh/ssh_config 檔案的內容
StrictHostKeyChecking ask開啟註釋修改為StrictHostKeyChecking no即可
vim /etc/ssh/ssh_config
現在就可以格式化hadoop了
期間沒有任何報錯,那就是成功了,如果報錯意外終止,那就是配置檔案裡面的標籤沒打好
在 hadoop/sbin 裡面可以看到這些檔案
這裡我們先啟動start-dfs.sh
jps檢視一下
hadoop111A啟動的是 NameNode 和 DataNode
hadoop222B啟動的是 DataNode
hadoop333C啟動的是 DataNode 和 SecondaryNameNode
這時候我們就可以開啟瀏覽器訪問hadoop111A:9870
然後在hadoop222B中啟動
jps檢視
對照上面表格的啟動項,是一樣的就對了,必須要和部署的一摸一樣
然後在瀏覽器裡面輸入hadoop222B:8088
這樣就算是部署好了
如果期間 ResourceManager 啟動不了
啟動start-dfs.sh報錯Attempting to operate on hdfs namenode as root
在/hadoop/sbin路徑下:
將start-dfs.sh,stop-dfs.sh兩個檔案頂部新增以下引數
#!/usr/bin/env bash HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
還有,start-yarn.sh,stop-yarn.sh頂部也需新增以下:
#!/usr/bin/env bash YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root