rdd

为何选择spark!

孤街醉人 提交于 2019-12-05 22:32:55
 随着大数据处理的应用场景越来越多,人们对Hadoop的要求也越来越高,开发出的对应的系统也越来越多,人们迫切的需要一个综合的计算框架,Spark应运而生,我们可以看看Spark可以干些什么。   那么为什么Spark能做到这些?   首先,我们需要理解Spark中的三大概念: RDD(Resilient Distributed Dataset) 。实际上对与开发人员而已它是以一种对象的形式作为数据的一种表现形式而存在,可以理解为一种你可以操作的只读的分布式数据集,之所以称之为有弹性,在于: RDD可以在内存和磁盘存储间手动或自动切换; RDD拥有Lineage(血统)信息,及存储着它的父RDD以及父子之间的关系,当数据丢失时,可通过Lineage关系重新计算并恢复结果集,使其具备高容错性; 当血统链太长时,用户可以建立checkpoint将数据存放到磁盘上持久化存储加快容错速度(建议通过saveAsTextFile等方式存储到文件系统),而persist方式可以将数据存储到内存中用于后续计算的复用; RDD的数据重新分片可以手动设置。在Spark中执行重新分片操作的方法有repartition和coalesce两个方法,这两个方法都是手动设置RDD的分区数量,repartition只是coalesce接口中参数shuffle=true的实现;是否重新分区对性能影响比较大

Spark修炼之道(进阶篇)——Spark入门到精通:第四节 Spark编程模型(一)

自闭症网瘾萝莉.ら 提交于 2019-12-05 20:38:40
本节主要内容 Spark重要概念 弹性分布式数据集(RDD)基础 1. Spark重要概念 本节部分内容源自官方文档:http://spark.apache.org/docs/latest/cluster-overview.html (1)Spark运行模式 目前最为常用的Spark运行模式有: - local:本地线程方式运行,主要用于开发调试Spark应用程序 - Standalone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,为解决单点故障,可以采用ZooKeeper实现高可靠(High Availability,HA) - Apache Mesos :运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理交给Mesos,Spark只负责进行任务调度和计算 - Hadoop YARN : 集群运行在Yarn资源管理器上,资源管理交给Yarn,Spark只负责进行任务调度和计算 Spark运行模式中Hadoop YARN的集群运行方式最为常用,本课程中的第一节便是采用Hadoop YARN的方式进行Spark集群搭建。如此Spark便与Hadoop生态圈完美搭配,组成强大的集群,可谓无所不能。 (2)Spark组件(Components) 一个完整的Spark应用程序,如前一节当中SparkWordCount程序

初识Spark之 Spark API 初识Spark之 Spark API

我与影子孤独终老i 提交于 2019-12-05 20:37:10
API 应用可以通过使用Spark提供的库获得Spark集群的计算能力,这些库都是Scala编写的,但是Spark提供了面向各种语言的API,例如Scala、Python、Java等,所以可以使用以上语言进行Spark应用开发。 Spark的API主要由两个抽象部件组成:SparkContext和RDD,应用程序通过这两个部件和Spark进行交互,连接到Spark-集群并使用相关资源。 1.SparkContext 是定义在Spark库中的一个类,作为Spark库的入口。包含应用程序main()方法的Driver program通过SparkContext对象访问Spark,因为SparkContext对象表示与Spark集群的一个连接。每个Spark应用都有且只有一个激活的SparkContext类实例,如若需要新的实例,必须先让当前实例失活。 (在shell中SparkContext已经自动创建好,就是sc) 实例化SparkContext: val sc = new SparkContext() 1 2.RDD RDD基础概念 弹性分布式数据集(Resilient Distributed Dataset) 并行分布在整个集群中 把指定路径下的文本文件加载到lines这个RDD中,这个lines就是一个RDD,代表是就是整个文本文件 val lines = sc

