hadoop离线day01--大数据导读Apache Zookeeper

Posted Vics异地我就

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop离线day01--大数据导读Apache Zookeeper相关的知识,希望对你有一定的参考价值。

hadoop离线day01--大数据导读、Apache Zookeeper

大数据导论

说明关于安装文件等~ 由于是新手还找不到哪里上传~ 有需要的同学可以私信我,然后我传给你们。

 

  • 数据如何来的

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

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

    数据分析的结果给企业的决策提供支撑  支持决策。
    数据仓库的出现也是集成的数据分析平台 分析的结果支撑决策。
  • 数据分析方向

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

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

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

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

    • 明确分析的目的和思路

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

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

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

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

      分析的结果去哪里?
      数据展现、数据可视化(Data Visualization)
      即席查询
      数据挖掘
      数据接口对外
  • 科技发展带来的挑战

    • 挑战1:网站架构变迁 单机---->==分布式==

      #分布式:
      一个服务或者硬件分为多个组件,分别运行在不同的机器上,彼此通过网络通信协调,共同对外提供服务。
      每个机器上组件是不一样的,但是对于用户来说,感觉就像在访问一台机器一样。
    • 分布式、集群

      • 共同点:==多台机器== 不是单机的

      • 不同点:

        • 集群:每台机器上的服务是一样的。

        • 分别苏:每台集群上的服务、组件是不一样的。

      • 提醒:==口语上,经常会混淆二者概念。都是汲取两者的共同点==。

        搭建一个分布式hadoop集群。  多台机器部署不是单机部署
    • 挑战2:海量数据处理场景?

      • 如何存储海量数据?存储得下。------>==分布式存储==。

      • 如何计算海量数据?高效计算。------->==分布式计算==。

  • 大数据、云计算

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

Apache Zookeeper

  • zookeeper概念

    • 是一个分布式的协调服务软件(distributed ==coordination==)。

    分布式:多台机器的环境。
    ​
    协调服务:在分布式环境下,如何控制大家有序的去做某件事。
        顺序
        一致
        共同
        共享
  • zookeeper的本质:==分布式的小文件存储系统==

    • 存储系统:存储数据、存储文件 目录树结构

    • 小文件:上面存储的数据有大小限制

    • 分布式:可以部署在多台机器上运行,对比单机来理解。

    • 问题:zk这个存储系统和我们常见的存储系统不一样。基于这些不一样产生了很多应用。

  • zookeeper是一个标准的==主从架构==集群。

    主角色
    从角色
    ​
    主从各司其职 共同配合 对外提供服务。
  • zookeeper集群角色

    • 主角色 ==leader==

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

      1. 处理客户端非事务请求,以及转发事务请求给leader服务器
      2. 参与事务请求提议(proposal)的投票(客户端的一个事务请求,需要半数服务器投票通过以后才能通知leader commit; leader会发起一个提案,要求follower投票)
      3. 参与leader选举的投票
    • 观察者角色 ==Observer==

      处理非事务性操作  转发事务性操作给leader
      不参与zk内部选举机制
      观察zookeeper集群中最新状态的变化并将这些状态同步到observer服务器上
      增加observer不影响集群中事务处理能力,同时还能提升集群的非事务处理能力
      通俗话:是一群被剥夺政治权利终身的follower。

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
        #文件最后添加
        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进程
      • 本质:在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程序中自己加载。

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


Zookeeper的数据模型

  • 见课堂画图

  • zk的操作

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

      /export/server/zookeeper/bin/zkCli.sh -server ip
      ​
      #如果不加-server 参数 默认去连接本机的zk服务 localhost:2181
      #如果指定-server 参数 就去连接指定机器上的zk服务
    • 基本操作

      • 创建

      • 查看

        [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  #子节点个数
      • 更新节点

        set path data
        
        
        
      • 删除节点

        [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  #递归删除
      • 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

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 /itheima  watch    
      #2、触发监听 
      set /itheima 2222  #修改了被监听的节点数据 触发监听
      ​
      #3、回调通知客户端
      WATCHER::
      ​
      WatchedEvent state:SyncConnected type:NodeDataChanged path:/itheima
    • zk的监听特性

      • ==先注册 再触发==

      • ==一次性的监听==

      • ==异步通知==

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

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

      • 连接状态事件监听 系统自动触发 用户如果不关心可以忽略不计

      • 上述所讲的是用户自定义监听 主要监听zk目录树的变化 这类监听必须先注册 再监听。

  • 总结:zk的很多功能都是基于这个特殊文件系统而来的。

    • 特殊1:znode有临时的特性。

    • 特殊2:znode有序列化的特性。顺序

    • 特殊3:zk有监听机制 可以满足客户端去监听zk的变化。

    • 特殊4:在非序列化节点下,路径是唯一的。不能重名。


Zookeeper API

  • 开发环境

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
    </dependency>
  • 源码:http://archive.apache.org/dist/

  • zk内部选举机制

    zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜出的逻辑。
    
    
    

以上是关于hadoop离线day01--大数据导读Apache Zookeeper的主要内容,如果未能解决你的问题,请参考以下文章

hadoop离线day08--数据仓库Apache Hive

hadoop离线day04--Hadoop MapReduce

hadoop离线day07--Hadoop YARNHA机制

hadoop离线day07--Hadoop YARNHA机制

hadoop离线day09--Apache Hive

hadoop离线day09--Apache Hive