環(huán)境
hdp21 192.168.95.21
hdp22 192.168.95.22
hdp23 192.168.95.23
hdp24 192.168.95.24
hdp25 192.168.95.25
時(shí)間網(wǎng)絡(luò)同步、關(guān)閉selinux
創(chuàng)建用戶hadoop衔肢,密碼fujg
hadoop 用戶免密登錄
我準(zhǔn)備把所有的文件都放在home目錄下
Hadoop2.7.3
192.168.95.21 hdp21 主NameNode
192.168.95.22 hdp22 備用NameNode
192.168.95.23 hdp23 DataNode
192.168.95.24 hdp24 DataNode
192.168.95.25 hdp25 DataNode
1 準(zhǔn)備
1庄岖,解壓安裝包到home目錄
tar –zxvf hadoop-2.7.3.tar.gz –C /home/
2,修改home的權(quán)限
chmod 777 /home
3膀懈,創(chuàng)建目錄
mkdir -pv /home/dfs/{data,name}
mkdir /home/tmp
mkdir -pv /home/hadoop-2.7.3/{journal,mapred_local,mapred_system,mr-history}
mkdir -pv /home/hadoop-2.7.3/mr-history/{done,tmp}
2 編輯配置文件
2.1 core-site.xml
<configuration>
<property>
<!-- hdfs訪問端口,這里看hdfs-site.xml中配置的端口谨垃,雙機(jī) -->
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<!-- 臨時(shí)文件目錄 -->
<name>hadoop.tmp.dir</name>
<value>/home/tmp</value>
</property>
<property>
<!-- 緩存的大小启搂,單位為byte,默認(rèn)4k刘陶,線上設(shè)置為40k胳赌,這里設(shè)置4k -->
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<!-- 指定zookeeper地址 -->
<name>ha.zookeeper.quorum</name>
<value>hdp21:2181,hdp22:2181,hdp23:2181,hdp24:2181,hdp25:2181</value>
</property>
<property>
<!-- 用戶代理機(jī)制 屬組 -->
<name>hadoop.proxyuser.hadoop.groups</name>
<value>hadoop</value>
</property>
<property>
<!-- 用戶代理機(jī)制 hosts -->
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>192.168.95.21</value>
</property>
<!-- snappy 文件壓縮 -->
<!--<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
-->
</configuration>
2.2 hdfs-site.xml
<configuration>
<property>
<!-- 指定hdfs的nameservice為ns,要與core-site.xml中的名字一致 -->
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<property>
<!-- ns下面配置兩個(gè)nameNode匙隔,nn1疑苫、nn2 -->
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<property>
<!-- nn1的RPC通信地址 -->
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hdp21:9000</value>
</property>
<property>
<!-- nn1的HTTP通信地址 -->
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hdp21:50070</value>
</property>
<property>
<!-- nn2的RPC通信地址 -->
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hdp22:9000</value>
</property>
<property>
<!-- nn2的HTTP通信地址 -->
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hdp22:50070</value>
</property>
<property>
<!-- 指定NameNode的元數(shù)據(jù) 在JournalNode上的存放位置,使用以下3個(gè)節(jié)點(diǎn)存儲(chǔ) -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hdp23:8485;hdp24:8485;hdp25:8485/ns</value>
</property>
<property>
<!-- 指定JournalNode在本地磁盤存放數(shù)據(jù)的位置 -->
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop-2.7.3/journal</value>
</property>
<property>
<!-- 開啟NameNode故障時(shí)自動(dòng)切換 -->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<!-- 失敗自動(dòng)切換實(shí)現(xiàn)方式 -->
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!-- 配置隔離機(jī)制,如果ssh是默認(rèn)22端口捍掺,value直接寫sshfence即可 -->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!-- 使用隔離機(jī)制時(shí)撼短,需要ssh免密登錄 -->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<!-- 元數(shù)據(jù)文件目錄,默認(rèn)為//${hadoop.tmp.dir}/dfs/name挺勿,這里的hadoop.tmp.dir是core-site.xml中配置的臨時(shí)文件目錄 -->
<name>dfs.namenode.name.dir</name>
<value>file:/home/dfs/name</value>
</property>
<property>
<!-- 數(shù)據(jù)目錄 -->
<name>dfs.datanode.data.dir</name>
<value>file:/home/dfs/data</value>
</property>
<property>
<!-- 副本的冗余數(shù)量曲横,正常應(yīng)該是三個(gè) -->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- 在nn和dn上開啟webHDFS (REST API) 功能,不是必須 -->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 數(shù)據(jù)節(jié)點(diǎn) 追加 start -->
<property>
<!-- 是否開啟數(shù)據(jù)節(jié)點(diǎn)追加不瓶,默認(rèn)為true禾嫉,當(dāng)節(jié)點(diǎn)很少(即,節(jié)點(diǎn)宕掉了沒有新的節(jié)點(diǎn)可提供)時(shí)蚊丐,應(yīng)該關(guān)閉 -->
<name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
<value>true</value>
</property>
<property>
<!-- 數(shù)據(jù)節(jié)點(diǎn)追加熙参,當(dāng)上一個(gè)設(shè)置為true時(shí)起作用 -->
<name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
<value>NEVER</value>
</property>
<!-- 數(shù)據(jù)節(jié)點(diǎn) 追加 end -->
<property>
<!-- 權(quán)限檢查開關(guān),只有在有權(quán)限的環(huán)境中有用 -->
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<!-- webserver使用的用戶名麦备,','分隔添加用戶組 -->
<name>dfs.web.ugi</name>
<value>hadoop,hadoop</value>
</property>
<property>
<!-- 超時(shí)時(shí)間孽椰,單位 毫秒 -->
<name>dfs.socket.timeout</name>
<value>240000</value>
</property>
<property>
<!-- 指定用于在DataNode間傳輸block數(shù)據(jù)的最大線程數(shù),默認(rèn)4096 線上配置為40960 -->
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<property>
<!-- 打開文件數(shù)量上限泥兰,不能超過系統(tǒng)打開文件數(shù)設(shè)置 線上配置40960 -->
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<property>
<!-- datanode同時(shí)處理客戶端請(qǐng)求線程數(shù)弄屡,默認(rèn)為10 線上配置500 -->
<name>dfs.datanode.handler.count</name>
<value>50</value>
</property>
<property>
<!-- namenode線程數(shù),越大消耗內(nèi)存越大 線上配置500 -->
<name>dfs.namenode.handler.count</name>
<value>50</value>
</property>
<!-- 動(dòng)態(tài)增刪節(jié)點(diǎn)鞋诗,下面兩項(xiàng)配置膀捷,運(yùn)行hadoop dfsadmin -refreshNodes 即可使其生效 -->
<property>
<!-- 節(jié)點(diǎn)寫在文件中 -->
<name>dfs.hosts</name>
<value>/home/hadoop-2.7.3/etc/hadoop/slaves</value>
</property>
<property>
<!-- 要?jiǎng)h除的節(jié)點(diǎn)寫在文件中 -->
<name>dfs.hosts.exclude</name>
<value>/home/hadoop-2.7.3/etc/hadoop/exclude-slaves</value>
</property>
</configuration>
2.3 mapred-site.xml
<configuration>
<property>
<!-- 指定map reduce運(yùn)行在YARN上 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!-- mapreduce共享目錄,MapReduce的控制文件 -->
<name>mapred.system.dir</name>
<value>/home/hadoop-2.7.3/mapred_system</value>
</property>
<property>
<!-- MapReduce產(chǎn)生的中間數(shù)據(jù)存放目錄,以,號(hào)隔開,hdfs會(huì)把數(shù)據(jù)存在這些目錄下削彬,一般這些目錄是不同的塊設(shè)備全庸,不存在的目錄會(huì)被忽略掉 -->
<name>mapred.local.dir</name>
<value>/home/hadoop-2.7.3/mapred_local</value>
</property>
<property>
<!-- mapreduce歷史作業(yè)服務(wù):端口 -->
<name>mapreduce.jobhistory.address</name>
<value>hdp21:10020</value>
</property>
<property>
<!-- mapreduce歷史作業(yè) web ui 服務(wù):端口 -->
<name>mapreduce.jobhistory.webapp.address</name>
<value>hdp21:19888</value>
</property>
<property>
<!-- mapreduce正在運(yùn)行作業(yè)信息目錄 -->
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/home/hadoop-2.7.3/mr-history/tmp</value>
</property>
<property>
<!-- mapreduce已完成作業(yè)信息目錄 -->
<name>mapreduce.jobhistory.done-dir</name>
<value>/home/hadoop-2.7.3/mr-history/done</value>
</property>
<!-- JVM參數(shù) -->
<property>
<!-- 每個(gè)map或reduce使用的內(nèi)存數(shù)量,線上512m -->
<name>mapred.child.java.opts</name>
<value>-Xmx200M</value>
</property>
<property>
<!-- reduce使用的內(nèi)存數(shù)量融痛,線上512m -->
<name>mapred.reduce.child.java.opts</name>
<value>-Xmx200M</value>
</property>
<property>
<!-- map使用的內(nèi)存數(shù)量壶笼,線上512m -->
<name>mapred.map.child.java.opts</name>
<value>-Xmx200M</value>
</property>
</configuration>
2.4 yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<!-- 輔助服務(wù),擴(kuò)展自己的功能 -->
<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>
<!-- 開啟RM高可用雁刷,ha高可用集群覆劈,這里是雙機(jī) -->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!-- 自動(dòng)故障切換 -->
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<!-- 指定RM的名字 -->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!-- -->
<name>yarn.resourcemanager.zk-address</name>
<value>hdp23:2181,hdp24:2181,hdp25:2181</value>
</property>
<property>
<!-- 指定rm1的地址 -->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hdp21</value>
</property>
<property>
<!-- 指定rm2的地址 -->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hdp22</value>
</property>
<property>
<!-- 指定RM的cluster集群 id -->
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<!-- 該節(jié)點(diǎn)上YARN可使用的物理內(nèi)存總量,默認(rèn)是8192(MB)沛励,YARN不會(huì)智能的探測(cè)節(jié)點(diǎn)的物理內(nèi)存總量责语,線上是16372 -->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>512</value>
</property>
</configuration>
2.5 slaves
hdp23
hdp24
hdp25
2.6 修改hadoop-env.sh
vim /home/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
把原來的export JAVA_HOME=${JAVA_HOME}
修改為export JAVA_HOME= /usr/local/jdk1.7.0_71
即真實(shí)的jdk安裝路徑
2.7 復(fù)制配置到其他節(jié)點(diǎn)
cd /home/
scp -r hadoop-2.7.3/ hdp22:/home/
scp -r hadoop-2.7.3/ hdp23:/home/
scp -r hadoop-2.7.3/ hdp24:/home/
scp -r hadoop-2.7.3/ hdp25:/home/
3 環(huán)境變量
su root
vim /etc/profile.d/hadoop.sh
export HADOOP_HOME=/home/hadoop-2.7.3
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
復(fù)制到其他節(jié)點(diǎn):scp /etc/profile.d/hadoop.sh hdp22: /etc/profile.d/
執(zhí)行使配置立即生效 . /etc/profile.d/hadoop.sh
4 為啟動(dòng)準(zhǔn)備
4.1 zookeeper
啟動(dòng)zookeeper,zk-bat.sh start
Zookeeper已經(jīng)安裝完成 zk-bat.sh是我寫的啟動(dòng)腳本
4.2 創(chuàng)建zk命名空間
在主NameNode節(jié)點(diǎn)上執(zhí)行(創(chuàng)建命名空間):
hdfs zkfc -formatZK
4.3 JournalNode
在各個(gè)DataNode節(jié)點(diǎn)上執(zhí)行(啟動(dòng)journalnode):
hadoop-daemon.sh start journalnode
使用jps查看服務(wù)是否啟動(dòng)
4.4 格式化hdfs
格式化namenode和journalnode目錄
hdfs namenode -format ns
4.5 啟動(dòng)namenode
1目派,在主namenode節(jié)點(diǎn)啟動(dòng)namenode進(jìn)程(hdp21坤候,只在一個(gè)NameNode上執(zhí)行即可)
hadoop-daemon.sh start namenode
2,復(fù)制主NameNode(在hdp22上企蹭,把備namenode節(jié)點(diǎn)的目錄格式化并把元數(shù)據(jù)從主namenode節(jié)點(diǎn)copy過來白筹,并且這個(gè)命令不會(huì)把journalnode目錄再格式化了):
hdfs namenode –bootstrapStandby
3智末,啟動(dòng)備namenode進(jìn)程(在hdp22上執(zhí)行)
hadoop-daemon.sh start namenode
4,在兩個(gè)NameNode上都執(zhí)行:
hadoop-daemon.sh start zkfc
4.6 啟動(dòng)DataNode
在所有的DataNode上執(zhí)行(啟動(dòng)datanode):
hadoop-daemon.sh start datanode
6 啟停
啟動(dòng)
start-dfs.sh
停止
stop-dfs.sh
7 監(jiān)控等
hdp21主NameNode
Hdfs瀏覽器訪問地址:
http://hdp21:50070
hdp22備NameNode
Hdfs瀏覽器訪問地址:
http://hdp22:50070
測(cè)試NameNode雙機(jī)
殺掉主NameNode徒河,即hdp21上的NameNode進(jìn)程系馆,瀏覽器查看hdp22的狀態(tài)
1.在hdp21上jps,找到NameNode進(jìn)程id并殺掉
圖片 1.png
2.瀏覽器查看備NameNode狀態(tài)
[圖片上傳中...(2.png-f1916-1516245036237-0)]
備用NameNode已經(jīng)啟動(dòng)了P榍唷K健!