此环境所应用的软件及相关安装包链接:https://pan.baidu.com/s/1LctrNBWNvJeXT8M-OC3wcQ
提取码:iuii
1.Hadoop HA原理可看上一篇博客。
2.此环境是在大数据学习系列(八)Hadoop1.X全分布式项目及环境搭建 的基础上进行搭建的,所以需先准备好那个环境,包括IP hosts hostname 配置,hadoop jdk的安装及配置等。
环境准备,以下是我的环境,注意要保证eleven-2和eleven-3互相免密以及对自己免密
IP | hostname |
192.168.40.33 | eleven-2 |
192.168.40.34 | eleven-3 |
192.168.40.35 | eleven-4 |
192.168.40.36 | eleven-5 |
各服务器上需要搭建的角色
| NN-1 | NN-2 | DN | ZK | ZKFC | JNN |
eleven-2 | * |
|
|
| * | * |
eleven-3 |
| * | * | * | * | * |
eleven-4 |
|
| * | * |
| * |
eleven-5 |
|
| * | * |
|
|
一、修改Hadoop配置
1.修改hdfs.site.xml
<configuration>
<!--配置副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--namenode集群的名称-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--此集群名称下包含的namenode的节点名称-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--namenode节点名称所对应的服务器地址:ip:port-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>eleven-2:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>eleven-3:8020</value>
</property>
<!--namenode节点服务器所对外提供的浏览器访问地址:IP:port-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>eleven-2:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>eleven-3:50070</value>
</property>
<!--配置journalnode服务器地址-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://eleven-2:8485;eleven-3:8485;eleven-4: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_dsa</value>
</property>
<!---配置edits文件存放路径-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/sxt/hadoop/ha/journalnode</value>
</property>
<!--开启自动故障转移-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
2.修改core-site.xml文件
<configuration>
<!--配置使用的namenode集群名称,在hdfs-site.xml文件里配置的-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--配置镜像快照及元素据信息存放路径-->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/ha</value>
</property>
<!--配置zookeeper服务器地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>eleven-3:2181,eleven-4:2181,eleven-5:2181</value>
</property>
</configuration>
3.修改slaves文件,配置datanode节点,前提是已经配置好了hostname及hosts.
eleven-3
eleven-4
eleven-5
4.配置完成后同步四台服务器的配置文件。
二、安装配置zookeeper,安装包在文章开头已经给出。(注意三台服务器配置要同步)
1.在eleven-3,eleven-4,eleven-5上上传zookeeper安装包,并解压至自己想要存放的目录下,我的安装路径为: /opt/sxt/zookeeper-3.4.6
2.配置zookeeper环境变量
修改/etc/profile文件为如下,然后同步eleven-3,eleven-4,eleven-5三台服务器的profile文件,并重新读一下(source /etc/profile)
3.修改配置文件,安装路径下的/conf/zoo.cfg文件, 我的文件路径为: /opt/sxt/zookeeper-3.4.6/conf/zoo.cfg,最后同步三台服务器的配置。
1.数据存放路径,如果没有此文件夹,需要创建这个路径
dataDir=/var/sxt/zk
2.配置zookeeper集群中服务器的地址及端口
server.1=eleven-3:2888:3888
server.2=eleven-4:2888:3888
server.3=eleven-5:2888:3888
4.在上面配置的dataDir路径下 配置数字节点规划。
1.三台服务器切换至 /var/sxt/zk
2.echo 1 > myid //配置数字节点规划,三台zk服务器分别配置成1,2,3.
zk集群会根据此值的大小确定哪个是主节点
三、启动项目(首次启动)
1.因为zookeeper是用来服务协调的,所以它需要知道整个项目的状态和信息,所以需要先把zk启动起来。
在zk的三台服务器上执行启动命令,如下:(前提是配置好了环境变量哟,如果没配置要切换到bin目录下执行)
zkServer.sh start //启动命令
zkServer.sh stop //停止命令
zkServer.sh status //查看状态命令
zkCli.sh //打开zk客户端,可以查看此时在zk上的服务的相关信息。
2.启动三台journalnode。
命令如下:
hadoop-daemon.sh start journalnode
3.启动namenode
1.在主namenode上执行格式化操作。命令如下
hdfs namenode –format
2.启动namenode,在主节点上执行启动命令
hadoop-deamon.sh start namenode //启动命令
hadoop-deamon.sh stop namenode //停止命令
3.另一台namenode不用重启启动,只需要执行以下同步命令即可,命令如下:
hdfs namenode -bootstrapStandby
4.在namenode上格式话zk,并启动zkfc
此时所有主要的角色都启动起来了,还有一个 zkfc,
1.在主namenode上执行zk初始化操作。命令如下:
hdfs zkfc -formatZK
2.启动zkfc,在主namenode上执行命令
hadoop-daemon.sh start zkfc
还需最后一步,在主namenode节点上执行启动操作,会启动其他的角色datanode 备namenode
start-dfs.sh
5.关闭 项目
1.先关hdfs项目
stop-dfs.sh
2.再关zookeeper集群
zkServer.sh stop
到此项目已经搭建并启动完毕。
首次启动需要按照上述步骤执行,
以后启动只需要执行两步操作
1.启动zk(在zk服务器上)
zkServer.sh start /zkServer.sh stop
2.启动hdfs,在主namenode上
start-dfs.sh /stop-dfs.sh