Spark第一天

MapReduce局限性:
    1、表达能力有限,仅支持 Map 和 Reduce 两种操作。
    2、复杂,学习和使用成本高。
    3、磁盘I/O开销大,每个步骤都要序列化到磁盘。
    4、计算延迟高。

Spark定义:
    专为大规模数据处理而设计的快速通用的 计算 引擎,并形成一个高速
        发展应用广泛的生态系统。

架构图角色
    Application
    Driver
    Cluster Manager(hadoop生态用的yarn)
    work node
    executor
    Task
      shufflemaptask
      resulttask

Spark优点:
    1、内存计算,效率高
    2、易用性:跨语言
    3、通用性:可以使用SQL、DataFrames、MLib、GraphX、Spark、Streaming库。
    4、支持多种资源管理器:Hadoop YARN,Apache Mesos,及自带的独立集群管理器
Spark应用场景:
    1、需要多次操作特定数据集的应用场合。
    2、数据量不是特别大,但要求实时统计分析。
    3、不适合增量修改的应用模型,如Web服务的存储、爬虫

Spark生态圈:
    1、Spark Core:包含 Spark 的基本功能;尤其是定义 RDD(弹性
      分布式数据集)的 API、操作以及这两者上的动作。其他 Spark
      的库都是构建在 RDD 和 Spark Core 之上的。
    2、Spark SQL:提供通过hive与Spark交互的API。
    3、Spark Streaming:处理和控制实时数据。
    4、MLib:机器学习算法库。
    5、GraphX:控制图、并行图操作和机算一组算法和工具的集合。
    6、SparkR:提供从R中使用Spark的轻量级前端的包。(不多介绍)

Spark15个核心概念:
    1、RDD(弹性分布式数据集):
        1、只读、可分区的分布式数据集合
        2、一个RDD包含多个分区Partition
    2、Partition(分区)
        1、机算是以partition为单位进行
        2、一个Partition交给一个Task计算处理
    3、算子(op)
        1、对任何函数进行某一项操作都是一个算子,即为映射、关系、变换。
        2、MapReduce算子就是分为Map和Reduce算子,导致灵活性差。
        3、Spark算子分为Transformation和Action类,合计80多个。
    4、Transformation类算子
        操作是延迟机算的,即一个RDD转换生成另一个RDD的转换操作需要等到Action操作才运行。
        细分为:Value数据类型和Key-Value数据类型的Transformation算子
    5、Action类算子
        会触发Spark提交作业(job),并将数据输出Spark系统。
    6、窄依赖
        一个父RDD的每一个分区只被子RDD一个分区使用,即一对一
    7、宽依赖
        一个父RDD的每个分区被子RDD多个分区使用,即一对多
    8、Application
        指用户编写的Spark应用程序,包含一个Driver功能的代码和分布在集群中多个节点上
          运行的Executor代码
        一般指整个Spark项目从开发、测试、部署、运行的全部。
    9、Driver
        运行main函数并创建SparkContext的程序
        驱动程序
    10、Cluster Manager
        集群的资源管理器,在集群上获取资源的服务
    11、WorkerNode
        集群中任何一个可以运行Spark应用代码的节点
        物理机器节点,可以启动Executor进程
    12、Executor
        负责运行Task,将数据存在内存或磁盘上,每个Application都有各自专享的一批Executor
    13、Task
        分配到executor的基本工作单元,执行实际的机算任务
        Task分为两类:
            1、ShuffleMapTask:由Transformation操作组成,输出下阶段任务
            2、ResultTask:为Action操作触发的job作业的最后一个阶段任务,
                输出结果为Application最终的输出或存储结果
    14、Job(作业)
        每个action的机算都会生成一个job
        用户提交的job会提交给DAGScheduler(Job 调度器),Job 会被分解
          成 Stage 去执行,每个 Stage 由一组相同计算规则的 Task 组成
    15、Stage(阶段)
        是job组成部分,一个job包含一个或多个Stage
        job以Shuffle为依据分割成Stage
        每个job会被拆分很多组Task,每组任务被称为Stage

运行模式:
    local:本地模式     (常用)
    standalone(client):客户端模式,运行后直接看到结果的输出
    standalone(cluster):提交后客户端退出,整个任务在集群上运行,并输出结果
    spark on yarn(yarn-client):运行在集群上,driver运行在客户端中    (常用)
    spark on yarn(yarn-cluster):运行在集群上,driver运行在集群的am中(日志要在集群上看) (常用)

用户交互方式:
    1、spark-shell:spark  命令行  方式来操作 spark 作业。
        多用于简单的学习、测试、简易作业操作。
    2、spark-submit:通过程序  脚本  ,提交相关的代码、依赖等来操作 spark 作业。
        最多见的提交任务的交互方式,简单易用、参数齐全。
    3、spark-sql:通过 sql 的方式操作 spark 作业。
        sql相关的学习、测试、生产环境研发均可以使用该直接操作交互方式。
    4、spark-class:最低层的调用方式,其它调用方式多是最终转化到该方式中去提交。
        直接使用较少                        (用的少)
    5、sparkR,sparkPython:通过其它非 java、非 scala 语言直接操作 spark 作业的方式。
        R、python 语言使用者的交互方式。     (用的少)

重要交互方式使用介绍
    重点为spark-shell,spark-submit 两大方式

    1、spark-shell:交互式数据操作与分析工具
        启动:spark-shell --master local[2]
        帮助文档:spark-shell --help
        1.构建列表:var list = Seq(1,2,3,4,5)
          打印每一项:list.foreach(println) 或者 list.foreach(item => println(item))
        2.构建rdd并操作:
            var rdd = sc.parallelize(Seq(1,2,3,4,5))
            一些算子:
            计数:rdd.count()
            转换:rdd.map(item=>item*2).collect()       map(_*2) : 每一项都乘以2
            过滤:rdd.filter(item=>item > 3).collect()  filter(_>3)
            求最大值(求和类似):rdd.reduce((a,b)=>if(a>b) a else b)
            统计文档里每个单词出现频率并排序:(item._2指元组中第二个,true为正序,false为倒序)
                文档名.map(item=>(item,1)).reduceByKey((a,b)=>a+b).sortBy(item=>item._2,false).collect.foreach(println)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值