0.服務器節點規劃
hdp01 nn dn nm snn rm
hdp02 dn nm
hdp03 dn nm
1.修改主機名
vi /etc/sysconfig/network
在NETWORKING_IPV6=no
PEERNTP=no後追加一行
HOSTNAME=hdp03
reboot 之後主機名並沒有修改,若是centos7以上的系統則繼續使用以下命令
hostnamectl set-hostname hdp03
接着重啓shutdown -r now 就可以看到主機名被成功修改了!
2.IP不修改,直接使用阿里雲外網IP。
3.修改主機名和IP映射關係
vi /etc/hosts
47.94.240.45 hdp01
47.105.40.113 hdp02
39.105.148.33 hdp03
4.防火牆配置安全規則
5.安裝JDK
yum install lrzsz 方便上傳文件,可打開文件瀏覽框
rz
或者alt+p 後出現sftp窗口,然後put 文件路徑也可。
adduser hadoop
passwd hadoop ##密碼是hadoop
usermod -a -G hadoop hadoop ## 把hadoop用戶加入到hadoop用戶組
vi /etc/sudoers
在root ALL=(ALL) ALL
追加 hadoop ALL=(ALL) ALL ##hadoop用戶就擁有了root權限。
mkdir /home/hadoop/app
rz ##上傳tar包,此時上傳到你目前所在路徑
mkdir /root/apps/
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /root/apps/ ##解壓
#配置環境變量,vi /etc/profile 最後追加兩行
export JAVA_HOME=/root/apps/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile ##刷新配置文件
java -version ##查看jdk是否安裝成功
6.安裝hadoop
先上傳hadoop的安裝包到服務器上去/root/apps/
解壓之後重名名爲hadoop mv hadoop-2.6.4/ hadoop
注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop
僞分佈式需要修改5個配置文件
3.1配置hadoop
第一個:hadoop-env.sh
vim hadoop-env.sh
#第27行
export JAVA_HOME=/root/apps/jdk1.7.0_80
第二個:core-site.xml
<!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp01:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/apps/hadoop/tmp</value>
</property>
第三個:hdfs-site.xml
<!-- 指定HDFS副本的數量,如果上傳是1份,那麼備份2份 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hdp01:50090</value>
</property>
第四個:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五個:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp01</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
將hadoop添加到環境變量
vim /etc/proflie
export JAVA_HOME=/root/apps/jdk1.7.0_80
export HADOOP_HOME=/root/apps/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
將hdp03上的hadoop文件夾和/etc/profile文件複製到hdp01和hdp02上,
scp -r /root/apps/hadoop/ root@hdp02:/root/apps/
scp -r /root/apps/hadoop/ root@hdp01:/root/apps/
scp -r /etc/profile root@hdp02:/etc/profile
scp -r /etc/profile root@hdp01:/etc/profile
前提是做過ssh免密登陸。如果沒有做過免密登陸(在hdp03上對hdp01、hdp02的免密登陸)
ssh-keygen -t rsa
ssh-copy-id hdp02
ssh-copy-id hdp01
三臺機器全部都要刷新配置文件source /etc/profile
此時接下來不管是格式化namenode還是啓動namenode,都要在namenode那臺機器上進行操作
格式化namenode(是對namenode進行初始化)
hdfs namenode -format 或者 hadoop namenode -format
如果是一個一個啓動的話,hadoop-daemon.sh start namenode
啓動成功的話使用jps去查看進程,會發現多個namenode的進程
此時我的啓動不成功需要修改hdfs-site.xml配置文件
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/apps/hadoop/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/apps/hadoop/data/data</value>
</property>
scp /root/apps/hadoop/etc/hadoop/hdfs-site.xml root@hdp02:/root/apps/hadoop/etc/hadoop/hdfs-site.xml
scp /root/apps/hadoop/etc/hadoop/hdfs-site.xml root@hdp03:/root/apps/hadoop/etc/hadoop/hdfs-site.xml
此時我還是啓動不成功,報錯是java.net.BindException: Cannot assign requested address,這個問題是服務器ip識別問題造成的,
修改/etc/hosts文件中設置ip與域名的匹配時,1.在本機上的操作,都要設置成內網ip,2,其他機器上的操作都要設置成外網ip。
具體的做法是:1.在Master服務器上,要將自己的ip設置成內網ip,而將另一臺Slave服務器的ip設置成外網ip;
2.同樣的在Slave服務器上,要將自己的ip設置成內網ip,而將另一臺Master服務器的ip設置成外網ip。
此時在我們的三臺阿里雲上每個/etc/hosts的文件是這樣的
47.94.240.45上的/etc/hosts
172.17.238.109 hdp01
47.105.40.113 hdp02
39.105.148.33 hdp03
47.105.40.113上的/etc/hosts
47.94.240.45 hdp01
172.31.182.138 hdp02
39.105.148.33 hdp03
39.105.148.33上的/etc/hosts
47.94.240.45 hdp01
47.105.40.113 hdp02
172.17.232.154 hdp03
因爲47.105.40.113的內網IP爲172.31.182.138,47.94.240.45的內網ip爲172.17.238.109,39.105.148.33的內網ip爲172.17.232.154
此時繼續執行命令,hadoop-daemon.sh start namenode執行成功之後,使用命令jps查看進程就會發現多了namenode的進程,也就是我們啓動了hdfs的老大,
接下來啓動hdfs的小弟,datanode節點。hadoop-daemon.sh start datanode,一般企業中直接使用sbin/start-dfs.sh就可以啓動hdfs了,但我們一個一個啓動的
方式在出現問題時,有利於排查錯誤。
在每個datanode節點上都要執行hadoop-daemon.sh start datanode這個命令,才能啓動每個datanode,就是說hdp01,hdp02,hdp03均要執行,再用jps查看進程是否啓動成功。
此時我們要啓動secondarynamenode我們設計在了hdp01上。在hdp01上執行hadoop-daemon.sh start secondarynamenode,此時hdfs的所有節點均已啓動。
除了查看進程可以確認是否啓動成功之外,還可以在瀏覽器上登陸主節點ip,hdp01的ip, http://47.94.240.45:50070.
補充:1.阿里雲的安全規則中要開放老大namenode的50070、9000端口,secendarynameno的50090端口。
2.另外殺死hdfs的進程可使用命令。/root/apps/hadoop/sbin/stop-dfs.sh
3.如果要重複格式化namenode,就必須要將hdfs-site.xml中的dfs.namenode.name.dir所在目錄dfs.datanode.data.dir所在目錄全部刪除,
若是不指定這兩個路徑,則默認在安裝目錄下的tmp目錄下
4.每臺節點都要刪除掉這些文件,在本次搭建中是在每臺節點的/root/apps/hadoop/data路徑下。
一般使用的話是使用sbin/start-dfs.sh就可啓動hdfs的所有節點。此時前提是要在namenode的機器上的etc配置文件下slaves中添加所有datanode的ip或主機名。
啓動完hdfs之後,sbin/start-dfs.sh,訪問http://47.94.240.45:50070.
再啓動yarn,sbin/start-yarn.sh,訪問http://47.94.240.45:8088