hadoop-env.sh
export JAVA_HOME=/opt/jdk-9.0.4
core-site.xml
<configuration>
<!--HA两个namenodeurl为两个的名称空间,可随意定 bi-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bi</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hdpdata</value>
</property>
<!--配置zookeeper的地址,HA,active standby zkfc journalnode等都需要zk-->
<property>
<name>ha.zookeeper.quorum</name>
<value>mini01:2181,mini02:2181,mini03:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/root/name1,/root/name2</value>
</property>
<!--修改hddfs的nameservice为bi,需要和core-site中的一致,nameservices s可以配置多个比如fereration中的-->
<property>
<name>dfs.nameservices</name>
<value>bi</value>
</property>
<!--bi下面有两个namenode,分别是nn1,nn2只是代号而已-->
<property>
<name>dfs.ha.namenodes.bi</name>
<value>nn1,nn2</value>
</property>
<!--nn1的rpc通信-->
<property>
<name>dfs.namenode.rpc-address.bi.nn1</name>
<value>mini01:9000</value>
</property>
<!--nn1的http通信地址-->
<property>
<name>dfs.namenode.http-address.bi.nn1</name>
<value>mini01:50070</value>
</property>
<!--nn2的rpc通信-->
<property>
<name>dfs.namenode.rpc-address.bi.nn2</name>
<value>mini02:9000</value>
</property>
<!--nn2的http通信地址-->
<property>
<name>dfs.namenode.http-address.bi.nn2</name>
<value>mini02:50070</value>
</property>
<!--制定namenode的edit元数据在journalNode上的存放位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://mini01:8485;mini02:8485;mini03:8485/bi</value>
</property>
<!--制定journalnode在本地磁盘存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/journaldata</value>
</property>
<!--开启namenode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置失败自动切换实现模式-->
<property>
<name>dfs.client.failover.proxy.provider.bi</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔离即只能有一个namenode在工作,多个方法机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--使用sshfence隔离机制时需要ssh免密登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>mini01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--开启RM高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--制定RM的clusterId,因为RM可以有多个,所以多个需要有一个总的名称-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!--制定RM的名字,分别制定两个RM的名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--分别制定RM的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>mini01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mini02</value>
</property>
<!--指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mini01:2181,mini02:2181,mini03:2181</value>
</property>
</configuration>
![](/qrcode.jpg)
slave文件中添加 567
然后将hadoop 整个文件分别发到其他的六台机器上
需要七台机器,
1 namenode 2namenode
3 resourcemanager 4resourcemanager
567zookeeper+quorum journal node+datanode 即
zookeeper只需要在567机器上安装
启动顺序 需严格按照下面所示
1 先在有zk的地方启动zk 567 cd /opt/zk/bin
..zkServer.sh start 如果远程ssh 需source /etc/profile
因为edit日志 namenode状态的切换(依靠zkfc)都需要依赖zk
2 启动journal node
cd hadoop
sbin/hadoop-daemon.sh start journalnode 运行jps发现567上多了journalNode进程
journalnode edit日志
3格式化 hdfs 因为 有HA有两台namenode,所以只先在一台namenode上format hdfs namenode -format
然后将在namenode1上生成的hdfs目录cp 到nn2上,这样就保证两台NN初始状态一致,以后工作时就会通过journalnode同步了
4格式化zkfc 在任意一台NN上执行即可执行一次即可,因为是向zk集群创建一个节点
hdfs zkfc -formatZK
其实际上是在zk集群上创建了一个父节点以两个NN的nameservice开头的节点
初始化到此结束
启动,前提NN到其他机器的免密提前配置好
在NN1上start-dfs.sh
log 会显示已启动两个NN 三个datanode 三个journalnode 二个zkfc
然后启动yarn,前提yarn到其他的机器免密配置好
在3上start-yarn.sh ze567就会启动nodemanager 因为slave文件的存在
因有两台RM,但另一台需手动启动,yarn-daemon.sh start resourcemanager
mini01:50070 active
mini02:50070 standby
直接在IDE里面会报错,说不认识bi,因为client将bi认做为一个主机名,其实只是一个名称代号
解决办法,将hdfs配置文件放到ide工程的配置目录中
yarn mini03:8088
mini04:8088