在《hadoop(01)、windows平臺下hadoop環境搭建》一文中,咱們在windows平臺上搭建了單機模式的hadoop,本文咱們將在linux(CentOS7)下搭建hadoop集羣模式,以便實踐更多場景下hadoop的使用,尤爲是在實際的生產模式中,一定是以集羣模式存在。java
1.三臺CentOS7-64的機器(本文已經在VM中搭建好了)node
2.JDK-LINUX-64的程序包(jdk-8u151-linux-x64.tar.gz)linux
3.hadoop-2.8.2的程序包(hadoop-2.8.2.tar.gz)git
4.SSH鏈接工具(git bash)web
5.FTP傳輸工具(8uftp)apache
準備的三臺虛擬機:windows
192.168.1.10 Master主節點centos
192.168.1.20 Slaver從節點1bash
192.168.1.30 Slaver從節點2app
準備的相關程序包:
分別打開三臺虛擬機:
1.向三臺主機使用FTP傳文件
打開FTP工具
注意:若是最小化安裝的系統,須要在centos安裝ftp服務:yum -y install vsftpd
特別注意:若是安裝ftp服務時不能解析域名,須要配置dns解析:vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
安裝完成FTP服務,這時候使用FTP服務仍是鏈接不上,咱們修改vsftpd的配置文件:vi /etc/vsftpd/vsftpd.conf
此時,使用命令: netstat -ntlp,此時FTP服務的21端口已經打開,
使用FTP服務上傳hadoop的服務包到/home/hadoop/目錄下:
上傳JDK的程序包/home/java/目錄下:
2.由於hadoop是java環境下的,因而咱們首先安裝jdk環境
進入/home/java 目錄使用 ls命令查看文件:
這時能看到剛纔使用FTP上傳的hadoop的程序包,而後咱們使用解壓命令:tar -zxvf <file>
通過一會解壓過程,文件解壓完成:
注:文件名太長可寫首字母后用tab自動補齊
而後在/etc/profile文件中,配置環境變量,讓JDK在全部用戶生效:vi /etc/profile
在文件的最後添加如下設置:
注:使用某些SSH工具能夠直接ctrl+c+v操做,不用手動輸入,文本使用的git bash就能夠
export JAVA_HOME=/home/java/jdk1.8.0_151
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
保存退出後,讓修改的環境變量生效:source /etc/profile
此時環境變量已經生效,咱們驗證下jdk安裝的是否成功: java -version
特別提醒:
1.禁止防火牆:
systemctl stop firewalld.service 中止防火牆
systemctl disable firewalld.service 靜止開機啓動
2.禁止Selinux:
/usr/sbin/sestatus -v 查看Selinux狀態
修改/etc/selinux/config 文件將SELINUX=enforcing改成SELINUX=disabled
此處搭建FTP服務詳情可參考《CentOS最小安裝的系統安裝FTP服務》
通過前面的全部工做,此時準備工做已經完成。
1.解壓hadoop的程序包
進入/home/hadoop 目錄使用 ls命令查看文件:
這時能看到剛纔使用FTP上傳的hadoop的程序包,而後咱們使用解壓命令:tar -zxvf <file>
通過一會解壓過程,文件解壓完成:
2.配置環境變量
執行vi /etc/profile命令,並在文件末尾添加如下:
export HADOOP_HOME=/home/hadoop/hadoop-2.8.2
export HADOOP_CONF_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出後,讓修改的環境變量生效:source /etc/profile
3.修改配置文件
<1>.修改啓動腳本
vi /home/hadoop/hadoop-2.8.2/etc/hadoop/hadoop-env.sh
vi /home/hadoop/hadoop-2.8.2/etc/hadoop/yarn-env.sh
在這來那個文件都添加export JAVA_HOME=/home/java/jdk1.8.0_151
<2>.修改配置信息
首先配置核心文件:vi /home/hadoop/hadoop-2.8.2/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdpc01:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.8.2/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
而後配置HDFS文件:vi /home/hadoop/hadoop-2.8.2/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.8.2/data/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.8.2/data/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hdpc01:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
再配置YARN文件:vi /home/hadoop/hadoop-2.8.2/etc/hadoop/yarn-site.xml
<configuration>
<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.scheduler.address</name>
<value>hdpc01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hdpc01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdpc01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdpc01:8035</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdpc01:8088</value>
</property>
</configuration>
使用cp mapred-site.xml.template mapred-site.xml
再配置Mapred文件:vi /home/hadoop/hadoop-2.8.2/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hdpc01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hdpc01:19888</value>
</property>
</configuration>
最後修改slaves配置文件:
hdpc01
hdpc02
hdpc03
特別注意:以上配置中的IP地址最好都使用主機名替換,防止後期ip變動會影響hadoop集羣,要改配置中的IP地址,此處直接使用主機名既能夠避免。
4.從節點安裝
將剛剛主節點配置的hadoop複製到咱們準備好的兩個從節點的機器上,若是目錄一致則不須要修改環境變量,不同修改對應的環境變量(本文使用了快捷的方式,直接將主節點的虛擬機鏡像手動克隆了兩份做爲從節點,該方法快捷簡單,能夠參考《VMware Workstation player 克隆多個CentOS實踐》),這樣兩個從節點也都配置好了。
5.配置主結點SSH免密登陸子結點
在主節點機器上執行:ssh-keygen -t rsa
而後回車一直到完成:
將id_rsa.pub重定向到authorized_keys:cat id_rsa.pub>>authorized_keys
同理,兩個從節點也都執行此步驟。
注:從節點hdpc03也和上圖hdpc02同樣處理
在主節點機器上將兩個從節點的id_rsa.pub追加到authorized_keys
ssh hdpc02 cat /root/.ssh/id_rsa.pub>>authorized_keys
ssh hdpc03 cat /root/.ssh/id_rsa.pub>>authorized_keys
出現不能解析域名的問題,咱們須要在三個節點的機器上配置下hosts:vi /etc/hosts
192.168.100.10 hdpc01
192.168.100.20 hdpc02
192.168.100.30 hdpc03
而後執行:
在主節點機器將authorized_keys分發到兩個從節點的/root/.ssh目錄下
scp authorized_keys hdpc02:/root/.ssh/
scp authorized_keys hdpc03:/root/.ssh/
此時主節點機器對兩個從節點機器的免密登錄配置完成,咱們測試下:
ssh hdpc02
ssh hdpc03
注意:上面安裝其餘從節點不只能夠克隆鏡像,還能夠在設置免密登錄後使用scp拷貝過去:
scp -r hadoop-2.8.2/ hdpc02:/home/hadoop/
scp -r hadoop-2.8.2/ hdpc03:/home/hadoop/
1.在主節點上格式化
hadoop namenode -format 或者 hdfs namenode -format
此時已經成功格式化。
2.在主節點啓動集羣
執行start-all.sh
使用hadoop dfsadmin -report查看個節點信息:
3.web頁面查看:192.168.100.10:50070
4.web查看集羣信息:192.168.100.10:8088
5.中止集羣
執行stop-all.sh
本文是完整的hadoop集羣搭建過程,經過這過hadoop集羣的工做方式有了更深的認識,同時也是總體能力的一個考驗,爲何這麼說,由於搭建過程當中遇到不少額外的知識,好比我在搭建過程當中遇到不少坑,FTP21號端口被防火牆攔截等問題。最後一步步解決各類問題,成功實踐hadoop集羣的搭建,在此記錄一下,順道幫助更多學習的同窗。