概述

Spark 应用由driver program 组成,driver program运行用户的主函数,在集群内并行执行各种操作

主要抽象RDD: 

  spark提供RDD,是贯穿整个集群中所有节点的分区元素的集合,能够被并行操作。

RDDS来源:

  1.Hadoop文件系统或支持Hadoop的文件系统中操作一个文件

  2.driver program中已存在的scala集合

3.从另一个RDD转换得到

主要抽象shared variables共享变量:

  共享变量也可以被并行操作

  默认的,当spark将一个运行的函数作为在不同的节点上的一系列的tasks集合时,共享变量传输函数用到的所有变量。

  变量分享的范围:tasks内/tasks之间和整个driver program

  spark支持两种类型的共享变量:

     broadcast变量:被用来在所有节点的内存缓存值

     accumulators(蓄能器):which are variables that are only “added” to, such as     

                counters and sums.

初始化spark

spark程序做的第一件事情就是:创建一个SparkContext对象(告诉spark怎么连接到集群)

为了创建SparkContext,需要先build一个SparkConf对象(包含应用相关的信息)

注意:一个JVM中只能有一个SparkContext处于aitve,想创建新的必须先停止旧的

   

       val conf =newSparkConf().setAppName(appName).setMaster(master)

       newSparkContext(conf)

appName用来指定你的应用的名字,展示在集群UI中

master是Spark,Mesos,YARN cluster URL 或 一个指定的”local”字符串以本地模式运行

实际在集群中运行时,不需要在程序中指定这些,而是用spark-submit。

当然,对于本地测试和单元测试,能在spark运行中通过程序设置”local”

并行化集合

在driver program中,存在sc后,可利用SparkContext的paralleliz方法创建Parallelized集合,集合内的元素被复制去形成一个分布式的数据集(能被并行操作的)。如下创建并行化的集合(包括1-5)

             val
data
=Array(1,2,3,4,5)
             val
distData
=
sc
.parallelize(data)

并行化集合的一个重要的参数是:将数据集切分成分区的个数。spark将为集群中每一个分区运行一个task。通常,集群中每一个CPU会有2-4个分区。正常情况下,分区数是由spark根据集群情况自动设置的。当然也可以重载parallelize()手动设置。如:sc.parallelize(data, 10)

外部数据集

Text fileRDDS能通过SparkContext的textFile方法创建。

