步骤一;
干净的集群,全新的hdfs
在第一台主机上配置配置文件
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bcqm1711</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6.1/hadoopdata/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<!-- 指定hdfs的nameservice为beicai,就是那个代理程序,询问zk集群哪个namenode还活着 -->
<property>
<name>dfs.nameservices</name>
<value>bcqm1711</value>
</property>
<!—指定hdfs的两个NameNode都是什么名字(等会儿下面会配置他们所对应的机器的信息)-->
<property>
<name>dfs.ha.namenodes.bcqm1711</name>
<value>nn1,nn2</value>
</property>
<!—NameNode1的rpc通讯地址-->
<property>
<name>dfs.namenode.rpc-address.bcqm1711.nn1</name>
<value>hdp-qm-01:8020</value>
</property>
<!—NameNode2的rpc通讯地址-->
<property>
<name>dfs.namenode.rpc-address.bcqm1711.nn2</name>
<value>hdp-qm-02:8020</value>
</property>
<!—NameNode1的web界面地址-->
<property>
<name>dfs.namenode.http-address.bcqm1711.nn1</name>
<value>hdp-qm-01:50070</value>
</property>
<!—NameNode2的web界面地址-->
<property>
<name>dfs.namenode.http-address.bcqm1711.nn2</name>
<value>hdp-qm-02:50070</value>
</property>
######如果给一个有数据的HDFS添加HA,此处无需更改,保持原有地址即可#####
<!---namenode存放元数据信息的Linux本地地址,这个目录不需要我们自己创建->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hadoop-2.6.1/hadoopdata/dfs/name</value>
</property>
<!—datanode存放用户提交的大文件的本地Linux地址,这个目录不需要我们自己创建-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop-2.6.1/hadoopdata/dfs/data</value>
</property>
<!—QJM存放共享数据的方式-->
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>
qjournal://hdp-qm-01:8485;hdp-qm-02:8485;hdp-qm-03:8485/bcqm1711</value>
</property>
<!—单个QJM进程(角色)存放本地edits文件的Linux地址-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.6.1/hadoopdata/journal</value>
</property>
<!—开启hdfs的namenode死亡后自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定zookeeper集群地址,辅助两个namenode进行失败切换 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hdp-qm-01:2181,hdp-qm-02:2181,hdp-qm-03:2181</value>
</property>
<!—zkfc程序的主类-->
<property>
<name>dfs.client.failover.proxy.provider.bcqm1711</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!—防止多个namenode同时active(脑裂)的方式-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!—指定本机的私钥所在目录,
注意:如果是普通用户hadoop则修改为root为”/home/hadoop/.ssh/id_rsa”-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!—指定ssh通讯超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>bcqm1711yarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hdp-qm-01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hdp-qm-02</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hdp-qm-01:2181,hdp-qm-02:2181,hdp-qm-03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--RM1-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hdp-qm-01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hdp-qm-01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdp-qm-01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdp-qm-01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-01:8088</value>
</property>
<!--RM2-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hdp-qm-02:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hdp-qm-02:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdp-qm-02:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdp-qm-02:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-02:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-02:8088</value>
</property>
</configuration>
步骤二;
在配置hdfs-site.xml配置文件之前,要先删掉之前的记录
删掉hadoopdata目录下的所有文件
删掉/home/hadoop/.ssh/*下的内容
rm -rf /home/hadoop/.ssh/*
步骤三:
配置免密
在/home/hadoop/hadoop-2.6.1/etc/hadoop/目录下
cd /home/hadoop/hadoop-2.6.1/etc/hadoop/
$ ssh-keygen -t rsa 一直回车
在根目录下
发送免密
ssh-copy-id hadoop@hdp-qm-01
ssh-copy-id hadoop@hdp-qm-02
ssh-copy-id hadoop@hdp-qm-03
步骤四:
发送配置好的hadoop文件夹到其他节点
scp -r hadoop-2.6.1 hadoop@hdp-qm-02:/home/hadoop/
scp -r hadoop-2.6.1 hadoop@hdp-qm-03:/home/hadoop/
步骤五;
启动zk集群
sh zkServer.sh start
查看各节点启动状态
步骤六:
启动journanode,在各个节点都启动
# hadoop-daemon.sh start journalnode
运行jps命令检验,多了journalNode进程
步骤七;
在第一台格式化
格式化hdfs(在master上执行命令: 格式化HA必须先启动zk服务、journalnode)
# hadoop namenode -format
步骤八:
在hadoopdata目录下
开启namenode
$ hadoop-daemon.sh start namenode
步骤九;
同步元数据信息,在第二台进行
$ hdfs namenode -bootstrapStandby
步骤十:
在hadoopdata目录下,
$ hdfs zkfc -formatZK
步骤十一:
在hadoopdata目录下,开启集群
$ start-all.sh
步骤十二:
开启第二台的namenode
yarn-daemon.sh start resourcemanager
步骤十三:
jps验证是否功能全部开启
网页登录hdp-qm-01:50070
网页登录hdp-qm-02:50070
网页登录hdp-qm-01:8088
网页登录hdp-qm-02:8088
查看到第一台处于active,第二台处于standby
表示配置成功