spark

spark实验五

房东的猫 提交于 2020-01-27 00:18:33
一、实验目的 (1)通过实验掌握 Spark SQL 的基本编程方法; (2)熟悉 RDD 到 DataFrame 的转化方法; (3)熟悉利用 Spark SQL 管理来自不同数据源的数据。 二、实验平台 操作系统: Ubuntu16.04 Spark 版本:2.1.0 数据库:MySQL 三、实验内容和要求 1.Spark SQL 基本操作 将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json。 { "id":1 , "name":" Ella" , "age":36 } { "id":2, "name":"Bob","age":29 } { "id":3 , "name":"Jack","age":29 } { "id":4 , "name":"Jim","age":28 } { "id":4 , "name":"Jim","age":28 } { "id":5 , "name":"Damon" } { "id":5 , "name":"Damon" } 为 employee.json 创建 DataFrame,并写出 Scala 语句完成下列操作: (1) 查询所有数据; 主讲教师:林子雨 http://www.cs.xmu.edu.cn/linziyu 第 1 页厦门大学林子雨,赖永炫,陶继平 编著《Spark 编程基础

Spark的Rpct模块的学习

混江龙づ霸主 提交于 2020-01-26 22:00:02
Spark的Rpc模块是1.x重构出来可,以前的代码中大量使用了akka的类,为了把akka从项目的依赖中移除,所有添加了该模块。先看下该模块的几个主要的类 使用EA把该模块所有的类都添加进来了 要看懂该模块还是要先了解akka, akka有Actor和ActorRef两个类,一个用于接收消息,一个用于发送消息。正好对应该模块的RpcEndpoint和RpcEndpointRef两个类。 下面大致介绍下这几个类,附带一些scala的特性 1:RpcAddress 该类是一个case class, 用来表示主机名和端口号 , case class也可以添加方法,以前还以为不可以呢 它的伴生对象用于从URI,String等构造一个RpcAddress对象 2:RpcTimeout 表示一个超时时间,话说该类的职责有点乱,竟然还有下面的一个方法 def awaitResult[T](awaitable:Awaitable[T]): T ={ try{ Await.result(awaitable, duration) }catch addMessageIfTimeout } 在规定时间内返回对象, Await是scala并发库中的一个对象,result在duration时间片内返回Awaitable的执行结果,ready表示

Spark RDD编程核心

≯℡__Kan透↙ 提交于 2020-01-26 20:32:57
一句话说,在Spark中对数据的操作其实就是对RDD的操作,而对RDD的操作不外乎创建、转换、调用求值。 什么是RDD   RDD(Resilient Distributed Dataset),弹性分布式数据集。   它定义了如何在集群的每个节点上操作数据的一系列命令,而不是指真实的数据,Spark通过RDD可以对每个节点的多个分区进行并行的数据操作。   之所以称弹性,是因为其有高容错性。默认情况下,Spark会在每一次行动操作后进行RDD重计算,如想在多个行动操作中使用RDD,可以将其缓存(以分区的方式持久化)到集群中每台机器的内存或者磁盘中。当一台机器失效无法读取RDD数据时,可通过此特性重算丢掉的分区,从而恢复数据,此过程对用户透明。    如何创建RDD   可通过以下几种方式创建RDD: 通过读取外部数据集 (本地文件系统/HDFS/...) 通过读取集合对象 (List/Set/...) 通过已有的RDD生成新的RDD     Spark对RDD操作方式   Spark对RDD的操作分两种,即转换操作(Transformation)和行动操作(Action)。 转换操作:不触发实际计算,返回一个新的RDD,例如对数据的匹配操作map和过滤操作filter, 惰性求值 。 行动操作:会触发实际计算,会向驱动器返回结果或将结果写到外部系统。   如何区别两种操作?    

Spark学习之路 (十五)SparkCore的源码解读(一)启动脚本[转]

给你一囗甜甜゛ 提交于 2020-01-26 18:18:18
启动脚本分析 独立部署模式下,主要由master和slaves组成,master可以利用zk实现高可用性,其driver,work,app等信息可以持久化到zk上;slaves由一台至多台主机构成。Driver通过向Master申请资源获取运行环境。 启动master和slaves主要是执行/usr/dahua/spark/sbin目录下的start-master.sh和start-slaves.sh,或者执行 start-all.sh,其中star-all.sh本质上就是调用start-master.sh和start-slaves.sh start-all.sh #1.判断SPARK_HOME是否有值,没有将其设置为当前文件所在目录的上级目录 if [ -z "${SPARK_HOME}" ]; then export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)" fi #2.执行${SPARK_HOME}/sbin/spark-config.sh,见以下分析 . "${SPARK_HOME}/sbin/spark-config.sh" #3.执行"${SPARK_HOME}/sbin"/start-master.sh,见以下分析 "${SPARK_HOME}/sbin"/start-master.sh #4.执行"${SPARK

Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本[转]

