文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州
▲ 本章节目的
⚪ 了解Zookeeper的特点和命令;
⚪ 了解Zookeeper的构成部分ExecutorService、Lock、Atomic;
一、ExecutorService-执行器服务
1. ForkJoinPool-分叉合并池
1. 分叉:将一个大的任务拆分成多个小的任务,分配多个线程来处理
2. 合并:将拆分出去的小的任务的结果进行汇总,获取到最后的结果
3. 作用:能够非常有效的提高CPU的利用率-实际上就是利用大量的线程来进行抢占,从而保证每一个CPU核上都有大量的任务 进行处理,导致其他的线程被挤占,所以分叉合并放在凌晨执行。
4. 数据量相对较小的时候,循环的效率要高于分叉合并;如果数据量较大的时候,分叉合并的效率就要高于循环。
5. 在分叉合并中,当某一个CPU核所有的任务执行完成之后,这个CPU核不会闲下来,而是随机去扫描其他的某一个核,在这 个核的任务队列的尾端“偷”一个任务回来执行,从而保证分叉合并整体的效率,这个过程称之为“work-stealing”(工 作窃取)策略。
二、Lock-锁
1. 概述
1. 在jdk1.5中,提供了一套lock机制用于取代Synchronized-传统的Synchronized关键字在使用的时候需要确定一个锁对 象,如果锁使用错误的话就会导致产生锁无效或者死锁的情况。
2. Lock的实现类:ReentrantLock-重入锁。如果当前锁可以重复使用-那么就是重入锁。如果锁只能被使用一次,那么就 是非重入锁。
3. ReadWriteLock-读写锁,顾名思义,分为读锁和写锁。
a. 读锁:允许多个线程读,不允许线程写。
b. 写锁之允许一个线程写不允许线程读。
4. 锁的公平和非公平策略
a. 在资源有限的情况下,线程之间实际的抢占和执行次数并不均等,地市就称之为非公平策略。
b. 在公平策略的前提下,任务在执行的时候会自带一个队列,线程不是直接去抢占资源,而是去抢占入队的顺序,线 程在处理完成之后,如果想要再次处理需要重新入队,通过这种方式来保证线程之间实际的执行次数基本上均等。
c. 相对而言,非公平策略效率相等较高,用的也是最多的。
d. Synchronized是非公平的,lock如果不指定默认也是非公平的。
2. 其他
1. CountDownLatch-闭锁/线程递减锁,对线程进行计数,在计数归零之前,线程会陷入阻塞,直到计数归零位置,线程 阻塞才会放开。当一组线程执行结束,另外一组线程开始执行,也适合于用CountDownLatch。
2. CyclicBarrier-栅栏。也会对线程进行计数,也是在计数归零之前陷入阻塞,直到计数归零之后放开阻塞。当这一组线程 到达一个点之后再继续往下执行。
3. Exchanger-交换机。用于交换两个线程之间的信息。
4. Semaphore:信号量。线程在执行任务之前需要获取信号,如果信号被全部占用,那么后来的线程就需要阻塞,等到有 信号释放,阻塞才会放开获取信号执行任务。实际过程中,可以利用这个对象来实现限流的效果。
三、Apache Zookeeper
1. 概述
1. Zookeeper是Yahoo(雅虎)开发后来贡献给了Apache的一套用于分布式管理和协调的框架。
2. Zookeeper本身仿照Google的《The Chubby Lock》设计实现的。
3. Zookeeper提供了中心化的服务:包括:统一的配置,统一的命名,提供分布式锁,以及提供组服务。
2. 安装
1. 单机模式:在一台机器上安装框架,往往只能启动框架的部分功能。
2. 伪分布式:也是在一台机器上安装框架,利用了多线程来模拟集群环境,能够启动框架的大部分功能,甚至全部功能。
3. 完全分布式:在集群(多台服务器)进行安装框架,能够启动框架的全部功能。
3. 伪分布式安装
1. 关闭的防火墙。
2. 临时关闭防火墙:systemctl stop firewalld。
3. 永久关闭防火墙:systemctl disable firewalld a. wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/jdk-8u181-linux-x64.tar.gz。
4. 下载安装JDK。
5. 修改jdk的环境变量 a. wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/apache-zookeeper-3.5.7-bin.tar.gz。
6. 下载或者上传Zookeeper的安装包。
7. 解压Zookeeper的安装包:tar -xvf zookeeper-3.5.7 。
8. 进入Zookeeper的安装目录下的子目录conf目录中:cd zookeeper-3.5.7/conf
9. 将conf目录下的zoo_sample.cfg文件复制为zoo.cfg。Zookeeper在启动的时候会自动寻找zoo.cfg,根据其中的配 置来启动服务:cp zoo_sample.cfg zoo.cfg。
10. 编辑zoo.cfg文件:vim zoo.cfg。
11. 修改其中的属性dataDir,指定数据的存储目录:dataDir=/home/software/zookeeper-3.5.7/tmp。
12. 保存并且关闭zoo.cfg。
13. 进入Zookeeper的安装目录下的子目录bin目录中:cd ../bin。
14. 执行zkServer.sh文件,来启动Zookeeper服务器端:sh zkServer.sh start。
15. 执行zkCli.sh文件,来启动进入Zookeeper客户端:sh zkCli.sh。
4. 特点
1. Zookeeper底层是一个树状结构,根节点是/。
2. Zookeeper中每一个节点称之为Znode节点,因此这棵树称之为Znode树。
3. Zookeeper自带了一个子节点/zookeeper。
4. Zookeeper在创建节点的时候可以携带数据也可以不携带(早版本的zookeeper中,创建节点必须携带数据),数据 可以是对节点的描述,或者可以是一些配置信息。文章来源:https://www.toymoban.com/news/detail-612478.html
5. 在Zookeeper中不存在相对路径,所有的路径都必须从根节点开始计算。文章来源地址https://www.toymoban.com/news/detail-612478.html
5. 命令
命令 | 解释 |
ls / | 查看根节点的子节点 |
create /video | 创建节点 |
delete /boot | 删除节点 |
rmr /video | 递归删除节点 |
get /aaa | 获取节点数据 |
set /aaa | 修改节点数据 |
到了这里,关于大数据课程C3——ZooKeeper的概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!