第二(一)天:环境搭建
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 创建临时顺序节点
临时节点不能挂载子节点,持久节点可以挂载子节点
(五)、节点类型
节点类型 | 持久节点 | 临时节点 |
---|---|---|
非顺序节点 | persisent | ephemeral |
顺序节点 | persisent_sequential | ephemeral_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();
}
闭锁(线性递减锁)
上一个钥匙,
任务
- 计划任务
- 完成任务