本文重点
理解大数据基本概念 掌握数据分析基本步骤、分布式集群概念 理解zookeeper功能与作用 掌握zookeeper架构原理 学会搭建zookeeper集群 掌握shell客户端操作zk 理解zookeeper典型应用
内容大纲
#大数据导论 数据与数据分析 数据分析作用(商业) 离线分析 实时分析 ML机器学习 数据分析的基本步骤 (重要) 大数据时代 海量数据处理场景 (重要) 如何存储? 分布式存储 如何处理? 分布式计算 大数据5V特征 大数据应用 分布式、集群 #Apache Zookeeper (重要) Zookeeper概念介绍 分布式协调服务软件 Zookeeper是分布式小文件存储系统 Zookeeper特性:全局数据一致性 Zookeeper角色 主从架构 Zookeeper集群的搭建 Zookeeper的数据模型 Zookeeper的操作 shell command Zookeeper watcher监听机制 Zookeeper典型应用场景
一、大数据导论
1.1、数据与数据分析
- 数据如何来的
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。 #通过对客观事件进行计量和记录就会产生数据 数据量化
数据分析
所谓的数据就是通过工具或者方法把隐藏在数据背后的规律和价值提取处理的过程。
数据分析的作用(在商业中)
数据分析的结果给企业的决策提供支撑 支持决策。 数据仓库的出现也是集成的数据分析平台 分析的结果支撑决策。
1.2、数据分析作用
各行各业可能都需要开展数据分析,我们重点关注商业领域。也就是说企业为什么需要数据分析。
a、原因分析–对应历史数据
b、现状分析–对应当下数据
c、预测分析–结合数据预测未来
离线分析(批处理 batch processing)
分析已有的数据 历史数据,面向过去分析。 在时间维度明显成批次性变化。一周一分析(T+7),一天一分析(T+1)
- 实时分析(Real Time Processing 流处理Streaming)
分析实时产生的数据 当下的数据 面向当下分析 所谓的实时从数据产生到分析到应用 时间间隔 秒级(spark streaming) 毫秒级(storm flink)
- 机器学习(Machine Learning,ML)
基于历史数据和当下产生的实时数据预测未来发生的事情。 侧重于数学算法的运用。 分类 聚类 关联 预测。
1.3、数据分析的基本步骤(数据分析开发步骤)
数据分析的步骤和流程不仅对我们开展分析提供支撑,同时也对我们去沟通阐述数据分析项目的流程有非常大的支撑。面试时:介绍一下你最近做的项目?如何介绍?介绍什么?
- 明确分析的目的和思路
目的:分析方向 分析的主题 要解决什么问题 思路:如何去开展数据分析 关键分析具有体系。 体系化也就是逻辑化,简单来说就是先分析什么,后分析什么,使得各个分析点之间具有逻辑联系 需要营销、管理类理论进行支撑 叫做数据分析方法论。 偏向于战略层面 从宏观角度指导。
数据收集
企业常见数据源: #1、业务数据(RDBMS 关系型数据库 比如:Mysql oracle 事务支持) #2、日志数据、日志文件(服务器日志、应用日志、用户行为日志) #3、爬虫数据 #4、其他事数据
数据预处理
结构化数据、半结构化数据、非结构化数据 大数据青睐什么?结构化数据。 #所谓的结构化数据指的是具有schema约束信息的数据。 通俗理解易于程序处理解读的数据。 半结构化数据(json xml) #经过预处理把数据变成干净规则统一整洁的结构化数据。
数据分析
利用技术和软件 基于指标开展分析。
数据应用
分析的结果去哪里? 数据展现、数据可视化(Data Visualization) 即席查询 数据挖掘 数据接口对外
1.4、大数据时代
思考:数据为什么会爆炸?
- 数据大爆炸和面临的挑战
- 挑战1:海量数据如何存储?
- 挑战2:海量数据如何高效计算?
- 大数据5V特点
- 大数据应用场景
1.5、分布式、集群
- 共同点:多台机器 不是单机的
- 不同点:
- 集群:每台机器上的服务是一样的。
- 分别苏:每台集群上的服务、组件是不一样的。
提醒:口语上,经常会混淆二者概念。都是汲取两者的共同点。
搭建一个分布式hadoop集群。 多台机器部署不是单机部署
- 数据大爆炸和面临的挑战解决方案
- 如何存储海量数据?存储得下。------>分布式存储。
- 如何计算海量数据?高效计算。------->分布式计算。
- 大数据、云计算
#大数据侧重于海量数据的分析。 #云计算侧重于硬件资源的虚拟机技术。云cloud. 阿里云服务器。vmware。 公有云:把云资源当做产品卖。 私有云:自己公司内部搭建云服务器。 混合云:结合上面两点。
二、Apache Zookeeper
2.1、zookeeper概念
提示:学习任何一款软件框架,我们都需要首先搞清楚几个问题:
这个软件是什么?(定位问题)
这个软件能用来干什么?
这个软件怎么用?
这个软件有什么特性和优缺点?
- 是一个分布式的协调服务软件(distributed coordination)。
分布式:多台机器的环境。 协调服务:在分布式环境下,如何控制大家有序的去做某件事。 顺序 一致 共同 共享
zookeeper的本质:分布式的小文件存储系统
- 存储系统:存储数据、存储文件 目录树结构
- 小文件:上面存储的数据有大小限制
- 分布式:可以部署在多台机器上运行,对比单机来理解。
- 问题:zk这个存储系统和我们常见的存储系统不一样。基于这些不一样产生了很多应用。
- zookeeper是一个标准的主从架构集群。
主角色 从角色 主从各司其职 共同配合 对外提供服务。
2.2、zookeeper最重要的特性:全局数据一致性。
事务(transaction):通俗理解 多个操作组成一个事务,要么一起成功,要么一起失败,不会存在中间的状态。如果中间失败了要进行回滚操作。
2.3、zookeeper集群角色
zk是标准的主从架构,只不过为了扩大集群的读写能力,同时又不增加选举复杂度,又提供了观察者角色。
主角色 leader
事务性请求的唯一调度和处理者
从角色 follower
处理非事务性操作 转发事务性操作给leader 参与zk内部选举机制
观察者角色 Observer
处理非事务性操作 转发事务性操作给leader 不参与zk内部选举机制 通俗话:是一群被剥夺政治权利终身的follower。
2.4、Zookeeper集群的搭建
- zk集群在搭建部署的时候,通常选择==2n+1==奇数台。底层 Paxos 算法支持(过半成功)。
- zk部署之前,保证服务器基础环境正常、JDK成功安装。
- 服务器基础环境
IP 主机名 hosts映射 防火墙关闭 时间同步 ssh免密登录
JDK环境
jdk1.8 配置好环境变量
zk具体安装部署(选择node1安装 scp给其他节点)
- 安装包
zookeeper-3.4.6.tar.gz
上传解压重命名
cd /export/server tar zxvf zookeeper-3.4.6.tar.gz mv zookeeper-3.4.6/ zookeeper
修改配置文件
- zoo.cfg
#zk默认加载的配置文件是zoo.cfg 因此需要针对模板进行修改。保证名字正确。 cd zookeeper/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg #修改 dataDir=/export/data/zkdata #文件最后添加 2888心跳端口 3888选举端口 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
myid
#在每台机器的dataDir指定的目录下创建一个文件 名字叫做myid #myid里面的数字就是该台机器上server编号。server.N N的数字就是编号 [root@node1 conf]# mkdir -p /export/data/zkdata [root@node1 conf]# echo 1 >/export/data/zkdata/myid
把安装包同步到其他节点上
cd /export/server scp -r zookeeper/ node2:$PWD scp -r zookeeper/ node3:$PWD
创建其他机器上myid和datadir目录
[root@node2 ~]# mkdir -p /export/data/zkdata [root@node2 ~]# echo 2 > /export/data/zkdata/myid [root@node3 ~]# mkdir -p /export/data/zkdata [root@node3 ~]# echo 3 > /export/data/zkdata/myid
zk集群的启动
- 每台机器上单独启动服务
#在哪个目录执行启动命令 默认启动日志就生成当前路径下 叫做zookeeper.out /export/server/zookeeper/bin/zkServer.sh start|stop|status #3台机器启动完毕之后 可以使用status查看角色是否正常。 #还可以使用jps命令查看zk进程是否启动。 [root@node3 ~]# jps 2034 Jps 1980 QuorumPeerMain #看我,我就是zk的java进程
扩展:编写shell脚本 一键脚本启动。
- 本质:在node1机器上执行shell脚本,由shell程序通过ssh免密登录到各个机器上帮助执行命令。
- 一键关闭脚本
[root@node1 ~]# vim stopZk.sh #!/bin/bash hosts=(node1 node2 node3) for host in ${hosts[*]} do ssh $host "/export/server/zookeeper/bin/zkServer.sh stop" done
一键启动脚本
[root@node1 ~]# vim startZk.sh #!/bin/bash hosts=(node1 node2 node3) for host in ${hosts[*]} do ssh $host "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start" done
- 注意:关闭java进程时候 根据进程号 直接杀死即可就可以关闭。启动java进程的时候 需要JDK。
- shell程序ssh登录的时候不会自动加载/etc/profile 需要shell程序中自己加载。
2.5、Zookeeper的数据模型
zk的操作
- 第一种客户端:自带shell客户端
/export/server/zookeeper/bin/zkCli.sh -server ip #如果不加-server 参数 默认去连接本机的zk服务 localhost:2181 #如果指定-server 参数 就去连接指定机器上的zk服务 #退出客户端端 ctrl+c
基本操作
- 创建
- 查看
[zk: localhost:2181(CONNECTED) 5] ls /itcast #查看指定路径下有哪些节点 [a0000000000, b0000000002, a0000000001] [zk: localhost:2181(CONNECTED) 6] get /itcast #获取znode的数据和stat属性信息 112233 cZxid = 0x300000003 #创建事务ID ctime = Mon Jan 30 20:52:49 CST 2023 #创建的时间 mZxid = 0x300000003 #上次修改时事务ID mtime = Mon Jan 30 20:52:49 CST 2023 #上次修改的时间 pZxid = 0x300000009 cversion = 3 dataVersion = 0 #数据版本号 只要有变化 就自动+1 aclVersion = 0 ephemeralOwner = 0x0 #如果为0 表示永久节点 如果是sessionID数字 表示临时节点 dataLength = 6 #数据长度 numChildren = 3 #子节点个数
更新节点
set path data
删除节点
[zk: node2(CONNECTED) 7] delete /itcast Node not empty: /itcast [zk: node2(CONNECTED) 8] rmr /itcast #递归删除
quota限制 软性限制
- 限制某个节点下面可以创建几个子节点 数据大小。
超过限制,zk不会强制禁止操作 而是在日志中给出warn警告提示。
[zk: node2(CONNECTED) 13] listquota /itcast #查看限制 absolute path is /zookeeper/quota/itcast/zookeeper_limits quota for /itcast does not exist.
2.6、Zookeeper监听机制Watch
- 监听机制
- 监听实现需要几步?
#1、设置监听 #2、执行监听 #3、事件发生,触发监听 通知给设置监听的 回调callback
zk中的监听是什么?
- 谁监听谁?
客户端监听zk服务
监听什么事?
监听zk上目录树znode的变化情况。 znode增加了 删除了 增加子节点了 不见了
zk中监听实现步骤
#1、设置监听 然后zk服务执行监听 ls path [watch] 没有watch 没有监听 就是查看目录下子节点个数 有watch 有监听 设置监听子节点是否有变化 get path [watch] 监听节点数据是否变化 e.g: get /itcast watch #2、触发监听 set /itcast 456 #修改了被监听的节点数据 触发监听 #3、回调通知客户端 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/itcast
zk的监听特性
- 先注册 再触发
- 一次性的监听
- 异步通知
- 通知是使用event事件来封装的
state:SyncConnected type:NodeDataChanged path:/itcast type:发生了什么 path:哪里发生的
- zk中监听类型
- 连接状态事件监听 系统自动触发 用户如果不关心可以忽略不计
- 上述所讲的是用户自定义监听 主要监听zk目录树的变化 这类监听必须先注册 再监听。
- 总结:zk的很多功能都是基于这个特殊文件系统而来的。
- 特殊1:znode有临时的特性。
- 特殊2:znode有序列化的特性。顺序
- 特殊3:zk有监听机制 可以满足客户端去监听zk的变化。
- 特殊4:在非序列化节点下,路径是唯一的。不能重名。
2.7、zk典型应用
- 数据发布与订阅
- 提供集群选举
- 分布式锁服务
- 排他锁
排他锁(Exclusive Locks),又被称为写锁或独占锁,如果事务T1对数据对象O1加上排他锁,那么整个加锁期间,只允许事务T1对O1进行读取和更新操作,其他任何事务都不能进行读或写。
共享锁
共享锁(Shared Locks),又称读锁。如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读取操作,其他事务也只能对这个数据对象加共享锁,直到该数据对象上的所有共享锁都释放。