1、Zookeeper安装
1、解压 zookeeper 到安装目录中/opt/app/zookeeper 中。
2、在安装目录下创建data和logs两个目录用于存储数据和日志:
cd /opt/app/zookeeper-3.4.10
mkdir dir_data
mkdir dir_logs
3、在conf目录下新建zoo.cfg文件,写入以下内容保存:
tickTime=2000
dataDir=/opt/app/zookeeper-3.4.10/dir_data
dataLogDir=/opt/app/zookeeper-3.4.10/dir_logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=s10:2888:3888 //s10,s11,s12是自己的ip
server.2=s11:2888:3888
server.3=s11:2888:3888
注:分布式协调服务:s10,s11,s12
4、在新建的dir_data下,新建一个myid文件,分配票数。
s10 : echo '1' > /opt/app/zookeeper-3.4.10/dir_data/myid
s11: echo '2' > /opt/app/zookeeper-3.4.10/dir_data/myid
s12: echo '3' > /opt/app/zookeeper-3.4.10/dir_data/myid
5、启动命令(bin目录下)
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status
注:当半数以上启动时,会每个节点查看状态都能得到其对应的角色。(s10,s11,s12)
2、HA安装
1、安装HA之前,必须先安装zookeeper
2、删除原来文件(要删除以前hadoop的残留文件)
mkdir -p /opt/app/hadoop-2.7.2/journalnode //创建共享存储系统的journalnode节点编辑日志存储路劲
mkdir -p /opt/app/hadoop-2.7.2/namenode //存储namenode的临时文件(不然会在tmp下面)
mkdir -p /opt/app/hadoop-2.7.2/datanode //存储datenode的临时文件(不然会在tmp下面)
rm -rf /opt/app/hadoop-2.7.2/journalnode/*
rm -rf /opt/app/hadoop-2.7.2/namenode/*
rm -rf /opt/app/hadoop-2.7.2/datanode/*
rm -rf /tmp/* //所有的都执行
rm -rf /opt/app/hadoop-2.7.2/data/tmp/*
rm -rf /opt/app/hadoop-2.7.2/logs/*
3、更改配置文件core-site.xml
<configuration> <!--配置名称节点集群--> <property> <name>fs.defaultFS</name> <value>hdfs://MyNNS</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/app/hadoop-2.7.2/data/tmp</value> </property> <!--配置zookeeper--> <property> <name>ha.zookeeper.quorum</name> <value>192.168.40.10:2181,192.168.40.11:2181,192.168.40.12:2181</value> </property> </configuration>
4、hdfs-site
<configuration> <!-- 配置集群中的集群名称 --> <property> <name>dfs.nameservices</name> <value>MyNNS</value> </property> <!-- 配置名称集群中的名称节点--> <property> <name>dfs.ha.namenodes.MyNNS</name> <value>nn1,nn2</value> </property> <!--配置nn1的主机位置与端口号 --> <property> <name>dfs.namenode.rpc-address.MyNNS.nn1</name> <value>192.168.40.10:8020</value> </property> <!-- 配置nn2的主机名称端口号--> <property> <name>dfs.namenode.rpc-address.MyNNS.nn2</name> <value>192.168.40.11:8020</value> </property> <!--配置nn1与nn2 web访问端口 --> <property> <name>dfs.namenode.http-address.MyNNS.nn1</name> <value>192.168.40.10:50070</value> </property> <property> <name>dfs.namenode.http-address.MyNNS.nn2</name> <value>192.168.40.11:50070</value> </property> <!--配置journalnode日志服务器主机位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://192.168.40.10:8485;192.168.40.11:8485;192.168.40.12:8485/MyNNS</value> </property> <!--配置journalnode 日志存储的地址 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/app/hadoop-2.7.2/journalnode</value> </property> <!-- 配置HA的代理服务--> <property> <name>dfs.client.failover.proxy.provider.MyNNS</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>/home/hadoop/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <!-- 开启自动故障转移功能--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- namenode临时文件存储目录--> <property> <name>dfs.name.dir</name> <value>/opt/app/hadoop-2.7.2/namenode/</value> </property> <!-- datanode临时文件存储目录--> <property> <name>dfs.data.dir</name> <value>/opt/app/hadoop-2.7.2/datanode/</value> </property> </configuration>
5、格式化文件系统
scp -r /opt/app/hadoop-2.7.2 s13:/opt/app/ //分发配置文件
zkServer.sh start //三台zk都必须先启动
hadoop-daemon.sh start journalnode //三台journalnode都必须先启动
hadoop namenode -format //格式化hdfs
hdfs zkfc -formatZK //初始化ZK
hadoop-daemon.sh start namenode //启动namenode(active节点上)
hdfs namenode -bootstrapStandby //同步到Standby节点上
hadoop-daemon.sh start namenode //Standby节点上开启namenode
start-all.sh //启动全部
hdfs haadmin -getServiceState nn1 //查看nn1状态
hdfs haadmin -getServiceState nn2 //查看nn1状态
6、第二次开启就不需要这么费神了
zkServer.sh start //三台zk都必须先启动
start-all.sh //启动全部