该方法通过URL得到file (本地path 或hdfs://或s3n://等等 ),最终得到行的集合

例如:

scala>val
distFile
=
sc
.textFile("data.txt")
distFile:RDD[String]=MappedRDD@1d4cee08

一旦创建,distFile文件集能像数据集操作一样来操作

For
example, we can add up the sizes of all the lines using
the map and reduceoperations
as follows: distFile.map(s
=> s.length).reduce((a, b) => a + b)
.

spark读文件注意事项:

   1.如果用本地系统path,那么在worker节点的相同path下file也能被读取

     实现方法:拷贝file到worker或用网络挂载的方式共享文件系统

   2.spark基于文件的输入方法,包括:

textFile,
support running on directories, compressed files, and wildcards as
well

 3.textFile方法可以设置分区的个数。

     默认的,spark为每一个文件分块(HDFS默认有64M和128M)创建一个分区

     可以手动设置分区数,但是分区数不能少于文件分块数

apart from text files, Spark’s Scala API also supports several other data formats:

  • SparkContext.wholeTextFiles lets you read a directory containing multiple small text files, and returns each of them as (filename, content) pairs. This is in contrast with textFile, which would return one record per line in each file.

  • For SequenceFiles, use SparkContext’s sequenceFile[K, V] method where K and V are the types of key and values in the file. These should be subclasses of Hadoop’s Writable interface, like IntWritable and Text. In addition, Spark allows you to specify native types for a few common Writables; for example, sequenceFile[Int, String] will automatically read IntWritables and Texts.

  • For other Hadoop InputFormats, you can use the SparkContext.hadoopRDD method, which takes an arbitrary JobConf and input format class, key class and value class. Set these the same way you would for a Hadoop job with your input source. You can also useSparkContext.newAPIHadoopRDD for InputFormats based on the “new” MapReduce API (org.apache.hadoop.mapreduce).

  • RDD.saveAsObjectFile and SparkContext.objectFile support saving an RDD in a simple format consisting of serialized Java objects. While this is not as efficient as specialized formats like Avro, it offers an easy way to save any RDD.

spark program guide的更多相关文章

  1. Flink Program Guide (10) -- Savepoints (DataStream API编程指导 -- For Java)

    Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------ ...

  2. Flink Program Guide (8) -- Working with State :Fault Tolerance(DataStream API编程指导 -- For Java)

    Working with State 本文翻译自Streaming Guide/ Fault Tolerance / Working with State ---------------------- ...

  3. Flink Program Guide (2) -- 综述 (DataStream API编程指导 -- For Java)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  4. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  5. Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)

    State Backends 本文翻译自文档Streaming Guide / Fault Tolerance / StateBackend ----------------------------- ...

  6. Flink Program Guide (6) -- 窗口 (DataStream API编程指导 -- For Java)

    窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限 ...

  7. Spark Programming Guide《翻译》

    转载必须注明出处:梁杰帆 在这里要先感谢原作者们!如果各位在这里发现了错误之处,请大家提出 1.Initializing Spark     Spark程序必须做的第一件事就是创建一个SparkCon ...

  8. Flink Program Guide (7) -- 容错 Fault Tolerance(DataStream API编程指导 -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  9. Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)

    本文翻译自Pre-defined Timestamp Extractors / Watermark Emitter ------------------------------------------ ...

随机推荐

  1. .NET MVC项目设置包含Areas中的页面为默认启动页

    利用vs创建一个MVC项目后,一般的默认启动页是根目录下-->Controllers-->HomeController-->Index这个方法对应的页面. 我先说下创建Areas的流 ...

  2. Android Studio 管理所有程序退出

    import android.app.Activity; import java.util.ArrayList; import java.util.List; public class fa { pu ...

  3. VS2017 启动调试出现 无法启动程序“http://localhost:15613” 操作在当前状态中是非法的。 同时附加进程也是错误的解决方法

    第一次发表这样的博客,不会如何的排版,还有很多的不懂,大神勿喷哈! 同时是给自己做的一次记录,已方便后面可能会同样出现该问题后不用像无头苍蝇一样到处百度乱找 VS2017 启动调试出现  无法启动程序 ...

  4. mysql中union 查询

    UNION ALL只是简单的将两个结果合并后就返回.这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了. 从效率上说,UNION ALL 要比UNION快很多,所以,如果可 ...

  5. SpringBoot 配置静态资源映射

    SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...

  6. MySQL添加新用户、为用户创建数据库、为新用户分配权限

    登录MySQL [root@VM_0_2_33_centos /]#mysql -u root -p 添加新用户 允许本地 IP 访问 localhost, 127.0.0.1 mysql>'; ...

  7. K8S 调度器,预选策略,优选函数

    Kubernetes Scheduler 提供的调度流程分三步: 预选策略(predicate) 遍历nodelist,选择出符合要求的候选节点,Kubernetes内置了多种预选规则供用户选择. 优 ...

  8. @RequestMapping 详解

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.RequestMapping注解有六个属性,下面我们把她分 ...

  9. 从换脸到换姿势,AI 在图像处理的道路上越走越魔幻

    从换脸到换姿势,AI 在图像处理的道路上越走越魔幻 https://mp.weixin.qq.com/s/VFq3BWLpzyKZ3sqVWf1HKA [导读]加州大学伯克利分校的研究人员,近日在著名 ...

  10. LRU(最近最少使用淘汰算法)基本实现

     LRU(Least Recently Used) 出发点:在页式存储管理中,如果一页很长时间未被访问,则它在最近一段时间内也不会被访问,即时间局部性,那我们就把它调出(置换出)内存. 为了实现LRU ...