spark

Spark调度模型

*爱你&永不变心* 提交于 2020-03-02 18:19:25
调度模型的好坏,是由底层的抽象模型所决定的,spark的底层抽象是RDD spark调度模型系统,分为 底层调度模型(TASKscheduler)和高层调度模型(DAGscheduler) 调度过程 1. application driver 发出请求,这个application首先创建sparkconf和 sparkcontext对象, 在sc对象中 TASKscheduler,DAGscheduler以及schedulerbackend对象, 并 向master注册 当前程序并 申请计算资源 (注意,如果底层是用yarn来进行资源管理和调度,那么会向yarn resource manager去申请计算资源,standalone模式下,具体的实现是taskschedulerimpl来完成的) 2. 这时候master会根据当前它掌握的worker的资源并通过心跳看worker是不是存活的),为application 分配appid和计算资源,并通知对应的worker按需求启动executor 分配计算资源的依据,来自spark-env.sh,default.sh,spark-submit的参数,和程序中sparkConf配置的参数 worker机器上会生成一个worker进程,通过一个proxy启动executorbackend进程,这个进程会启动executor

Spark 性能相关参数配置详解-shuffle篇

穿精又带淫゛_ 提交于 2020-03-02 17:49:33
随着 Spark 的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 在Spark的官方文档http://spark.apache.org/docs/latest/configuration.html 中提供了这些可配置参数中相当大一部分的说明. 但是文档的更新总是落后于代码的开发的, 还有一些配置参数没有来得及被添加到这个文档中, 最重要的是在这个文档中,对于许多的参数也只能简单的介绍它所代表的内容的字面含义, 如果没有一定的实践基础或者对其背后原理的理解, 往往无法真正理解该如何针对具体应用场合进行合理配置。 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化。需要注意的是,理论上,没有绝对正确的配置(否则也就不需要对应的配置参数了,Spark框架内部直接写死就好了),所以请结合自己的实际情况,辩证的看下面的内容。 由于本文主要针对和性能相关的一些配置参数进行阐述,所以基本不会覆盖其它和性能没有太多关系的配置参数。 由于篇幅较长,所以在这里分篇组织,如果要看最新完整的网页版内容,可以戳这里: http://spark-config.readthedocs.org/ ,主要是便于更新内容 Shuffle 相关 Shuffle操作大概是对Spark性能影响最大的步骤之一(因为可能涉及到排序,磁盘IO

spark: 二次排序-2

北战南征 提交于 2020-03-02 12:39:51
在上一篇文章,使用了###错误###的方法实现二次排序,导致排序按key字典排序,并非我们想要的结果 现在,使用自定义排序方法来实现二次排序 1, 思路 输入数据 aa 12 bb 32 aa 3, cc 43 dd 23 cc 5 cc 8 bb 23 bb 12 自定义排序类:对二元组(key:String, value:Int)进行排序 把每一行数据map成二元组(key:String, value:Int) 排序 -- scala自动使用步骤1定义的排序类进行排序 /** * 1. 自定义排序类:对二元组(key:String, value:Int)进行排序 */ class KVOrdering extends Ordering[Tuple2[String, Int]] with Serializable { override def compare(x: Tuple2[String, Int], y: Tuple2[String, Int]):Int = { val comp = x._1.compareTo(y._1) if (comp == 0) { // key相等, 则比较value x._2.compareTo(y._2) } else { comp } } } 由于scala的隐式转换机制,这个类会对闭包内的所有Tuple2[String, Int]产生作用

Spark流计算-day1

一世执手 提交于 2020-03-01 22:59:38
Spark流计算 概述 ⼀般流式计算会与批量计算相⽐较。在流式计算模型中,输⼊是持续的,可以认为在时间上是⽆界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果在时间上也是⽆界的。流式计算⼀般对实时性要求较⾼,同时⼀般是先定义⽬标计算,然后数据到来之后将计算逻辑应⽤于数据。同时为了提⾼计算效率,往往尽可能采⽤增量计算代替全量计算。批量处理模型中,⼀般先有全量数据集,然后定义计算逻辑,并将计算应⽤于全量数据。特点是全量计算,并且计算结果⼀次性全量输出。 ⽬前主流流处理框架:Kafka Streaming、Storm(JStrom)、Spark Streaming 、Flink(BLink) ①:Kafka Streaming:是⼀套基于Kafka-Streaming库的⼀套流计算⼯具jar包,具有⼊⻔⻔槛低,简单容易集成等特点。 ②:Apache Storm:⼀款纯粹的流计算引擎,能够达到每秒钟百万级别数据的低延迟处理框架。 ③:Spark Streaming:是构建在Spark 批处理之上⼀款流处理框架。与批处理不同的是,流处理计算的数据是⽆界数据流,输出也是持续的。Spark Streaming底层将Spark RDD Batch 拆分成 Macro RDDBatch实现类似流处理的功能。因此spark Streaming在微观上依旧是批处理框架

Spark GraphX 编程指南

