一.ZooKeeper概念讲解
(一)概念
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
- ZooKeeper包含一个简单的原语集,提供Java和C的接口。
- ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
(二)原理
- ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
- ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。
(三)特点
-
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
-
那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
-
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
-
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
-
重点概念:
1.server2和server3第一次切换用户会比较慢
2.hadoop比较吃内存,如果内存如果比较小,会出现进程起来了,但是一会就消失了,或者使用jps是无法查看到的
3.ps是查看整个操作系统的
4.给集群添加一个数据节点
5.做hadoop集群时一定需要主机名解析,时间同步,用户id
6.su - 中的“-”代表用户的环境变量
7.在开启服务时,不建议使用此命令(例如sbin/hadoop-daemon.sh start datanode),因为会出现warning
8.整个分布式文件系统中各个节点的的状态
9.2版本是50070,3版本是9870,可以通过在配置文件中修改
10.哪些节点在一个机架内,如果使用便宜的,地震可能会漂移
11.client可能是外部直接存储的数据,也可能是其中的一个节点(做client,也做数据存储)
12.可以直接上传到hdfs,通过myeclise的端口传
13.CDH版本:可以直接支持图形化部署,都遵守apache版本
14.HPC:网关计算,不是超算,硬件比较牛逼,比较少
15.hadoop对硬件没有太大的要求
16.第一个副本是随机的,第二个是机架感应技术(一定是在一个机架上的节点),(同一个机架上的另外一个节点)
17.假如file1100M,每个block是128M,是按照block写进入的,数据流,
18.节点越多,冗余性越好,可是比较耗内存
19.迁移数据快还是计算快,计算
20.会按照顺序读取地址链表
21.spark是内存式的,storm,flink都需要YARN管理器(做调度)
22.一般的服务都要首先将其停掉,再开启
23.管理器,下面都会有分布式管理框架,但是都会有mapreduce(类似图书管理系统)
24.硬件运行的状态都会使用日志显示
25.spark主要做内存
26.rm做资源分配
27.nm是控制本质物理界点的container,是am和rm的传输,即am向nm申请,并将状态实时告诉rm
28.am是用户层面的
二.Hadoop+ZooKeeper高可用
~~~~~~~~~~~~~
实验环境:
server1 172.25.66.1
server2 172.25.66.2
server3 172.25.66.3
server4 172.25.66.4
server5 172.25.66.5
物理机 172.25.254.66
~~~~~~~~~~~~~~~
(一)前提工作(开启服务并重新创建一个虚拟机)
1.在server1首先切换到hadoop用户下并查看之前是否成功配置hadoop
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls
2.在server1进入hadoop目录下开启dfs服务,发现会报错(报错内容为:172.25.66.3/2: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
3.在server1退出hadoop用户登陆后开启nfs服务
[hadoop@server1 hadoop]$ logout
[root@server1 ~]# systemctl start nfs
4.在server2和server3中将server1中的/home/hadoop目录挂载至本地的/home/hadoop目录下并查看
在server2中操作:
[root@server2 ~]# mount 172.25.66.1:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df
在server3中操作:
[root@server3 ~]# mount 172.25.66.1:/home/hadoop/ /home/hadoop/
[root@server3 ~]# df
5.在server1中切换到hadoop用户下并重新开启服务,发现还是报错(报错内容如下:172.25.66.3: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).),这是因为之前开启过dfs服务,但是没有成功开启,此时应该先关闭dfs服务,再重细腻开启
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ cd