Hadoop的全分佈式安裝
zookeeper管理節點
Journalnode實時備份
FailoverControll類實現 切換namenode的狀態 active standby
需要配置的信息(3臺雲主機)
【*練習過程中關閉防火牆,裏面用到的zookeeper沒寫配置,到博客裏面找找*】
step1:配置主機名 /etc/hosts
第一臺:hadoop01
第二臺:hadoop02
第三臺:hadoop03
source 一下
step2:配置免密登陸
生成密鑰ssh-keygen
進行復制ssh-copy-id 用戶名@主機 需要複製到所有的主機
然後重啓
#reboot
step3:配置Hadoop
配置 hadoop-env.sh 配置完成需要source
配置 core-site.xml
配置 hdfs-site.xml
配置 mapred-site.xml cp mapred-site.xml.template mapred-site.xml
配置 yarn-site.xml
編輯 slaves 添加datanode節點
編輯環境變量 /etc/profile
step4:具體配置
【1】hadoop.env.sh
JAVA_HOME=/home/preSoftware/jdk1.8
HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
需要使配置生效 source hadoop.env.sh
【2】core-site.xml
<!--指定hdfs的nameservice,爲整個集羣起一個別名ns-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--指定Hadoop數據臨時存放目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>
<!--指定zookeeper的存放地址-->
<property>
<name>ha.zookeeper.quorum</name>
<!--集羣中對應的主機名稱和zookeeper的端口 對應配置文件在zookeeper的conf/zoo.cfg-->
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
【3】hdfs-site.xml
<!--執行hdfs的nameservice爲ns,注意要和core-site.xml中的名稱保持一致-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!--ns集羣下有兩個namenode,分別爲nn1, nn2-->
<!--dfs.ha.namenode.ns ns是hdfs集羣的名字-->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!--nn1的http通信-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元數據在JournalNode上存放的位置,這樣-->
<--,namenode2可以從journalnode集羣裏的指定位置上獲取信息,達到熱備效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.7.1/tmp/journal</value>
</property>
<!-- 開啓NameNode故障時自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 不用修改-->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制 選填-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔離機制時需要ssh免登陸 選填 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode存放元數據的目錄,可以不配置,如果不配置則默認放到hadoop.tmp.dir下-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/software/hadoop-2.7.1/tmp/hdfs/name</value>
</property>
<!--配置datanode存放元數據的目錄,可以不配置,如果不配置則默認放到hadoop.tmp.dir下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value>
</property>
<!--配置複本數量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--設置用戶的操作權限,false表示關閉權限驗證,任何用戶都可以操作-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
【4】mapred-site.xml
<!-- 名稱mapreduce.framework.name指的是使用yarn運行mapreduce程序 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
【5】yarn-site.xml
<!--配置yarn的高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定兩個resourcemaneger的名稱-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--配置rm1的主機-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!--配置rm2的主機-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>
<!--開啓yarn恢復機制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--執行rm恢復機制實現類-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--執行yarn集羣的別名-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ns-yarn</value>
</property>
<!-- 指定nodemanager啓動時加載server的方式爲shuffle server -->
<!-- yarn.nodemanager.aux-services在hadoop2.2.0版本中是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager地址 -->
<!-- yarn.resourcemanager.hostname指的是運行ResourceManager機器所在的節點位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
【6】slaves
<!-- 在slaves文件裏所列出的所有結點上啓動datanode因爲我用的三臺服務器,所以三個都是我哦的datanode -->
hadoop01
hadoop02
hadoop03
【7】配置環境變量
export HADOOP_HOME=/home/software/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
【8】創建對應的存儲文件的目錄
tmp/{hdfs,journal} hdfs/{data,name}
step5:
選擇其中一個節點進行zookeeper格式化註冊
#hdfs zkfc -formatZK
step6:
分別啓動Journalnode 因爲我這裏設置hadoop01和hadoop02作爲namenode所以只需要啓動這兩個節點即可
#hadoop-daemon.sh start journalnode
step7:
格式化namenode節點 也就是hadoop01和hadoop02
#hadoop namenode -format
INFO common.Storage: Storage directory /home/software/hadoop-2.7.1/tmp/hdfs/name has been successfully formatted.
出現successfully formatted 表示成功
step8:
啓動namenode節點 hadoop01和hadoop02
#hadoop-daemon.sh start namenode
step9:
啓動datanode slaves文件中配置的就是datanode節點
#hadoop-daemon.sh start datanode
step10:
啓動zkfc實現namenode狀態的切換 active(master)和standby(熱備)
#hadoop-daemon.sh start zkfc
step11:
在hadoop01節點啓動yarn 配置mapred-site.xml 這個命令可以在任何節點運行,只需在其中一個節點運行一次
#start-yarn.sh
step12:
在hadoop03節點上啓動resourcemanager 配置在yarn-site.xml
#yarn-daemon.sh start resourcemanger
配置完成進行訪問
web: http://ip:50070 ip就是namenode節點的ip
點擊overview 看到一個standby 另外一臺是active
完成
關閉命令 在namenode(active)節點 #stop-all.sh
這個命令一旦運行,所有的namenode和datanode以及Journalnode都將關閉
但是manager*沒有關閉我搜了一下關閉命令如下
關閉Resourcemanager # yarn-daemon.sh stop resourcemanager