大数据课程C3——ZooKeeper的概述

文章作者邮箱: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中,创建节点必须携带数据),数据 可以是对节点的描述,或者可以是一些配置信息。

5. 在Zookeeper中不存在相对路径,所有的路径都必须从根节点开始计算。

5. 命令

命令解释
ls /查看根节点的子节点
create /video创建节点
delete /boot删除节点
rmr /video递归删除节点
get /aaa获取节点数据
set /aaa修改节点数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】二叉树进阶面试题

文章目录 二叉树创建字符串二叉树分层遍历(从前开始)二叉树分层遍历(从后开始)二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归&…

GitLab 删除项目

1.点击头像 2.点击Profile 3.选择要删除的项目点进去 4.settings-general-Advances-expand 5.然后在弹出框中输入你要删除的项目名称即可

Java - 注解开发

注解开发定义bean Component的衍生注解 Service: 服务层的注解 Repository: 数据层的注解 Controller: 控制层的注解 纯注解开发 bean管理 bean作用范围 在类上面添加Scope(“singleton”) // prototype: 非单例 bean生命周期 PostCon…

关于Spring的bean的相关注解以及其简单使用方法

一、前置工作 第一步&#xff1a;创建一个maven项目 第二步&#xff1a;在resource中创建一个名字叫做spring-config.xml的文件&#xff0c;并把以下代码复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…

用flask run代替flask run --debug

安装python-dotenv依赖。 在项目根目录下新建.flaskenv文件&#xff0c;并作如下配置&#xff1a; FLASK_ENVdevelopment FLASK_DEBUG1

redis-cluster 创建及监控

集群命令 cluster info&#xff1a;打印集群的信息。 cluster nodes&#xff1a;列出集群当前已知的所有节点&#xff08;node&#xff09;的相关信息。 cluster meet <ip> <port>&#xff1a;将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…

《Federated Unlearning via Active Forgetting》论文精读

文章目录 1、概述2、方法实验主要贡献框架概述 3、实验结果比较方法实验结果忘却完整性忘却效率模型实用性 4、总结 原文链接&#xff1a; Federated Unlearning via Active Forgetting 1、概述 对机器学习模型隐私的⽇益关注催化了对机器学习的探索&#xff0c;即消除训练数…

[React]常见Hook实现之useUpdateLayoutEffect

[React]常见Hook实现之useUpdateLayoutEffect useUpdateLayoutEffect是一个自定义的React Hook&#xff0c;它与useUpdateEffect类似&#xff0c;都是用来在组件更新时执行副作用函数。不同的是&#xff0c;useUpdateLayoutEffect使用的是useLayoutEffect来注册副作用函数。 …

基于JAVA SpringBoot和Vue高考志愿填报辅助系统

随着信息技术在管理中的应用日益深入和广泛&#xff0c;管理信息系统的实施技术也越来越成熟&#xff0c;管理信息系统是一门不断发展的新学科&#xff0c;任何一个机构要想生存和发展&#xff0c;要想有机、高效地组织内部活动&#xff0c;就必须根据自身的特点进行管理信息时…

学习笔记|大模型优质Prompt开发与应用课(二)|第二节:超高产文本生成机,传媒营销人必备神器

文章目录 01 文字写作技能的革新&#xff0c;各行各业新机遇四大类常见文字工作新闻记者的一天新闻记者的一天–写策划prompt 新闻记者的一天–排采访prompt生成结果prompt生成结果 大模型加持&#xff0c;文字写作我们如何提效营销创作营销创作-使用预置法为不同平台生成文案p…

[SQL挖掘机] - 字符串函数 - concat

介绍: concat函数用于连接字符串的函数。它接受多个字符串作为参数&#xff0c;并将它们按顺序连接起来形成一个新的字符串。 用法: 以下是concat函数的语法&#xff1a; concat(string1, string2, ...)其中&#xff0c;string1, string2, …是要连接的字符串参数。你可以传…

Aspose.cell excel转pdf日期格式不正确yyyy/MM/dd变成MM/dd/yyyy

最近使用Aspose.cell将excel转pdf过程中excel中时间格式列的显示和excel表里的值显示不一样。 excel里日期格式 yyyy/MM/dd pdf里日期格式MM/dd/yyyy 主要原因&#xff1a;linux和windows里内置的时间格式不一致&#xff0c;当代码部署到linux服务器的时候转换格式就会发生不一…

Nginx 高可用负载均衡(三种模式)

一、nginx普通集群负载均衡 1、安装keepalived (1)下载 https://www.keepalived.org/download.html(2)解压 tar -zxvf keepalived-2.0.18.tar.gz(3)使用configure命令配置安装目录与核心配置文件所在位置&#xff1a; ./configure --prefix/usr/local/keepalived --sysconf/e…

Python解码张三的法外狂徒之旅,揭秘视频背后的真相!【含jS逆向解密】

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 传说中&#xff0c;有人因为只是远远的看了一眼法外狂徒张三就进去了&#x1f602; 我现在是获取他视频&#xff0c;岂不是直接终生了&#x1f929; 网友&#xff1a;赶紧跑路吧 &#x1f60f; 好了话不多说&#xff…

一枚女程序员的周末安排

周末放松一般是从周五晚上开始的&#xff0c;朋友同事之间的社交一般都是在周五晚上&#xff0c;聚餐&#xff0c;看电影&#xff0c;逛街等&#xff08;毕竟大家住的都比较远&#xff0c;选在周五晚上最好不过了&#xff09; 周末的早晨必须睡个美美的懒觉&#xff0c;然后慢悠…

【Android】底层逻辑深入了解(学习笔记)(未完)

step by step. 目录 init启动 Zygote进程&#xff1a; SystemServer处理过程 Binder&#xff1a; Launcher启动过程 Android系统启动流程 四大组件 Activity Service BroadcastReceiver广播 ContentProvider内容提供者&#xff08;进程内和进程间的数据共享&#xff…

java语法基础--Scanner

1、使用方法 //step1、实例化Scanner类 Scanner SC new Scanner(System.in); //step2、进行java.util.Scanner的导包 //step3、进行提醒性的文字输出 System.out.println(“请输... “)&#xff1b; //step4、根据你的业务来判断你需要获取到输入信息的类型 sc.nextInt(); s…

vue的组件化编程的详细讲解加代码演示

&#x1f600;前言 本片文章是vue系列第5篇整理了vue的组件化编程的详细讲解加代码演示 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&am…

linux安装nginx遇到的报错

1、Linux如何修改只读文件&#xff08;以设置自动连网为例&#xff09; vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后提示 E45&#xff1a;已设定选项“readonly”&#xff08;请加&#xff01;强制执行&#xff09; 如果需要强制修改&#xff0c;可以使用&#xff0…

Mongodb 多文档聚合操作处理方法二(Map-reduce 函数)

聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来&#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作&#xff0c;您可以使用&#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…