本文內容不乏對各大佬的案例借鑒,侵刪。
本次實驗用到的有虛擬機,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
應用profile配置
source /etc/profile
查看hadoop,出現版本號即配置成功
hadoop version
進入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