Spark: How to split an RDD[T]` into Seq[RDD[T]] and preserve the ordering

北慕城南 提交于 2019-12-05 20:04:08
How can I effectively split up an RDD[T] into a Seq[RDD[T]] / Iterable[RDD[T]] with n elements and preserve the original ordering? I would like to be able to write something like this RDD(1, 2, 3, 4, 5, 6, 7, 8, 9).split(3) which should result in something like Seq(RDD(1, 2, 3), RDD(4, 5, 6), RDD(7, 8, 9)) Does spark provide such a function? If not what is a performant way to achieve this? val parts = rdd.length / n val rdds = rdd.zipWithIndex().map{ case (t, i) => (i - (i % parts), t)}.groupByKey().values.map(iter => sc.parallelize(iter.toSeq)).collect Doesn't look very fast.. You can,

spark教程(15)-Streaming

喜欢而已 提交于 2019-12-05 19:38:40
Spark Streaming 是一个分布式数据流处理框架,它可以近乎实时的处理流数据,它易编程,可以处理大量数据,并且能把实时数据与历史数据结合起来处理。 Streaming 使得 spark 具有了流式处理的能力,它为数据流式处理提供了高层抽象,底层仍然是 spark,所以它具有 spark 的可扩展、可容错、高吞吐量的特点,而且它可以与 spark 的各种库结合使用,如 sparkSQL、MLib、ml 等 总体架构 Spark Streaming 是一个 伪实时 的流处理框架,它处理的是一个微批次的数据流,就是说他把数据流按照非常小的时间间隔切分成一批一批的数据,然后每次处理一批数据; 每一批数据仍然以 RDD 方式存储,然后使用 spark core 进行处理; RDD 操作结果也是一批一批的输出; 数据流来源 Streaming 支持多种数据流来源,比较常用的有 TCP网络传输、Kafa、Flume 等,还有 Twitter、ZeroMQ、MQTT 等, 它也可以把一个文件当成流来处理, 也可以自定义数据流来源; 流数据经过 spark 处理后可以流向各种地方; 总结一下如下图 接收器 也叫数据采集器,接收器收到数据后存储在内存中; Streaming 在每个 worker 上为每个数据流来源创建一个接收器; 一个 spark 应用可以同时接收多个数据流来源

Spark - Nested RDD Operation

安稳与你 提交于 2019-12-05 18:07:37
I have two RDDs say rdd1 = id | created | destroyed | price 1 | 1 | 2 | 10 2 | 1 | 5 | 11 3 | 2 | 3 | 11 4 | 3 | 4 | 12 5 | 3 | 5 | 11 rdd2 = [1,2,3,4,5] # lets call these value as timestamps (ts) rdd2 is basically generated using range(intial_value, end_value, interval). The params here can vary. The size can be same or different to rdd1. The idea is to fetch records from rdd1 into rdd2 based on the values of rdd2 using a filtering criertia(records from rdd1 can repeat while fetching as you can see in output) filtering criteria rdd1.created <= ts < rdd1.destroyed) Expected output: ts | prices

spark ml

回眸只為那壹抹淺笑 提交于 2019-12-05 17:00:48
spark ml是基于spark 2.0环境,以DataFrame为数据处理单元。spark经历了三代,依次如下。DataFrame是个列式数据集,结构化的数据集,RDD是非结构化的,第二代比第一代因结构化数据计算的性能都要优秀些。第三代的dataset已经序列化的 数据,是encoding,已经转化为二进制,也就是spark自己已实现编码和反编码。因此,其性能因不需要要第三方结构来处理数据得到进一步提升。RDD会逐步退出历史舞台。 DataFrame按列处理数据,不是面向对象风格,不进行安全检查,只有在运行的时候才进行安全检查。 DataSet必须明确每一个列,是个强类型,在编译的时候进行类型检查。用case class定义。 RDD的创建 创建示例 RDD转化为DataFram 如果出现错误,可以从checkpoint恢复,不需要重新跑一边程序。 转化为临时sql表 转化为临时表可以进行sql操作。 去重操作示例 Expr操作?? 分割操作示例 withcolumn是增加一列,增加常数项 聚合操作示例 对json的支持 时间日期操作 支持数值运算 字符串操作 来源: https://www.cnblogs.com/chenglansky/p/11934851.html

How to use RDD in other RDDs map method?

廉价感情. 提交于 2019-12-05 16:55:42
I got a rdd named index: RDD[(String, String)], I want to use index to deal with my file. This is the code: val get = file.map({x => val tmp = index.lookup(x).head tmp }) The question is that I can not use index in the file.map Function, I ran this program and it gave me feedback like this: 14/12/11 16:22:27 WARN TaskSetManager: Lost task 0.0 in stage 3.0 (TID 602, spark2): scala.MatchError: null org.apache.spark.rdd.PairRDDFunctions.lookup(PairRDDFunctions.scala:770) com.ynu.App$$anonfun$12.apply(App.scala:270) com.ynu.App$$anonfun$12.apply(App.scala:265) scala.collection.Iterator$$anon$11

Spark(一): 基本架构及原理

岁酱吖の 提交于 2019-12-05 13:58:48
Spark(一): 基本架构及原理 Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求 官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍 目标: 架构及生态 spark 与 hadoop 运行流程及特点 常用术语 standalone模式 yarn集群 RDD运行流程 架构及生态: 通常当需要处理的数据量超过了单机尺度(比如我们的计算机有4GB的内存,而我们需要处理100GB以上的数据)这时我们可以选择spark集群进行计算,有时我们可能需要处理的数据量并不大,但是计算很复杂,需要大量的时间,这时我们也可以选择利用spark集群强大的计算资源,并行化地计算,其架构示意图如下: Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的 Spark

Is there an “Explain RDD” in spark

大兔子大兔子 提交于 2019-12-05 12:38:31
问题 In particular, if I say rdd3 = rdd1.join(rdd2) then when I call rdd3.collect , depending on the Partitioner used, either data is moved between nodes partitions, or the join is done locally on each partition (or, for all I know, something else entirely). This depends on what the RDD paper calls "narrow" and "wide" dependencies, but who knows how good the optimizer is in practice. Anyways, I can kind of glean from the trace output which thing actually happened, but it would be nice to call rdd3