荒凉一梦 提交于 2020-03-01 13:31:08
GraphX编程指南 (根据原文编辑: http://udn.yyuap.com/doc/spark-programming-guide-zh-cn/graphx-programming-guide/index.html ) GraphX是一个新的(alpha)Spark API,它用于图和并行图(graph-parallel)的计算。GraphX通过引入Resilient Distributed Property Graph:带有 顶点和边属性的有向多重图,来扩展Spark RDD。为了支持图计算,GraphX公开一组基本的功能操作以及Pregel API的一个优化。另外,GraphX包含了一个日益增长的图算法和图builders的 集合,用以简化图分析任务。 从社交网络到语言建模,不断增长的规模和图形数据的重要性已经推动了许多新的graph-parallel系统(如Giraph和GraphLab)的发展。 通过限制可表达的计算类型和引入新的技术来划分和分配图,这些系统可以高效地执行复杂的图形算法,比一般的data-parallel系统快很多。 data parallel vs graph parallel 然而,通过这种限制可以提高性能,但是很难表示典型的图分析途径(构造图、修改它的结构或者表示跨多个图的计算)中很多重要的stages。另外,我们如何看待数据取决于我们的目标

PySpark-使用Python在Spark上编程

谁说我不能喝 提交于 2020-03-01 13:03:03
Python Programming Guide The Spark Python API (PySpark) exposes the Spark programming model to Python. To learn the basics of Spark, we recommend reading through the Scala programming guide first; it should be easy to follow even if you don’t know Scala. This guide will show how to use the Spark features described there in Python. Key Differences in the Python API There are a few key differences between the Python and Scala APIs: Python is dynamically typed, so RDDs can hold objects of multiple types. PySpark does not yet support a few API calls, such as lookup and non-text input files, though

spark启动,启动hadoop关闭步骤

倖福魔咒の 提交于 2020-03-01 08:44:11
sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager sbin/start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode sbin/stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode ./bin/pysaprk --master local[4] 本地模式启动spark python语言的shell,4是4个线程 如果嫌运行日志显示太多,可以调整日志显示级别,找到日志文件修改,log4j。rootCategory=ERROR, console exit() 退出pyspark shell 来源: CSDN 作者: qq_45371603 链接: https://blog.csdn.net/qq_45371603/article/details/104576334

彻底搞懂spark的shuffle过程(shuffle write)

瘦欲@ 提交于 2020-02-29 22:00:29
什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------, C <--n---D---n-----F--s---, A <-------s------ B <--n----`-- G 对应的划分后的RDD结构为: 最终我们得到了整个执行过程: 中间就涉及到shuffle 过程,前一个stage 的 ShuffleMapTask 进行 shuffle write, 把数据存储在 blockManager 上面, 并且把数据位置元信息上报到 driver 的 mapOutTrack 组件中, 下一个 stage 根据数据位置元信息, 进行 shuffle read, 拉取上个stage 的输出数据。 这篇文章讲述的就是其中的 shuffle write 过程。 spark shuffle 演进的历史 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidation机制 Spark 0.9 引入ExternalAppendOnlyMap Spark 1.1 引入Sort Based Shuffle,但默认仍为Hash Based Shuffle Spark 1.2

【Spark 应用】实现分组取topN

放肆的年华 提交于 2020-02-29 20:54:02
一、文本格式 class1 90 class2 56 class1 87 class1 76 class2 88 class1 95 class1 74 class2 87 class2 67 class2 77 二、代码如下 package com . scala import org . apache . spark . SparkConf import org . apache . spark . SparkContext /** * scala版本的groupTopN */ object GroupTopN { def main ( args : Array [ String ] ) : Unit = { val conf = new SparkConf ( ) . setAppName ( "groupByTopN" ) . setMaster ( "local[1]" ) //获取context val sc = new SparkContext ( conf ) //加载到内存RDD val scores = sc . textFile ( "score.txt" , 1 ) //转换成为kv格式,方便分组操作 val scoresMap = scores . map ( x = > { val al = x . split ( " " ) ( al ( 0 ) ,

机器学习研究与开发平台的选择

[亡魂溺海] 提交于 2020-02-29 18:29:09
    目前机器学习可以说是百花齐放阶段,不过如果要学习或者研究机器学习,进而用到生产环境,对平台,开发语言,机器学习库的选择就要费一番脑筋了。这里就我自己的机器学习经验做一个建议,仅供参考。     首先,对于平台选择的第一个问题是,你是要用于生产环境,也就是具体的产品中,还是仅仅是做研究学习用? 1. 生产环境中机器学习平台的搭建     如果平台是要用于生产环境的话,接着有一个问题,就是对产品需要分析的数据量的估计,如果数据量很大,那么需要选择一个大数据平台。否则的话只需要一个单机版的平台就可以了。 1.1 生产环境中机器学习大数据平台的搭建     生产环境里面大数据平台,目前最主流的就是Spark平台,加上辅助的分布式数据处理容器,比如YARN,或者Mesos.如果需要实时的收集在线数据,那么就加上Kafka。简言之,一个通用的大数据处理平台就是集成Spark + YARN(Mesos) + Kafka. 我现在做的产品项目都是基于Spark + YARN+ Kafka的,目前来看,这个平台选择基本上是主流的方向。     当然,有人会说,这么多开源软件,一起集成起来好麻烦,大坑肯定不少,有没有一个通用的平台,可以包括类似Spark + YARN+ Kafka的大数据平台功能呢?目前据我所知,做的比较好的有CDAP(http://cdap.io)。它对Spark,