1、zookeeper


Hadoop–数据存储和计算
Flume–数据收集
Hive–数据仓库工具
Hbase–大数据数据量
Sqoop–数据迁移工具
Kafka–消息队列
Spark–实时计算框架+离线分布式计算+机器学习
Scala–基于Java语言

一、安装VMware workstation pro

二、安装centos 6.5

三、xshell

(一)、创建会话

新打开的样子
输入名称和主机(H)【即要连接的centos系统的ip地址】
在这里插入图片描述

(二)、连接

在这里插入图片描述
输入用户名
在这里插入图片描述
输入密码
在这里插入图片描述

四、启动网卡

ifup +名称(通过ifconfig查看)。此时网卡不会随着开机自启动。可配置网卡随着开机自启动:配置文件:vim /etc/sysconfig/network-scripts/ifcfg-eth0

五、固定ip

电脑ip是dhcp服务器自动分配的
输入setup进入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择*然后按空格并填写以下信息
在这里插入图片描述

六、winscp

将windows的软件与数据与Linux的进行交互
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、zookeeper

(一)、简介

1、zookeeper时根据谷歌论文《The Chubby Lock》设计实现
2、zookeeper时一个分布式的协调框架,提供统一的配置信息,统一的命名,分布式锁,提供组服务
3、zookeeper是apache hadoop的一个子组件。不仅仅支持hadoop。还支持绝大部分分布式集群,独立开来。

(二)、安装

1、单机安装–不用,很多功能不能够正常使用,常用于测试
2、伪分布式安装:用一台机器通过多线程的方式,模拟集群
3、集群安装:多台服务器同时运行

(三)安装过程

1、解压zookeeper安装包
在这里插入图片描述
2、拷贝模板文件起名为zoo.cfg
在这里插入图片描述
3、修改zoo.cfg中的DataDir属性
更改zoo.cfg中数据存放的目录 DataDir
在这里插入图片描述

在这里插入图片描述
4、上传jdk并配置jdk环境变量
5、启动zookeeper
a 进入bin
b sh zkServe.sh start
在这里插入图片描述
status看状态 standalone(已经启动)
在这里插入图片描述

(四)、特点

1、zookeeper本身是一个树状的结构
2、树(znode)状结构的根节点是/
3、zookeeper是znode树的第一个节点
4、所有的节点都是从根节点开始算起
5、zookeeper不是用来存储数据的。单个节点数据存储不能超过1M。
6、zookeeper在创建节点时,必须携带数据(可以是一些配置信息)
7、zookeeper会将携带的信息存储到内存(读取速度快)或磁盘(数据不易丢失)中。
8、在磁盘中存储的位置,可以通过dataDir属性进行指定,如果不指定默认在/tmp

创建节点(从根节点开始写) create
在这里插入图片描述
在这里插入图片描述
9、在zookeeper中进行创建、删除、修改等操作,会分配一个全局的事务id,称之为Zxid。每一次事务操作都会触发事务id递增1的情况发生。
[zk: localhost:2181(CONNECTED) 7] get /park01
student
cZxid = 0x2(创建节点的事务id)
ctime = Tue Aug 17 14:31:52 CST 2021(创建节点的时间)
mZxid = 0x2(节点数据修改的事务id)
mtime = Tue Aug 17 14:31:52 CST 2021(节点数据修改的时间)
pZxid = 0x2(子节点个数变化的事务id)
cversion = 0(子节点变化的次数)
dataVersion = 0(节点数据变化的次数)
aclVersion = 0(节点权限策略变化的次数)
ephemeralOwner = 0x0
dataLength = 7(数据的长度)
numChildren = 0(子节点的个数)
在这里插入图片描述
获取节点get
在这里插入图片描述
修改节点信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10、其他命令
a 创建临时节点 create -e
在这里插入图片描述
b 创建顺序节点
c 创建临时顺序节点
临时节点不能挂载子节点,持久节点可以挂载子节点
在这里插入图片描述

(五)、节点类型

节点类型持久节点临时节点
非顺序节点persisentephemeral
顺序节点persisent_sequentialephemeral_sequential

(六)API

1、

八、安装jdk

jdk版本不匹配
1、上传jdk
在这里插入图片描述
2、解压jdk包
tar -zxvf 包名
3、配置环境变量
在文件的最后加入。在vim编辑时:输入:!可以打命令
在这里插入图片描述
在这里插入图片描述

九、修改eclipse的jdk版本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、新建一个zookeeper工程

