zoukankan      html  css  js  c++  java
  • Spack学习2


    https://blog.csdn.net/qq_32023541/article/details/79127882
    让我们对kafka有个一初步的了解。其实吧,我们知道,数据可以从某个角度分成两类,第一类是批量数据,也就是已经放好的数据,打个比方,就像池塘的水,不会流动,你想怎么计算就怎么计算,你可以统计一下水量,也可以将它们做别的用途,但水就那么多放在那里,你可以把它放在任何一个水库慢慢用。另一类就是流式数据,就是会实时变动的数据,也打个比方,就像河流的水,它不是静止不动的,它是一直在流动的,每时每刻水都在发生改变,也就是你无法像之前一样,把它放在任何水库慢慢用,你只能取出一部分用,当你用完,新的水又流进来了。
    kafka就是其中的一条河流,当然不只kafka而已,就像世界上存在很多河流,kafka只是其中之一。kafka是根据topic 来存储数据的,每个topic里面根据不同的偏移量来定位数据。比如下面的代码就是scala语言编写的往topic中发送数据,我们称之为制造者


    一。
    spark 是一个快速且通用的集群计算平台

    基于内存的运算

    通用性;降低维护成本
    Spack的设计容纳了其它分布式系统拥有的功能
    批处理,迭代式计算,交互查询和流处理等

    spark是高度开放的;Python Java scala haddoop
    二。
    spark core:

        包含spark的基本功能,任务调度,内存管理,容错机制

        内部定义了RDDs,弹性分布式数据集

    spark sql:

        是spark处理结构化数据的库

    spark streaming:

        实时数据流处理组件,类似Storm
        Spaek Streaming提供了API来提供操作实时流数据。
        应用场景,企业中用来从Kafka接收数据做实时统计。

    milb:

        包含通用机器学习功能的包,分类,聚类,回归

        支持起集群上的横向扩展
        机器学习

    graphx:

        处理图的库,并进行图的并行计算

    cluster managers:  

        集群管理,Spark自带一个集群管理是单独调度器。
        常见的集群管理包括Hadoop YARN,Apache Mesos


    紧密集成的优点

    1.spark底层优化了,基于spark的底层组件也会得到相应的优化。

    2.紧密继承节省了各个组价组合使用时的部署,测试等时间

    3.向spark增加新的组件时,其他组件,可立刻享用新组建的功能。
    三。
    spark与Hadoop的比较

        Hadoop的应用场景:离线处理,对时效性要求不高(数据储存在硬盘中,执行时间一般在几分钟,几个小时)

        spark的应用场景:对时效性要求高,机器学习领域(spark中间的数据尽量储存在内存中大大加快了Spark任务的计算速度一般几秒钟或者几分钟,在迭代方面很适合)

    Doug Cutting的观点
    这是生态系统,每个组件都有其作用,各善其职即可
    Spark不具有HDFS的存储能力,要借助HDFS等持久化数据
    大数据将会孕育更多的新技术

    四。Spark的安装
    spark的运行环境:

        基于Scala ,运行在JVM,运行环境Java7+

    spark下载:

        搭建spark不需要Hadoop,下载后解压

        虚拟机(Linux)联网状态下,通过  wget+下载链接

        Linux解压命令  tar -zxvf spark.....

    spark目录

        bin目录-可执行文件

        core,streaming主要包含组件源代码

        examples 包含单机例子

    spark的shell:

        梳理分布在集群上的数据

        可以将数据加载到节点的内存中,因此分布式处理可在秒级完成。

        快速迭代计算,实时查询、分析

        spark提供了Python shell和Scala shell

    Scala shell

        /bin/spark-shell

     3-2开发第一个Spark程序
        创建一个Spark Context
        加载程序
        把每一行分割成单词
        转换成pairs 并且计数

    打包:
      配置jar包
      build
    开发完spark程序后,启动集群:
    启动master  ./sbin/start-master.sh
    启动worker  ./bin/spark-class
    提交作业    ./bin/spark-submit


    RDDs介绍
    Driver program:(程序入口的地方)
    包含程序的main()方法,RDDs的定义和操作
    它管理很多节点,我们称为executors
    SparkContext:
    Driver programs 通过SparkContext 对象访问 Spark。
    SparkContext对象代表和一个集群的连接。
    在Shell中SparkContext 自动创建好了,就是sc
    RDDs:
    Resilient distributed datasets(单性分布式数据集,简写RDDs)。
    这些RDDs,并行的分布在整个集群中。
    RDDs是Spark分发数据和计算的基础抽象类。
    一个RDD是一个不可改变的分布式集合对象。
    Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。
    一个RDD内部由许多partitions(分片)组成。
    分片计算完之后在进行汇总
    RDDs的创建方法:
    把一个存在的集合传给SparkContext的parallelize)方法,测试用
    val rdd =sc.parallelize(Array(1,2,2,4),4)
    第1个参数:待并行化处理的集合,第2个参数:分区个数
    RDDs的创建方法:
    加载外部数据集。
    val rddText=sc.textFile("helloSpark.txt")

    Scala的匿名函数和类型推断:
    lines.filter(line=>line.contains("world"))
    定义一个匿名函数,接收一个参数line,
    使用line这个String类型变量上的contains()方法
    line的类型不需指定,能够推断出来


    Map()
    Filter()
    Flatmap()
    集合运算
    reduce():
    接收一个函数,作用在RDD两个类型相同的元素上,返回新元素。
    可以实现,RDD中元素的累加,计数,和其它类型的聚集操作。
    reduce():
    接收一个函数,作用在RDD两个类型相同的元素上,返回新元素。
    可以实现,RDD中元素的累加,计数,和其它类型的聚集操作。
    val sum=rdd.reduce(x,y)=>x+y)
    take(n):
    返回RDD的n个元素(同时尝试访问最少的partitions)。
    返回结果是无序的,测试使用。
    Collect():
    遍历整个RDD,向driver program返回RDD的内容
    需要单机内存能够容纳下(因为数据要拷贝给driver,测试使用)
    大数据的时候,使用saveAs TextFile() action等。
    foreach():
    计算RDD中的每个元素,但不返回到本地。
    可以配合println()友好的打印出数据。

    RDDs的特性

    延迟计算(Lazy Evaluation):
    Spark对RDDs的计算是,他们第一次使用action操作的时候
    这种方式在处理大数据的时候特别有用,可以减少数据的传输
    Spark 内部记录metadata 表名transformations操作已经被响应了
    加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去

    RDD.persist0:
    默认每次在RDDs上面进行action操作时,Spark都重新计算RDDs
    如果想重复利用一个RDD,可以使用RDD.persist)
    unpersist()方法从缓存中移除

    combineByKey0:
    (createCombiner,merge Value,mergeCombiners,partitioner)
    最常用的基于key的聚合函数,返回的类型可以与输入类型不一样
    许多基于key的聚合函数都用到了它,像groupByKey0
     combineByKey0:
    遍历partition中的元素,元素的key,要么之前见过的,要么不是。
    如果是新元素,使用我们提供的createCombiner)函数
    如果是这个partition中已经存在的key,就会使用mergeValue()函数
    合计每个partition的结果的时候,使用mergeCombiners0函数

    kafka(流处理平台)
    生活中无时无刻都在生产着数据,数据产生到存档会产生日志(存储模式)
    有了数据,就有了数据的生产者,同时只有数据流动起来才能产生真正的价值
    于是就有了数据流,既然有了数据流就有了数据的消费者。(消费模式)

    特性:
    1它是可以发布,订阅,记录数据的流 类似一个消息队列
    2它是一个数据流存储的一个平台 并且有错误容忍的
    3数据产生的时候就进行消息处理
    应用场景
    1.构建实时数据流管道  处理的数据有很强的数据依赖关系的时候(数据的传输上)
    2.构建一个实时的数据处理应用程序 它能转换或者响应这个数据流 (数据的处理上)
    Kafka基本概念
    ◆Producer:消息和数据的生产者,向Kafka的一个topic发布消
    息的进程/代码/服务
    ·Consumer:消息和数据的消费者,订阅数据(Topic)并且处
    理其发布的消息的进程/代码/服务
    ◆Consumer Group:逻辑概念,对于同一个topic,会广播给不
    同的group,一个group中,只有一个consumer可以消费该
    消息
    Kafka基本概念
    ◆Broker:物理概念,Kafka集群中的每个Kafka节点
    ◆Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离
    ·Partition:物理概念,Kafka下数据存储的基本单元。一个Topic
    数据,会被分散存储到多个Partition,每一个Partition是有序

    Kafka基本概念
    Replication:同一个Partition可能会有多个Replica,多个
    Replica之间数据是一样的
    Replication Leader:一个Partition的多个Replica上,需要一
    个Leader负责该Partition上与Producer和Consumer交互
    ReplicaManager:负责管理当前broker所有分区和副本的信
    息,处理KafkaController发起的一些请求,副本状态的切换
    、添加/读取消息等

    Kafka的基本结构

    producer Api

    Consumer Api

    Steams Api

    Connectors Api 

    Kafka特点

    1多分区

    2多副本

    3多订阅者

    4基于ZooKeeper 

    高性能

    1高吞吐量

    2低延迟

    3高并发

    4时间复杂度为O(1) 

    持久化与持久性

    1数据可持久化

    2容错性

    3支持在线水平扩展

    4消息自动平衡 

    Kafka的应用场景;

    1消息队列

    2行为跟踪

    3元信息监控

    4日志处理

    5 流处理

    6事件源

    7持久性文件

  • 相关阅读:
    关于Netty4.x中文教程系列更新进度的说明和道歉
    Netty4.x中文教程系列(四) ChannelHandler
    Netty4.x中文教程系列(三) Hello World !详解
    Netty4.x中文教程系列(二) Hello World !
    Netty4.x中文教程系列(一) 目录及概述
    【推荐】HTML5 UI框架 推荐
    【转载】【JQuery学习】jQuery插件开发
    前端与后端的数据交互(jquery ajax+python flask)
    【JS教程32】ajax
    【JS教程31】json
  • 原文地址:https://www.cnblogs.com/songlin123/p/10946845.html
Copyright © 2011-2022 走看看