• Python+大数据-Hadoop生态-hadoop(一)--大数据导论、Apache Zookeeper


    Python+大数据-Hadoop生态-hadoop(一)–大数据导论、Apache Zookeeper


    今日课程学习目标
    理解大数据基本概念
    掌握数据分析基本步骤、分布式集群概念
    理解zookeeper功能与作用
    掌握zookeeper架构原理
    学会搭建zookeeper集群
    掌握shell客户端操作zk
    理解zookeeper典型应用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    今日课程内容大纲
    #大数据导论
    	数据与数据分析  
    	数据分析作用(商业)
    		离线分析
    		实时分析
    		ML机器学习
    	数据分析的基本步骤 (重要)
        大数据时代
        	海量数据处理场景 (重要)
        		如何存储?   分布式存储
        		如何处理?   分布式计算
        	大数据5V特征
            大数据应用
        分布式、集群
    
    #Apache Zookeeper (重要)
    	zk概念介绍  分布式协调服务软件
    	zk是分布式小文件存储系统
    	zk特性:全局数据一致性
    	zk角色 主从架构
    	zk集群的搭建
    	zk的数据模型
    	zk的操作
    		shell command
    	zk watcher监听机制
        zk典型应用场景
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    一、大数据导论
    1.1、数据与数据分析
    • 数据如何来的

      数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。
      
      #通过对客观事件进行计量和记录就会产生数据  数据量化
      
      • 1
      • 2
      • 3
    • 数据分析

      所谓的数据就是通过工具或者方法把隐藏在数据背后的规律和价值提取处理的过程。
      
      • 1
    • 数据分析的作用(在商业中)

      数据分析的结果给企业的决策提供支撑  支持决策。
      数据仓库的出现也是集成的数据分析平台 分析的结果支撑决策。
      
      • 1
      • 2
    1.2、数据分析作用

    各行各业可能都需要开展数据分析,我们重点关注商业领域。也就是说企业为什么需要数据分析。

    a、原因分析–对应历史数据

    b、现状分析–对应当下数据

    c、预测分析–结合数据预测未来

    • 离线分析(批处理 batch processing)

      分析已有的数据 历史数据,面向过去分析。
      在时间维度明显成批次性变化。一周一分析(T+7),一天一分析(T+1)
      
      • 1
      • 2
    • 实时分析(Real Time Processing 流处理Streaming)

      分析实时产生的数据 当下的数据 面向当下分析
      所谓的实时从数据产生到分析到应用 时间间隔   秒级(spark streaming)  毫秒级(storm flink)
      
      • 1
      • 2
    • 机器学习(Machine Learning,ML)

      基于历史数据和当下产生的实时数据预测未来发生的事情。
      侧重于数学算法的运用。  分类 聚类 关联  预测。
      
      • 1
      • 2
    1.3、数据分析的基本步骤(数据分析开发步骤)

    数据分析的步骤和流程不仅对我们开展分析提供支撑,同时也对我们去沟通阐述数据分析项目的流程有非常大的支撑。面试时:介绍一下你最近做的项目?如何介绍?介绍什么?

    • 明确分析的目的和思路

      目的:分析方向  分析的主题  要解决什么问题 
      
      思路:如何去开展数据分析 关键分析具有体系。
      
      体系化也就是逻辑化,简单来说就是先分析什么,后分析什么,使得各个分析点之间具有逻辑联系
      
      需要营销、管理类理论进行支撑  叫做数据分析方法论。 偏向于战略层面 从宏观角度指导。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 数据收集

      企业常见数据源:
      
      #1、业务数据(RDBMS 关系型数据库 比如:Mysql oracle 事务支持)
      
      #2、日志数据、日志文件(服务器日志、应用日志、用户行为日志)
      
      #3、爬虫数据
      
      #4、其他事数据
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 数据预处理

      结构化数据、半结构化数据、非结构化数据
      
      大数据青睐什么?结构化数据。
      
      #所谓的结构化数据指的是具有schema约束信息的数据。 通俗理解易于程序处理解读的数据。
      
      半结构化数据(json xml)
      
      #经过预处理把数据变成干净规则统一整洁的结构化数据。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 数据分析

      利用技术和软件 基于指标开展分析。
      
      • 1
    • 数据应用

      分析的结果去哪里?
      数据展现、数据可视化(Data Visualization)
      即席查询
      数据挖掘
      数据接口对外
      
      • 1
      • 2
      • 3
      • 4
      • 5
    1.4、大数据时代

    思考:数据为什么会爆炸?

    • 数据大爆炸和面临的挑战
      • 挑战1:海量数据如何存储?
      • 挑战2:海量数据如何高效计算?
    • 大数据5V特点
    • 大数据应用场景
    1.5、分布式、集群
    • 共同点:多台机器 不是单机的

    • 不同点:

      • 集群:每台机器上的服务是一样的。
      • 分别苏:每台集群上的服务、组件是不一样的。
    • 提醒:口语上,经常会混淆二者概念。都是汲取两者的共同点

      搭建一个分布式hadoop集群。  多台机器部署不是单机部署
      
      • 1
    • 数据大爆炸和面临的挑战解决方案

      • 如何存储海量数据?存储得下。------>分布式存储
      • 如何计算海量数据?高效计算。------->分布式计算
    • 大数据、云计算

      #大数据侧重于海量数据的分析。
      
      #云计算侧重于硬件资源的虚拟机技术。云cloud. 阿里云服务器。vmware。
      公有云:把云资源当做产品卖。
      私有云:自己公司内部搭建云服务器。
      混合云:结合上面两点。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    二、Apache Zookeeper
    2.1、zookeeper概念

    提示:学习任何一款软件框架,我们都需要首先搞清楚几个问题:

    ​ 这个软件是什么?(定位问题)

    ​ 这个软件能用来干什么?

    ​ 这个软件怎么用?

    ​ 这个软件有什么特性和优缺点?

    • 是一个分布式的协调服务软件(distributed coordination)。
    分布式:多台机器的环境。
    
    协调服务:在分布式环境下,如何控制大家有序的去做某件事。
    	顺序
    	一致
    	共同
    	共享
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • zookeeper的本质:分布式的小文件存储系统

      • 存储系统:存储数据、存储文件 目录树结构
      • 小文件:上面存储的数据有大小限制
      • 分布式:可以部署在多台机器上运行,对比单机来理解。
      • 问题:zk这个存储系统和我们常见的存储系统不一样。基于这些不一样产生了很多应用。
    • zookeeper是一个标准的主从架构集群。

      主角色
      从角色
      
      主从各司其职 共同配合 对外提供服务。
      
      • 1
      • 2
      • 3
      • 4
    2.2、zookeeper最重要的特性:全局数据一致性

    事务(transaction):通俗理解 多个操作组成一个事务,要么一起成功,要么一起失败,不会存在中间的状态。如果中间失败了要进行回滚操作。

    2.3、zookeeper集群角色

    zk是标准的主从架构,只不过为了扩大集群的读写能力,同时又不增加选举复杂度,又提供了观察者角色。

    • 主角色 leader

      事务性请求的唯一调度和处理者
      
      • 1
    • 从角色 follower

      处理非事务性操作  转发事务性操作给leader
      参与zk内部选举机制
      
      • 1
      • 2
    • 观察者角色 Observer

      处理非事务性操作  转发事务性操作给leader
      不参与zk内部选举机制
      
      通俗话:是一群被剥夺政治权利终身的follower。
      
      • 1
      • 2
      • 3
      • 4

    2.4、Zookeeper集群的搭建
    • zk集群在搭建部署的时候,通常选择==2n+1==奇数台。底层 Paxos 算法支持(过半成功)。

    • zk部署之前,保证服务器基础环境正常、JDK成功安装

      scp -r /export/server/jdk1.8.0_65/ root@node3:/export/server/
      
      scp /etc/profile root@node2:/etc/
      source /etc/profile
      
      • 1
      • 2
      • 3
      • 4
      • 服务器基础环境

        IP
        主机名
        hosts映射
        防火墙关闭
        时间同步
        ssh免密登录
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • JDK环境

        jdk1.8
        配置好环境变量
        
        • 1
        • 2
    • zk具体安装部署(选择node1安装 scp给其他节点)

      • 安装包

        zookeeper-3.4.6.tar.gz
        
        • 1
      • 上传解压重命名

        cd /export/server
        
        tar zxvf zookeeper-3.4.6.tar.gz
        mv zookeeper-3.4.6/ zookeeper
        
        • 1
        • 2
        • 3
        • 4
      • 修改配置文件

        • 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
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
        • 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
          
          • 1
          • 2
          • 3
          • 4
      • 把安装包同步到其他节点上

        cd /export/server
        scp -r zookeeper/ node2:$PWD
        scp -r zookeeper/ node3:$PWD
        
        • 1
        • 2
        • 3
      • 创建其他机器上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 
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 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进程
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
      • 扩展:编写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
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
        • 一键启动脚本

          [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
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
        • 注意:关闭java进程时候 根据进程号 直接杀死即可就可以关闭。启动java进程的时候 需要JDK。

        • shell程序ssh登录的时候不会自动加载/etc/profile 需要shell程序中自己加载。

      • 作业:尝试使用一个脚本 实现zookeeper的启动、关闭、状态查看。


    2.5、Zookeeper的数据模型
    • zk的操作

      • 第一种客户端:自带shell客户端

        /export/server/zookeeper/bin/zkCli.sh -server ip
        
        #如果不加-server 参数 默认去连接本机的zk服务 localhost:2181
        #如果指定-server 参数 就去连接指定机器上的zk服务
        
        
        #退出客户端端 ctrl+c
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      
      
      • 1
    • 基本操作

      • 创建

        • 查看

          [zk: node2(CONNECTED) 28] ls /itcast   #查看指定路径下有哪些节点
          [aaa0000000000, bbbb0000000002, aaa0000000001]
          [zk: node2(CONNECTED) 29] get /
          
          zookeeper   itcast
          [zk: node2(CONNECTED) 29] get /itcast  #获取znode的数据和stat属性信息
          1111
          cZxid = 0x200000003   #创建事务ID
          ctime = Fri May 21 16:20:37 CST 2021 #创建的时间
          mZxid = 0x200000003   #上次修改时事务ID
          mtime = Fri May 21 16:20:37 CST 2021  #上次修改的时间
          pZxid = 0x200000009
          cversion = 3
          dataVersion = 0  #数据版本号  只要有变化 就自动+1
          aclVersion = 0
          ephemeralOwner = 0x0   #如果为0 表示永久节点 如果是sessionID数字 表示临时节点
          dataLength = 4   #数据长度
          numChildren = 3  #子节点个数
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
        - 更新节点
        
        
        • 1
        • 2

        set path data

        - 删除节点
        
          ```shell
          [zk: node2(CONNECTED) 43] ls /itcast
          [aaa0000000000, bbbb0000000002, aaa0000000001]
          [zk: node2(CONNECTED) 44] delete /itcast/bbbb0000000002
          [zk: node2(CONNECTED) 45] delete /itcast               
        Node not empty: /itcast
          [zk: node2(CONNECTED) 46] rmr /itcast  #递归删除
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
      • quota限制 软性限制

        • 限制某个节点下面可以创建几个子节点 数据大小。

          • 超过限制,zk不会强制禁止操作 而是在日志中给出warn警告提示。

            [zk: node2(CONNECTED) 47] create /itheima 111
            Created /itheima
            [zk: node2(CONNECTED) 49] listquota /itheima   #查看限制
            absolute path is /zookeeper/quota/itheima/zookeeper_limits
            quota for /itheima does not exist.
            
            2021-05-21 16:54:42,697 [myid:3] - WARN  [CommitProcessor:3:DataTree@388] - Quota exceeded: /itheima count=6 limit=3
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7

    2.6、Zookeeper监听机制Watch
    • 监听机制

      • 监听实现需要几步?
      #1、设置监听 
      
      #2、执行监听
      
      #3、事件发生,触发监听 通知给设置监听的   回调callback
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • zk中的监听是什么?

        • 谁监听谁?

          客户端监听zk服务
          
          • 1
        • 监听什么事?

          监听zk上目录树znode的变化情况。 znode增加了 删除了 增加子节点了 不见了
          
          • 1
      • zk中监听实现步骤

        #1、设置监听 然后zk服务执行监听
        ls path [watch]
        	没有watch 没有监听 就是查看目录下子节点个数
        	有watch  有监听  设置监听子节点是否有变化
        get path [watch]
        	监听节点数据是否变化
        	
        e.g: get /itheima  watch	
        #2、触发监听 
        set /itheima 2222  #修改了被监听的节点数据 触发监听
        
        #3、回调通知客户端
        WATCHER::
        
        WatchedEvent state:SyncConnected type:NodeDataChanged path:/itheima
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • zk的监听特性

        • 先注册 再触发

        • 一次性的监听

        • 异步通知

        • 通知是使用event事件来封装的

          state:SyncConnected type:NodeDataChanged path:/itheima
          
          type:发生了什么
          path:哪里发生的
          
          • 1
          • 2
          • 3
          • 4
      • zk中监听类型

        • 连接状态事件监听 系统自动触发 用户如果不关心可以忽略不计
        • 上述所讲的是用户自定义监听 主要监听zk目录树的变化 这类监听必须先注册 再监听。
    • 总结:zk的很多功能都是基于这个特殊文件系统而来的。

      • 特殊1:znode有临时的特性。
      • 特殊2:znode有序列化的特性。顺序
      • 特殊3:zk有监听机制 可以满足客户端去监听zk的变化。
      • 特殊4:在非序列化节点下,路径是唯一的。不能重名。
    2.7、zk典型应用
    • 数据发布与订阅

    • 提供集群选举

    • 分布式锁服务

      • 排他锁

        排他锁(Exclusive Locks),又被称为写锁或独占锁,如果事务T1对数据对象O1加上排他锁,那么整个加锁期间,只允许事务T1对O1进行读取和更新操作,其他任何事务都不能进行读或写。
        
        • 1
      • 共享锁

        共享锁(Shared Locks),又称读锁。如果事务T1对数据对象O1加上了共享锁,那么当前事务只能对O1进行读取操作,其他事务也只能对这个数据对象加共享锁,直到该数据对象上的所有共享锁都释放。
        
        • 1

    今日作业
    #所说的理解指的是 能够使用自己的话术并且不失专业的角度把概念说出来
    
    #大数据导论
    数据分析基本步骤
    离线、实时、机器学习
    分布式、集群
    
    #apache zookeeper
    	理解并自己阐述:
    		协调服务
    		分布式小文件存储系统  
    		全局数据一致性  
    		角色职责 
    		数据模型(znode类型 临时 序列化)
    		监听机制
    	搭建zk集群
        	shell操作
        集合zk特性阐述理解zk软件的应用场景	
    #预习Apache Hadoop 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

  • 相关阅读:
    Win11 U盘驱动异常怎么调整为正常?
    Pandas 数据分析系列1--Series&DataFrame数据结构详解
    如何对珍贵水生物标本提供三维重建,数字化技术助力长江大保护...
    大比拼:讯飞星火大模型将超越ChatGPT?
    C# TCP Server服务端多线程监听RFID读卡器客户端上传的读卡数据
    vue3+vite项目运行报错[plugin vite:dep-pre-bundle]
    计算机毕业设计(附源码)python综合众筹网站
    一分钟带你了解C语言中数据在内存中的存储详解!
    9.axios 拦截器的使用,对config 拦截器做的封装
    图像处理基础(OpenCV)
  • 原文地址:https://blog.csdn.net/qq_45588318/article/details/127590123