zookeeper笔记

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
1、zookeeper是为别的分布式程序服务的
2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
a、管理(存储,读取)用户程序提交的数据;
b、并为用户程序提供数据节点监听服务;

 

zookeeper的特性:
1、一个leader,多个follower
2、全局数据一致性:每一个server都保存了一份相同的数据副本,client端无论连接哪个server都可以获取到最新的数据。
3、数据更新,分布式数据写,都是有leader来完成的。
4、数据更新顺序,来自同一个client的更新请求会按其发送的顺序依次执行
5、数据更新的原子性,一次数据更新要么成功,要么失败。
6、数据实时性,在一定的时间范围内,client能读取到最新的数据。

 

hadoop的高可用:
集群规划:
企业级的集群规划:
namenode
zkfc 1
resourcemanager 1

namenode
zkfc
resourcemanager 1

datanode
nodemanager
journalnode 3

zookeeper 3

测试用集群:
hadoop05 192.168.137.112 datanode nodemanager journalnode zookeeper namenode resourcemanager zkfc
hadoop06 192.168.137.113 datanode nodemanager journalnode zookeeper namenode resourcemanager zkfc
hadoop07 192.168.137.114 datanode nodemanager journalnode zookeeper

配置hadoop的高可用集群的配置文件
1、hadoop-env.sh
2、core-site.xml
<configuration>
<!--指定hdfs的默认的nameservice为gp1809-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://gp1809</value>
</property>

<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoopdata/tmp</value>
</property>

<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
</configuration>

3、hdfs-site.xml
<configuration>
<!--指定hdfs的那么service的名字,这里的名字应该和core-site.xml中的名字一致-->
<property>
<name>dfs.nameservices</name>
<value>gp1809</value>
</property>

<!--指定gp1809下有两个namenode,分别是nn1,nn2-->
<property>
<name>dfs.ha.namenodes.gp1809</name>
<value>nn1,nn2</value>
</property>

<!--指定nn1的内部通讯RPC地址-->
<property>
<name>dfs.namenode.rpc-address.gp1809.nn1</name>
<value>hadoop05:9000</value>
</property>
<!--指定nn2的内部通讯RPC地址-->
<property>
<name>dfs.namenode.rpc-address.gp1809.nn2</name>
<value>hadoop06:9000</value>
</property>

<!--指定nn1的web ui的通讯地址-->
<property>
<name>dfs.namenode.http-address.gp1809.nn1</name>
<value>hadoop05:50070</value>
</property>
<!--指定nn2的web ui的通讯地址-->
<property>
<name>dfs.namenode.http-address.gp1809.nn2</name>
<value>hadoop06:50070</value>
</property>

<!--指定namenode的元数据存放在journalnode上的存放路径-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop05:8485;hadoop06:8485;hadoop07:8485/gp1809</value>
</property>

<!--配置失败转移的驱动类-->
<property>
<name>dfs.client.failover.proxy.provider.gp1809</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!--配置隔离机制的方式,可以配置多种机制,每个机制换行分割-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>

<!--使用ssh隔离机制时需要ssh免密登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>

<!--配置ssh方式登录到namenode的超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>

<!--指定ournalnode上日志文件的存放路径-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoopdata/journaldata</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>

4、yarn-site.xml
<configuration>
<!--是否开启RM的高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!--配置RM的失败自动切换-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<!--配置RM集群的Id-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>qianfeng</value>
</property>

<!--配置RM的高可用集群包含哪些RM-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<!--配置rm1的主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop05</value>
</property>
<!--配置rm2的主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop06</value>
</property>

<!--配置RM高可用依赖的zookeeper集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
</configuration>

分发:
分发文件:
scp core-site.xml hdfs-site.xml yarn-site.xml root@hadoop06:$PWD

重新初始化集群之前需要删除之前的配置目录


HA启动及测试:
注意:严格按照以下的顺序进行启动:
1、启动zookeeper集群:(分别在hadoop05、hadoop06、hadoop07上启动)
也可以自定义批量启动脚本
2、启动journalnode
/usr/local/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode
3、格式化hdfs
初始化namenode
hdfs namenode -format
4、启动namenode
5、同步namenode的数据
同步数据的方式:
1、直接copy
scp -r /usr/local/hadoopdata/tmp/dfs root@hadoop06:/usr/local/hadoopdata/tmp/
2、同步命令
在standby的namenode所在机器上执行:
hdfs namenode -bootstrapStandby

6、格式化ZKFC
hdfs zkfc -formatZK

7、启动hdfs
start-dfs.sh

8、启动yarn
start-yarn.sh


预习:
mapreduce的运行流程
4 mapreduce\03_离线计算系统(MAPREDUCE详解)v.3

 

posted @ 2018-09-01 11:11  拂柳扬玉  阅读(142)  评论(0编辑  收藏  举报