`
m635674608
  • 浏览: 5028093 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spark基础与Java Api介绍

 
阅读更多

原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3832405.html 

 

一、Spark简介

  1、什么是Spark

    发源于AMPLab实验室的分布式内存计算平台,它克服了MapReduce在迭代式计算和交互式计算方面的不足。

    相比于MapReduce,Spark能充分利用内存资源提高计算效率。

  2、Spark计算框架

    Driver程序启动很多workers,然后workers在(分布式)文件系统中读取数据后转化为RDD(弹性分布式数据集),最后对RDD在内存中进行缓存和计算

  

        

  3、为什么Spark计算速度快
    (1)内存计算

    (2)优化执行计划

   4、Spark Api语言支持

    (1)Scala

    (2)Java

    (3)Python

  5、怎么运行Spark

    Local本地模式、Spark独立集群、Mesos、Yarn-Standalone、Yarn-Client

 

二、编程模型

  1、RDD(弹性分布式数据集)是什么

    只读的、分块的数据记录集合

    可以通过读取来不同存储类型的数据进行创建、或者通过RDD操作生成(map、filter操作等)

    使用者只能控制RDD的缓存或者分区方式

    RDD的数据可以有多种类型存储方式(可(序列化)存在内存或硬盘中) 

  2、RDD 存储类型 

    RDD可以设置不同类型存储方式,只存硬盘、只存内存等。

    

  3、RDD操作

    Transformation:根据已有RDD创建新的RDD数据集build

    Action:在RDD数据集运行计算后,返回一个值或者将结果写入外部存储
    
 
 4、RDD如何创建
    
   首先创建JavaSparkContext对象实例sc

        JavaSparkContext  sc = new JavaSparkContext("local","SparkTest");

    接受2个参数:

      第一个参数表示运行方式(local、yarn-client、yarn-standalone等)

      第二个参数表示应用名字
 
  直接从集合转化 sc.parallelize(List(1,2,3,4,5,6,7,8,9,10))
  从HDFS文件转化 sc.textFile("hdfs://")
  从本地文件转化 sc.textFile("file:/")
  下面例子中list2就是根据data2List生成的一个RDD
    
  
  根据文件或者集合生成RDD后,接着就可以通过RDD的Transformation操作来完成对数据的各种转化操作
  常用的map、flatMap、filter操作都是对单元素的操作
  常用的groupByKey、join都是对(key、value)类型元素操作
 
  5、RDD操作例子Java Api
  (1)map
    map操作对数据集每行数据执行函数里面操作
    list1数据集("a,b,c,d,e"),("1,2,3,4,5"); 
      

    执行结果:对list1数据集每行数据用","进行切分

      
   (2)flatMap
      flatMap相比于map操作,它对每行数据操作后会生成多行数据,而map操作只会生成一行。
      

      执行结果:对list1数据集每行数据用","进行切分

       

    (3)filter

     filter对每行数据执行过滤操作,返回true则保留,返回false则过滤该行数据

       

       执行结果:过滤list1数据集中包含‘a’字符的行

       

    (4)union

      union操作对两个RDD数据进行合并。与SQL中的union一样

      list2数据集("11,22,33,44,55"),("aa,bb,cc,dd,ee"); 
        
      执行结果:合并list1与list2数据集
        
    (5)groupByKey
      groupByKey对pair中的key进行group by操作
      pair1RDD数据集("a,1"),("b,2"),("a,3"),("b,4")

        

      执行结果:对pair1RDD数据集按key进行group by

       

    (6)reduceByKey

      reduceByKey对pair中的key先进行group by操作,然后根据函数对聚合数据后的数据操作

      

      执行结果:先group by操作后进行concat

        

    (7)mapValues

      mapValues操作对pair中的value部分执行函数里面的操作

        

      执行结果:对pair1RDD中value部分加上test字符串

        

    (8)join

      join与sql中join含义一致,将两个RDD中key一致的进行join连接操作

      pair2RDD数据集("a,11"),("b,22"),("a,13"),("c,4")
      

      执行结果:对pair1RDD与pair2RDD按key进行join

      

    (9)cogroup

      cogroup对两个RDD数据集按key进行group by,并对每个RDD的value进行单独group by

       

       执行结果:对pair1RDD与pair2RDD按key进行cogroup

        

  6、RDD数据如何输出

    使用RDD的Transformation对数据操作后,需要再使用Action操作才能将结果数据输出
    可以分别使用count、collect、save等操作来输出或统计RDD结果
  
  7、RDD Action实例
    
    执行结果:

      count:统计输出数据行数

      

      collect:输出所有输出数据

      

             save:保存输出数据至外部存储

      

  7、WordCount实例                                                                  

  

     执行结果:

    

 

  8、广播变量& 累加器

    Broadcast variables(广播变量) 

      广播变量,类似于hadoop中的distribute cache,将同一份数据分发至每台机器。

    Accumulators(累加器)

      类似于MapReduce中的counter,用于计数
 
 

三、调度机制

  1、DAG Scheduler

    为每个job分割stage,同时会决定最佳路径,并且DAG Scheduler会记录哪个RDD或者stage的数据被checkpoint,从而找到最优调度方案                                         (transformations是延迟执行的原因)

    

  2、DAG Scheduler优化

    单个Stage内Pipeline执行

    基于分区选择合适的join算法最小化shuffle
    重用已经cache过的数据

  3、窄依赖& 宽依赖

    窄依赖:每个子分区只依赖有限数目的父分区 

    宽依赖:每个子分区只依赖所有的父分区

      

  4、Stage

    调度器会在产生宽依赖的地方形成一个stage,同一个stage内的RDD操作会流式执行,不会发生数据迁移。

    

    rdd join操作属于宽依赖,从spark产生的日志可以看出需要分3个stage执行

      

        rdd flatMap、Map操作属于窄依赖,从spark产生的日志可以看出需要分1个stage执行

      

  5、Shuffle

    每个RDD都可以选择Partitioner进行shuffle操作

    任何在两个RDD上的shuffle操作,将选择其中一个RDD的Partitioner作为标准。如果两个RDD都没有设置Partitioner的话,就使用默认的HashPartitioner

    shuffle需要在node之间移动数据,会影响spark执行效率,应该尽量避免RDD操作中发生shuffle。

  

 

 

原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3832405.html 

分享到:
评论

相关推荐

    spark 2.0.1 JavaAPI

    2. **Spark SQL**:Spark SQL是Spark处理结构化数据的模块,它将SQL查询与DataFrame API集成,使用户可以方便地在SQL和DataFrame之间切换。 3. **Spark Streaming**:提供了一个高级抽象,用于处理连续的数据流,...

    spark 2.0 javaAPI

    spark的javaAPI开发文档,只不过是英文版的。没有做翻译工作。希望对下载人员有帮助。

    spark2.1.0 JAVA API

    在Java API方面,Spark提供了丰富的类库,使得开发者能够利用Java语言便捷地构建分布式数据处理应用。本篇文章将深入探讨Spark 2.1.0中的Java API及其关键知识点。 1. **SparkContext**: Spark的核心组件,它是所有...

    spark2.1.0.chm(spark java API)

    二、Spark Java API基础 1. SparkContext:作为Spark程序的入口点,用于连接到Spark集群。创建SparkConf配置对象,然后通过`SparkContext.getOrCreate()`初始化。 2. RDD操作:包括转换(transformations)如`map()`...

    Spark 2.1.0 API(java).chm

    最新版spark2.1.0 java api。如果觉得好,就给个评论,谢谢!!

    Spark 1.0.0 API (java)

    **Spark 1.0.0 API (Java) 深度解析** Spark 是一个快速、通用且可扩展的大数据处理框架,它最初由加州大学伯克利分校AMPLab开发,并随后成为Apache软件基金会的顶级项目。Spark 1.0.0版本是其发展中的一个重要里程...

    javaApi_sparkhiveAPI_hbaseAPI.zip

    本压缩包"javaApi_sparkhiveAPI_hbaseAPI.zip"包含了2019年8月至10月期间针对这些技术的Java版API实现,以及与Spark相关的Hive和HBase API。以下是关于这些技术的详细知识: 1. **Java API for Hive**: - **Hive*...

    Spark2.0.2API java

    Spark 2.0.2 API for Java 是一个用于大数据处理的高级编程接口,它构建在Apache Spark之上,专为Java开发者设计。Spark以其快速、通用和可扩展的特性,在大数据领域备受青睐。在这个版本中,Java开发者可以充分利用...

    java开发spark程序

    本篇文章将深入探讨如何使用Java开发Spark程序,并基于提供的"sparkJava"压缩包文件中的示例代码进行解析。 首先,我们需要理解Spark的核心概念。Spark主要由四个组件构成:Spark Core、Spark SQL、Spark Streaming...

    Spark 1.0.2 API (Java)

    Spark 1.0.2 API 是 Apache Spark 的一个早期版本,专门为Java开发者设计。这个API提供了在Java中使用Spark的强大工具,使得数据处理、分析和并行计算变得更加高效和便捷。Spark作为一个分布式计算框架,其核心特性...

    基于Spark REST Api实现spark的任务创建、查询、终止等+源代码+文档说明

    - 不懂运行,下载完可以私聊问...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    WordCount_Spark!_spark_wordcount_java_

    - 使用`JavaSparkContext`类代替Scala中的`SparkContext`,它提供了与Java API兼容的方法。 - 依赖管理:确保引入Spark的Java库,如`org.apache.spark:spark-core_2.11`和`org.apache.spark:spark-sql_2.11`。 - ...

    Spark高手之路-API编程动手实战

    通过一个完整的具有代表性的Spark项目来贯穿Spark的方方面面,包括项目的架构设计,用的的技术剖析、开发实现、运维等等。

    Spark2.2Doc API 中文参考文档

    Spark 2.2.x Doc API 中文参考文档, Spark Shell 提供了一种简单的方式来学习 Spark API,同时它也是一个强大的交互式数据分析工具。Spark Shell 既支持 Scala(Scala 运行在 Java 虚拟机上,所以可以很方便的引用...

    最新版本Spark2.1.1 java+scala官方API CHM(自己制作,有点小问题)

    最新版本Spark2.1.1 java+scala官方API CHM(自己制作,有点小问题)

    Apache Spark 2.x for Java Developers

    Apache Spark是一个快速、通用的集群计算系统,提供了Java、Scala、Python和R的高级API,使得用户能够快速开发分布式应用。而此书专注于Java开发者,意味着会围绕Java语言的具体使用进行介绍和讲解。 Apache Spark...

    Java操作Spark入门程序

    首先,我们需要理解Java与Spark的结合如何为数据处理提供便利。 一、Java连接Spark 1. **引入依赖**: 要在Java项目中使用Spark,首先需要在`pom.xml`(如果是Maven项目)或构建脚本中添加Spark的Java库依赖。例如...

    Spark Programming Guide - Spark 2.0(Java)

    该指南涵盖了从基础概念到高级技术的广泛话题,适用于想要在Spark 2.0版本上使用Java进行开发的用户。 文档首先介绍了Spark应用的基本架构。每一个Spark应用程序都由一个驱动程序(driver program)组成,它负责...

Global site tag (gtag.js) - Google Analytics