虚拟机环境
#hosts 192.168.75.20 node1 192.168.75.21 node2 192.168.75.10 node3 192.168.75.22 node4 192.168.75.23 node5 #进程说明 NameNode 名称结点 DataNode 数据结点 JournalNode 保证两台NameNode之间的数据一致 DFSZKFailoverController 当其中一台NameNode故障时自动将standby状态的NameNode结点升为active状态,只能在两个NameNode结点上 QuorumPeerMain zookeeper结点 #关闭防火墙 #结点角色 node1 NameNode(master) JournalNode DFSZKFailoverController node2 NameNode(standby) JournalNode DFSZKFailoverController node3 DataNode JournalNode QuorumPeerMain node4 DataNode QuorumPeerMain node5 DataNode QuorumPeerMain #ssh免密码登录 node1和node2分别对node3,node4,node5免密码登录 node1和node2之间可以相互免密码登录 #时间同步 使用ntpdate将个结点的时间同步。
环境搭建步骤
- 在node3,node4,node5上安装zookeeper
#在node3上安装zookeeper-3.4.10 1.解压安装包到usr/local/zookeeper-3.4.10 2.修改conf/zoo.cfg文件 dataDir=/usr/local/zookeeper-3.4.10/tmp server.1=node3:2888:3888 server.2=node4:2888:3888 server.3=node5:2888:3888 3.在dataDir目录下创建myid文件,内容为server.x中的x 4.将zookeeper复制到node4和node5上,并修改dataDir目录下的myid文件 scp /usr/local/zookeeper-3.4.10 root@node4:/usr/local/ scp /usr/local/zookeeper-3.4.10 root@node5:/usr/local/ 5.启动各个zookeeper bin/zkServer.sh start
配置hadoop
先在node1上配置好,让后将hadoop分别复制到node2,node3,node4和node5上
首先配置JAVA_HOME和HADOOP_HOME环境变量(/etc/profile)
JAVA_HOME=/usr/java/jdk1.8.0_144 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH export HADOOP_HOME=/usr/local/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
配置hdfs-site.xml
<!--设置block的副本数,可以不设置,默认为3--> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!--指定两台namenode--> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!--分别指定两个个namenode的rpc和http访问地址--> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:50070</value> </property> <!--指定journalnode的结点--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> </property> <!--固定写法,指定错误时自动切换的代理实现类--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!--指定ssh免密码登录--> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!--指定每个journal数据存放的地址--> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/journal/data</value> </property> <!--指定namenode是否使用自动故障切换--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
配置core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!--确保目录不存在或者为空--> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <!--指定zookeeper所在的结点--> <property> <name>ha.zookeeper.quorum</name> <value>node3:2181,node4:2181,node5:2181</value> </property>
配置slaves
#指定datanode结点 node3 node4 node5
将hadoop复制给其它结点
scp /usr/local/hadoop root@node2:/usr/local/hadoop scp /usr/local/hadoop root@node3:/usrl/local/hadoop scp /usr/local/hadoop root@node4:/usr/local/hadoop scp /usr/local/hadoop root@node5:/usr/local/hadoop
在node1,node2,node3上分别启动journalnode
sbin/hadoop-daemon.sh start journalnode
格式化NameNode
#首先在node1上格式化namenode bin/hdfs namenode -format # 将node1上namenode的元数据复制到node2上 # 在node2上执行以下命令(也可以直接将/usr/local/hadoop/tmp目录复制到node2上) bin/hdfs namenode -bootstrapStandby #当执行上面命令的时候需要先把node1上的namenode启动,否则会出错
初始化hdfs状态到zookeeper
#在其中一个namenode上执行以下命令 bin/hdfs zkfc -formatZK
启动hdfs
#在namenode1上启动hdfs sbin/start-hdfs.sh
ResourceManager HA配置
ResourceManager运行在node1和node2结点上
- yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--开启HA--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--类似于NameNode HA的nameservice id--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>ycr</value> </property> <!--两台ResourceManager的id--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!--rm1对应的结点--> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node1</value> </property> <!--rm2对应的结点--> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node2</value> </property> <!--rm web访问地址--> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>node1:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node2:8088</value> </property> <!--zookeeper结点--> <property> <name>yarn.resourcemanager.zk-address</name> <value>node3:2181,node4:2181,node5:2181</value> </property>
- mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
- 启动yarn
#先在一个resourcemanager结点上启动yarn sbin/start-yarn.sh #再另一个resourcemanager结点上启动resourcemanager sbin/yarn-daemon.sh start resourcemanager
通过http访问resourcemanager时,处于standby状态的结点会跳转到active的结点上。
HDFS namenode HA(QJM方式)环境搭建实践
最新推荐文章于 2024-07-03 20:49:24 发布