原创文章,转载请注明: 转载自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基础与Java Api介绍的更多相关文章

  1. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  2. HDFS基础和java api操作

    1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS ...

  3. spark 快速入门 java API

    Spark的核心就是RDD,对SPARK的使用入门也就是对RDD的使用,包括action和transformation 对于Java的开发者,单单看文档根本是没有办法理解每个API的作用的,所以每个S ...

  4. HBase总结(十一)hbase Java API 介绍及使用示例

    几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  5. hbase Java API 介绍及使用示例

    几个相关类与HBase数据模型之间的对应关系  java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) ...

  6. HDFS JAVA API介绍

    注:在工程pom.xml 所在目录,cmd中运行 mvn package ,打包可能会有两个jar,名字较长的是包含所有依赖的重量级的jar,可以在linux中使用 java -cp 命令来跑.名字较 ...

  7. HBase总结(十一)hbase Java API 介绍及使用演示样例

    几个相关类与HBase数据模型之间的相应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  8. 第一阶段:Java基础 1.JAVA开发介绍---6. Java基本数据类型

    Java 的两大数据类型: 内置数据类型(基本数据类型) 引用数据类型 本数据类型: Java语言提供了八种基本类型.六种数字类型,一种字符类型,还有一种布尔型. byte,short,int,lon ...

  9. 第一阶段:Java基础 1.JAVA开发介绍---5. Java的注释,标识符、标识符的命名规范

    1.java注释 java中有三种注释方式,单行注释,多行注释,文档注释. (1).单行注释:快捷键Ctrl+/再次按撤销注释, (2).多行注释:Ctrl+shift+/ 撤销Ctrl+shift+ ...

随机推荐

  1. Apple Watch应用开发经验谈:我遇到的那些坑

    本文作者张忠良是滴答清单Apple Watch版应用的开发工程师,他用了一周的时间使用纯Objective-C语言完成了Apple Watch版滴答清单应用的开发工作.在这里,他从开发角度阐述了个人对 ...

  2. UIView的创建与内存管理

    学习过程中遇到一些问题,现在记录下来,以后忘记以便翻看. 创建工程的步骤: xcode的ARC改为MRC .h文件中的strong改为retain .m文件中加入dealloc方法 .m文件中_win ...

  3. Visio编辑数据库模型列

    Visio编辑数据库模型列:邮件group->Open实体,进入实体属性编辑界面,按回车可以添加.

  4. FPGA中如何实现除法?

    摘自:<xilinx FPGA 开发实用教程> 1)被除数重复的减去除数,直到检测到余数小于除数为止,优点:对于除数与被除数相差较小的情况下合适 2)通过如下图片方式实现+状态机.优点:挺 ...

  5. 33.allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转)

    Autosilk top, Silkscreen top 和Assembly top Autosilk top:最后出gerber的时候,自动生成的丝印层.会自动调整丝印位置,以及碰到阻焊开窗的地方, ...

  6. ActiveX控件的基本操作方法以及如何在VS2010下使用控件

    在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...

  7. spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

    1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK

  8. ##常用效果css##

    1    绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块.元素被设置成,absolute,原有的位置会被占用,设为 relative原位置 ...

  9. Shade勒索病毒 中敲诈病毒解密 如 issbakev9_Data.MDF.id-A1E.f_tactics@aol.com.xtbl 解决方法

    [客户名称]:福建福州市某烘焙连锁企业 [软件名称]:思迅烘焙之星V9总部 [数据库版本]:MS SQL server 2000  [数据库大小]:4.94GB [问题描述]:由于客户服务器安全层薄弱 ...

  10. SQL Server Reporting Services – Insufficient Rights Error

    http://www.sql-server-performance.com/2011/security-ssrs-reporting-error/ SQL Server Reporting Servi ...