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

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


今日课程学习目标

理解大数据基本概念
掌握数据分析基本步骤、分布式集群概念
理解zookeeper功能与作用
掌握zookeeper架构原理
学会搭建zookeeper集群
掌握shell客户端操作zk
理解zookeeper典型应用

今日课程内容大纲

#大数据导论
	数据与数据分析  
	数据分析作用(商业)
		离线分析
		实时分析
		ML机器学习
	数据分析的基本步骤 (重要)
    大数据时代
    	海量数据处理场景 (重要)
    		如何存储?   分布式存储
    		如何处理?   分布式计算
    	大数据5V特征
        大数据应用
    分布式、集群

#Apache Zookeeper (重要)
	zk概念介绍  分布式协调服务软件
	zk是分布式小文件存储系统
	zk特性:全局数据一致性
	zk角色 主从架构
	zk集群的搭建
	zk的数据模型
	zk的操作
		shell command
	zk watcher监听机制
    zk典型应用场景

一、大数据导论

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成功安装

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

      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程序中自己加载。

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


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

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

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

    • 创建

      • 查看

        [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

      - 删除节点
      
        ```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  #递归删除
      
    • 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
          

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 /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:在非序列化节点下,路径是唯一的。不能重名。
2.7、zk典型应用
  • 数据发布与订阅

  • 提供集群选举

  • 分布式锁服务

    • 排他锁

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

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

今日作业

#所说的理解指的是 能够使用自己的话术并且不失专业的角度把概念说出来

#大数据导论
数据分析基本步骤
离线、实时、机器学习
分布式、集群

#apache zookeeper
	理解并自己阐述:
		协调服务
		分布式小文件存储系统  
		全局数据一致性  
		角色职责 
		数据模型(znode类型 临时 序列化)
		监听机制
	搭建zk集群
    	shell操作
    集合zk特性阐述理解zk软件的应用场景	
#预习Apache Hadoop 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Hadoop是一个开源的分布式计算框架,主要用于处理大规模数据集。它的核心是HDFS(Hadoop分布式文件系统)和MapReduce计算模型。 Spark是一个快速、通用的大数据处理引擎,可以在内存中进行数据处理,比Hadoop MapReduce更快。它支持多种数据源,包括HDFS、HBase、Cassandra等。 Storm是一个分布式实时计算系统,可以处理实时数据流。它的核心是Storm集群,可以在多个节点上运行,实现高可用性和可扩展性。 Flink是一个分布式流处理框架,可以处理实时数据流和批处理数据。它的核心是DataStream API,可以进行流式计算和窗口计算。 Samza是一个分布式流处理框架,可以处理实时数据流。它的核心是Kafka和YARN,可以实现高可用性和可扩展性。 ### 回答2: 大数据框架是指一组用于处理大规模数据的软件工具。随着大数据及其分析应用的不断增长,数十个大数据框架已经随着时间而推出,其中包括hadoop、spark、storm、flink、samza等。下面将对这几种大数据框架进行详细介绍。 1. Hadoop Hadoop是一个在大数据应用领域最流行的框架。它是以Java语言开发的,是一个分布式的计算平台。通过它,用户能够处理超过普通计算机可以承受的数据量。Hadoop集群由多个计算机组成,在不同的计算机上存储和计算数据。Hadoop的主要组件包括HDFS(分布式文件系统),MapReduce计算模型(可以实现大规模数据的并行处理)。 2. Spark Spark是一个基于内存的计算框架,可以实现大数据的快速处理。与Hadoop相比,Spark运行速度更快,因为它可以在内存中执行计算任务。Spark可以通过Java、Scala和Python编写,还支持Spark SQL(基于SQL的查询),Spark Streaming(处理实时数据流)、MLlib(机器学习库)等功能模块。 3. Storm Storm也是一个实时数据处理框架。它能够实现一种“实时数据流”的处理模式,这在需要对流式数据进行实时处理和计算的场景中非常有用。Storm是一个分布式的框架,包括多个节点,支持高可靠性、水平扩展、非常灵活的拓扑连接等功能。 4. Flink Flink是一个高度可扩展、分布式的计算框架。它支持流式处理和批处理。通过内存进行数据计算,速度更快,同时也支持实时流式数据处理。Flink将传统的批量处理和流式处理集成到了一个框架中,将批量计算看成一种特殊形式的流式计算。 5. Samza Samza是一个其他不同大数据框架的组件,它是一个分布式流处理器,可以处理大量的流数据。它可以作为批处理系统的组件来使用,提供可靠的消息传递、基于字符串的状态存储、多维度流处理和都市需求等功能。Samza主要用于大规模流式数据的分析和处理,通常和其他的大数据处理框架一起使用。 总体来说,以上这几种大数据框架适用于不同的场景和需求。在实际应用时,需要根据具体情况进行选择和使用,以达到最佳的效果和效率。 ### 回答3: 大数据框架是当今大数据技术领域中越来越重要的一部分。在众多大数据框架中,Hadoop、Spark、Storm、Flink和Samza是其中最常用的框架。 Hadoop是由Apache基金会开发的开源框架,主要用于存储和处理大数据。它的核心组件包括HDFS和MapReduce。HDFS是一个分布式文件系统,通常用于存储大数据,而MapReduce是一种分布式数据处理模型,用于对大数据进行批处理。 Spark是另一个Apache开源项目,也是用于大数据处理的框架。与Hadoop不同的是,Spark使用内存计算,这意味着它可以比Hadoop更快地处理大量数据。Spark支持多种编程语言,包括Java、Scala和Python,也支持SQL查询和图形计算。 Storm是另一个Apache开源项目,主要用于流式数据处理。与Hadoop和Spark不同的是,Storm能够实时处理流数据,而不需要等待离线批处理。Storm支持容错和高可用性,并支持多种编程语言,包括Java、Scala和Clojure。 Flink是由Apache开发的开源流处理框架。与Storm类似,Flink也可以进行实时数据处理,并支持批处理模式。Flink的主要特点是低延迟和高吞吐量,同时支持复杂事件处理和机器学习。 最后,Samza也是另一个Apache开源框架,主要用于流式数据处理。与Storm和Flink不同的是,Samza的焦点是可扩展性和容错性。Samza的主要优点之一是它与Kafka集成良好,Kafka是一个分布式消息队列。 总之,Hadoop、Spark、Storm、Flink和Samza都是在大数据领域中广泛应用的重要框架。每个框架都有自己的特点和优劣,应根据具体的大数据需求和场景进行选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆猛的呆呆小哥

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值