懵懂的女人 提交于 2020-01-26 18:12:08
概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图: 源码解读 spark-submit # -z是检查后面变量是否为空(空则真) shell可以在双引号之内引用变量,单引号不可 #这一步作用是检查SPARK_HOME变量是否为空,为空则执行then后面程序 #source命令: source filename作用在当前bash环境下读取并执行filename中的命令 #$0代表shell脚本文件本身的文件名,这里即使spark-submit #dirname用于取得脚本文件所在目录 dirname $0取得当前脚本文件所在目录 #$(命令)表示返回该命令的结果 #故整个if语句的含义是:如果SPARK_HOME变量没有设置值,则执行当前目录下的find-spark-home脚本文件,设置SPARK_HOME值 if [ -z "${SPARK_HOME}" ]; then source "$(dirname "$0")"/find-spark-home fi # disable randomized hash for string in Python 3.3+ export PYTHONHASHSEED=0 #执行spark

Spark学习之路 (二十三)SparkStreaming的官方文档[转]

南楼画角 提交于 2020-01-26 18:09:54
SparkCore、SparkSQL和SparkStreaming的类似之处 SparkStreaming的运行流程 1、我们在集群中的其中一台机器上提交我们的Application Jar,然后就会产生一个Application,开启一个Driver,然后初始化SparkStreaming的程序入口StreamingContext; 2、Master会为这个Application的运行分配资源,在集群中的一台或者多台Worker上面开启Excuter,executer会向Driver注册; 3、Driver服务器会发送多个receiver给开启的excuter,(receiver是一个接收器,是用来接收消息的,在excuter里面运行的时候,其实就相当于一个task任务) 4、receiver接收到数据后,每隔200ms就生成一个block块,就是一个rdd的分区,然后这些block块就存储在executer里面,block块的存储级别是Memory_And_Disk_2; 5、receiver产生了这些block块后会把这些block块的信息发送给StreamingContext; 6、StreamingContext接收到这些数据后,会根据一定的规则将这些产生的block块定义成一个rdd; SparkStreaming的3个组成部分 离散流(DStream) 例子

Spark学习之路 (六)Spark Transformation和Action[转]

故事扮演 提交于 2020-01-26 18:07:46
Transformation算子 基本的初始化 (1)java static SparkConf conf = null; static JavaSparkContext sc = null; static { conf = new SparkConf(); conf.setMaster("local").setAppName("TestTransformation"); sc = new JavaSparkContext(conf); } (2)scala private val conf: SparkConf = new SparkConf().setAppName("TestTransformation").setMaster("local") private val sparkContext = new SparkContext(conf) map、flatMap、mapParations、mapPartitionsWithIndex map jdk7 map十分容易理解,他是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的JavaRDD。 public static void map(){ //String[] names = {"张无忌","赵敏","周芷若"}; List<String> list = Arrays

Spark学习之路 (七)Spark 运行流程[转]

点点圈 提交于 2020-01-26 18:07:06
Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext (3)Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。在Spark on Yarn模式下,其进程名称为 CoarseGrainedExecutor Backend,一个CoarseGrainedExecutor Backend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task,这样,每个CoarseGrainedExecutorBackend能并行运行Task的数据就取决于分配给它的CPU的个数。 (4)Worker:集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点。 (5)Task:在Executor进程中执行任务的工作单元,多个Task组成一个Stage (6)Job

Spark学习之路 (八)SparkCore的调优之开发调优[转]

别说谁变了你拦得住时间么 提交于 2020-01-26 18:06:36
前言 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark。大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、性能更高。 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因此,想要用好Spark,就必须对其进行合理的性能优化。 Spark的性能调优实际上是由很多部分组成的,不是调节几个参数就可以立竿见影提升作业性能的。我们需要根据不同的业务场景以及数据情况,对Spark作业进行综合性的分析,然后进行多个方面的调节和优化,才能获得最佳性能。 笔者根据之前的Spark作业开发经验以及实践积累,总结出了一套Spark作业的性能优化方案。整套方案主要分为开发调优、资源调优、数据倾斜调优、shuffle调优几个部分。开发调优和资源调优是所有Spark作业都需要注意和遵循的一些基本原则,是高性能Spark作业的基础;数据倾斜调优

Spark学习之路 (十)SparkCore的调优之Shuffle调优[转]

吃可爱长大的小学妹 提交于 2020-01-26 18:04:18
概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而已。因此大家务必把握住调优的基本原则,千万不要舍本逐末。下面我们就给大家详细讲解shuffle的原理,以及相关参数的说明,同时给出各个参数的调优建议。 shuffle的定义 Spark的运行主要分为2部分:   一部分是驱动程序,其核心是SparkContext;   另一部分是Worker节点上Task,它是运行实际任务的。程序运行的时候,Driver和Executor进程相互交互:运行什么任务,即Driver会分配Task到Executor,Driver 跟 Executor 进行网络传输; 任务数据从哪儿获取,即Task要从 Driver 抓取其他上游的 Task 的数据结果,所以有这个过程中就不断的产生网络结果。其中,下一个 Stage 向上一个 Stage 要数据这个过程,我们就称之为 Shuffle。 HashShuffleManager的运行原理 在Spark的源码中,负责shuffle过程的执行