随笔分类 - 【6】Spark
摘要:SparkContext是通往Spark集群的唯一入口,是整个Application运行调度的核心。 一、Spark Driver Program Spark Driver Program(以下简称Driver)是运行Application的main函数并且新建SparkContext实例的程序。其
阅读全文
摘要:一、Runtime架构图 (1)从Spark Runtime的角度讲,包括五大核心对象:Master、Worker、Executor、Driver、CoarseGrainedExecutorBackend。 (2)Spark在做分布式集群系统设计的时候:最大化功能独立、模块化封装具体独立的对象、强内
阅读全文
摘要:一、Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码;在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据处理过程。 首先需要建立一个文本文件helloSpark.txt,helloSpark.txt的文本
阅读全文
摘要:一、Spark RDD容错原理 RDD不同的依赖关系导致Spark对不同的依赖关系有不同的处理方式。 对于宽依赖而言,由于宽依赖实质是指父RDD的一个分区会对应一个子RDD的多个分区,在此情况下出现部分计算结果丢失,单一计算丢失的数据无法达到效果,便采用重新计算该步骤中的所有数据,从而会导致计算数据
阅读全文
摘要:RDD依赖关系为成两种:窄依赖(Narrow Dependency)、宽依赖(Shuffle Dependency)。窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition所使用;宽依赖表示一个父RDD的Partition都会被多个子RDD的Partition所使用。 一
阅读全文
摘要:RDD作为弹性分布式数据集,它的弹性具体体现在以下七个方面。 1.自动进行内存和磁盘数据存储的切换 Spark会优先把数据放到内存中,如果内存实在放不下,会放到磁盘里面,不但能计算内存放下的数据,也能计算内存放不下的数据。如果实际数据大于内存,则要考虑数据放置策略和优化算法。当应用程序内存不足时,S
阅读全文
摘要:RDD是分布式内存的一个抽象概念,是一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,能横跨集群所有节点并行计算,是一种基于工作集的应用抽象。 RDD底层存储原理:其数据分布存储于多台机器上,事实上,每个RDD的数据都以Block的形式存储于多台机器上,每个Executor会启动一个Blo
阅读全文
摘要:一、累加器API 关于累加器,前面我也写了一篇博客,顺便粘贴这儿,对比学习,Spark学习之编程进阶总结(一)。Spark 2.0系列引入了一个更加简单和更高性能的累加器API,如在1.X版本中可以这样使用累加器: 在Spark 2.X版本里使用SparkContext里内置的累加器: 只使用Spa
阅读全文
摘要:二、通过DataFrame实战电影点评系统 DataFrameAPI是从Spark 1.3开始就有的,它是一种以RDD为基础的分布式无类型数据集,它的出现大幅度降低了普通Spark用户的学习门槛。 DataFrame类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有sc
阅读全文
摘要:一、通过RDD实战电影点评系统 日常的数据来源有很多渠道,如网络爬虫、网页埋点、系统日志等。下面的案例中使用的是用户观看电影和点评电影的行为数据,数据来源于网络上的公开数据,共有3个数据文件:uers.dat、ratings.dat和movies.dat。 其中,uers.dat的格式如下: Use
阅读全文
摘要:一、前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分布式环境搭建 然后在spark伪分布式的环境下必须出现如下八个节点才算spark环境搭建好。 然后再
阅读全文
摘要:一、简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用、训练机器学习模型的应用,还有自动检测异常的应用。Spark Streaming 是 Spark 为这些应用而设计的模型。它允许用户使用一套和批处理非常接近的 API 来编写流式计算应用,这样就可以大量重用批处理应用的技术甚
阅读全文
摘要:一、简介 Spark SQL 提供了以下三大功能。 (1) Spark SQL 可以从各种结构化数据源(例如 JSON、Hive、Parquet 等)中读取数据。 (2) Spark SQL 不仅支持在 Spark 程序内使用 SQL 语句进行数据查询,也支持从类似商业智能软件 Tableau 这样
阅读全文
摘要:下面来看看更复杂的情况,比如,当调度器进行流水线执行(pipelining),或把多个 RDD 合并到一个步骤中时。当RDD 不需要混洗数据就可以从父节点计算出来时,调度器就会自动进行流水线执行。上一篇博文结尾处输出的谱系图使用不同缩进等级来展示 RDD 是否会在物理步骤中进行流水线执行。在物理执行
阅读全文
摘要:一、使用SparkConf配置Spark 对 Spark 进行性能调优,通常就是修改 Spark 应用的运行时配置选项。Spark 中最主要的配置机制是通过 SparkConf 类对 Spark 进行配置。当创建出一个 SparkContext 时,就需要创建出一个 SparkConf 的实例。 S
阅读全文
摘要:一、简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力。好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样。也就是说,你可以在小数据集上利用本地模式快速开发并验证你的应用,然后无需修改代码就可以在大规模集群上运行。
阅读全文
摘要:五、基于分区进行操作 基于分区对数据进行操作可以让我们避免为每个数据元素进行重复的配置工作。诸如打开数据库连接或创建随机数生成器等操作,都是我们应当尽量避免为每个元素都配置一次的工作。Spark 提供基于分区的 map 和 foreach ,让你的部分代码只对 RDD 的每个分区运行一次,这样可以帮
阅读全文
摘要:一、简介 这次介绍前面没有提及的 Spark 编程的各种进阶特性,会介绍两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable)。累加器用来对信息进行聚合,而广播变量用来高效分发较大的对象。在已有的 RDD 转化操作的基础上,我们为类似查询数据库这样需要
阅读全文
摘要:8、Hadoop输入输出格式 除了 Spark 封装的格式之外,也可以与任何 Hadoop 支持的格式交互。Spark 支持新旧两套Hadoop 文件 API,提供了很大的灵活性。 要使用新版的 Hadoop API 读入一个文件,需要告诉 Spark 一些东西。 newAPIHadoopFile接
阅读全文
摘要:一、动机 我们已经学了很多在 Spark 中对已分发的数据执行的操作。到目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的。但有时候,数据量可能大到无法放在一台机器中,这时就需要探索别的数据读取和保存的方法了。 Spark 及其生态系统提供了很多可选方案。本章会介绍以下三类常见的
阅读全文