1、创建一个Java project
在这里插入图片描述
2、new->Folder
在这里插入图片描述
在这里插入图片描述
3、将zookeeper的lib中的所有非文本文档的文件复制到上一步建立的zk_jars中
在这里插入图片描述
4、选中zk_jars中的所有文件,右击bulid path
在这里插入图片描述

十一、编写API代码

(一)Test01

1、连接zookeeper

	//--连接zookeeper
	@Before
	public void connect() throws IOException, InterruptedException{
		//--ConnectString--连接zookeeper的ip以及端口号
		//--SessionTimeOut--会话超时时间
		//--Watcher--用于监控连接是否建立
		//--zookeeper底层是基于netty来完成连接的
		//--netty底层又是基于nio的异步非阻塞通信来完成的
		//--非阻塞:无论连接成功与否。test都会向下执行,可能会出现还没有连接成功,test线程执行即结束的情况
		//--创建闭锁
		CountDownLatch cdl = new CountDownLatch(1);
		zk = new ZooKeeper("192.168.232.129:2181", 5000, new Watcher() {
			
			@Override
			//--此方法用户具体的监控业务代码编写
			public void process(WatchedEvent event) {
				if(event.getState()==Event.KeeperState.SyncConnected) {
					System.out.println("连接zookeeper成功");
				}
				//--钥匙减一的操作
				cdl.countDown();
			}
		});
		//--钥匙没有减为0的时候,发生阻塞
		cdl.await();
		System.out.println("finish......");
	}

2、创建节点

@Test
	public void createNode() throws KeeperException, InterruptedException {
		//--path:节点的路径
		//--date:携带的数据
		//--acl:权限
		//--createMode:节点的类型
		//--返回值:节点的名字
		String name = zk.create("/student", "hello node".getBytes(),
				ZooDefs.Ids.OPEN_ACL_UNSAFE , CreateMode.PERSISTENT);
		System.out.println(name);
	}

3、获取节点数据

@Test
	public void getdate() throws KeeperException, InterruptedException {
		//--返回值为一个数组
		//--shift+alt+l快速获取返回值
		//--stat封装的就是子节点的详细信息--czxid......
		Stat s = new Stat();
		byte[] data = zk.getData("/student", null, null);
		System.out.println(new String(data));
	}

4、获取子节点

@Test
	public void getChildren() throws KeeperException, InterruptedException{
		List<String> children = zk.getChildren("/", null);
		for(String string : children) {
			System.out.println(new String(string));
		}
	}

5、删除节点

@Test
	public void deleteNode() throws InterruptedException, KeeperException {
		//-- -1表示
		zk.delete("/student", -1);
	}

(二)ZookeeperTest02

1、监控节点数据是否被修改

//--监控节点数据是否被修改
	@Test
	public void dataChanged() throws KeeperException, InterruptedException {
		CountDownLatch cdl = new CountDownLatch(1);
		zk.getData("/park02", new Watcher() {
			@Override
			//--具体观察几点数据变化的业务逻辑编写在此方法
			public void process(WatchedEvent event) {
				if(event.getType()==Event.EventType.NodeDataChanged) {
					//--实际开发过程中可以通过日志系统一条日志
					System.out.println("节点数据被修改了");
					cdl.countDown();
				}
		}}, null);
		cdl.await();
	}

2、监控节点的增删

//--监控节点的增删
	@Test
	public void nodeChanged() throws KeeperException, InterruptedException {
		CountDownLatch cdl = new CountDownLatch(1);
		zk.exists("/park02", new Watcher() {
			@Override
			public void process(WatchedEvent event) {
				if(event.getType()==Event.EventType.NodeCreated) {
					System.out.println("节点被创建了。。。。。。");
				}else if(event.getType()==Event.EventType.NodeDeleted) {
					System.out.println("节点被删除了。。。。。");
				}
				cdl.countDown();
			}
		});
		cdl.await();
	}

3、监控子节点个数的变化

//--监控子节点个数变化
	//--不能监控子节点的数据变化
	@Test
	public void childrenChanged() throws KeeperException, InterruptedException {
		CountDownLatch cdl = new CountDownLatch(1);
		zk.getChildren("/", new Watcher() {
			@Override
			public void process(WatchedEvent event) {
				if(event.getType()==Event.EventType.NodeChildrenChanged) {
					System.out.println("子节点的个数发生了改变。。。");
				}
				cdl.countDown();
		}});
		cdl.await();
	}

闭锁(线性递减锁)
上一个钥匙,

任务

  • 计划任务
  • 完成任务
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值