spark

Spark入门(四)--Spark的map、flatMap、mapToPair

时光总嘲笑我的痴心妄想 提交于 2020-01-12 00:28:08
spark的RDD操作 在上一节 Spark经典的单词统计 中,了解了几个RDD操作,包括flatMap,map,reduceByKey,以及后面简化的方案,countByValue。那么这一节将介绍更多常用的RDD操作,并且为每一种RDD我们分解来看其运作的情况。 spark的flatMap flatMap,有着一对多的表现,输入一输出多。并且会将每一个输入对应的多个输出整合成一个大的集合,当然不用担心这个集合会超出内存的范围,因为spark会自觉地将过多的内容溢写到磁盘。当然如果对运行的机器的内存 有着足够的信心 ,也可以将内容存储到内存中。 为了更好地理解flatMap,我们将举一个例子来说明。当然和往常一样,会准备好例子对应的数据文本,文本名称为uv.txt,该文本和示例程序可以从 github 上下载。以下会用三种语言:scala、java、python去描述,同时在java中会对比采用java和java8来实现各个例子。其中java和scala程序在 github 能直接下载,而python则暂时不提供,后续会补上。 scala实现 import org.apache.spark.{SparkConf, SparkContext} object SparkFlatMap { def main(args: Array[String]): Unit = { val conf

Spark入门(五)--Spark的reduce和reduceByKey

血红的双手。 提交于 2020-01-12 00:27:25
reduce和reduceByKey的区别 reduce和reduceByKey是spark中使用地非常频繁的,在 字数统计 中,可以看到reduceByKey的经典使用。那么reduce和reduceBykey的区别在哪呢? reduce 处理数据时有着一对一的特性,而 reduceByKey 则有着多对一的特性。比如reduce中会把数据集合中每一个元素都处理一次,并且每一个元素都对应着一个输出。而reduceByKey则不同,它会把所有key相同的值处理并且进行归并,其中归并的方法可以自己定义。 例子 在单词统计中,我们采用的就是reduceByKey,对于每一个单词我们设置成一个键值对(key,value),我们把单词作为key,即key=word,而value=1,因为遍历过程中,每个单词的出现一次,则标注1。那么reduceByKey则会把key相同的进行归并,然后根据我们定义的归并方法即对value进行累加处理,最后得到每个单词出现的次数。而reduce则没有相同Key归并的操作,而是将所有值统一归并,一并处理。 spark的reduce 我们采用scala来求得一个数据集中所有数值的平均值。该数据集包含5000个数值,数据集以及下列的代码均可从 github 下载,数据集名称为"avg"。为求得这个数据集中的平均值,我们先用map对文本数据进行处理

Spark 任务性能优化浅谈

北慕城南 提交于 2020-01-11 23:10:00
1 spark on yarn(cluster模式)框架 图1- 1 1.1 yarn组件概念 ResourceManager :负责集群的资源管理和分配。 NodeManager :每个节点的资源和任务管理器。 Application Master :YARN中每个Application对应一个AM进程,负责与RM协商获取资源,获取资源后告诉NodeManager为其分配并启动Container。 Container :YARN中的抽象资源。 1.2 spark组件概念 Driver :进行资源申请、任务分配并监督其运行状况等。 DAGScheduler :将spark job转换成DAG图。 TaskScheduler :负责任务(task)调度 2 spark shuffle 2.1 窄依赖与宽依赖 理解shuffle之前,需要先理解窄依赖和宽依赖。 窄依赖: 父RDD的每个分区都只被子RDD的一个分区依赖 例如map、filter、union等操作会产生窄依赖。 宽依赖: 父RDD的分区被子RDD的多个分区依赖 例如 groupByKey、reduceByKey、sortByKey等操作会产生宽依赖,会产生shuffle过程,也是划分stage依据。 图2- 1 2.2 Shuffle过程 图2- 2 Shuffle过程包括:shuffle write与shuffle

Windows下安装Spark

好久不见. 提交于 2020-01-11 05:50:57
1. 安装Scala, 下载链接 https://downloads.lightbend.com/scala/2.12.3/scala-2.12.3.msi 创建系统变量 SCALA_HOME为C:\Program Files (x86)\scala, 然后添加%SCALA_HOME%\bin到系统PATH变量中 然后打开cmd窗口,运行scala,你应该看到如下信息 2. 安装JDK,下载链接, http://www.oracle.com/technetwork/java/javase/downloads/index.html , spark2.2要求jdk8,所以下载 Java SE 8u144 创建系统变量JAVA_HOME为C:\Program Files\Java\jdk1.8.0_144, 然后添加%JAVA_HOME%\bin到系统PATH变量中 创建系统变量CLASSPATH,内容为%JAVA_HOMT%\lib;%JAVA_HOMT%\lib\tools.jar; 打开cmd窗口,输入 java -version, 3. 安装spark, 下载链接 http://spark.apache.org/downloads.html 点击第4步的链接下载,之后把里面的内容解压缩到C:\Spark文件夹中, 创建系统变量SPARK_HOME,内容为C:\Spark\,添加

想成为大数据开发工程师,你必须掌握的开发流程图是这样的

痴心易碎 提交于 2020-01-11 02:34:58
1、数据处理主要技术 Sqoop :(发音:skup)作为一款开源的离线数据传输工具,主要用于Hadoop(Hive) 与传统数据库(MySql,PostgreSQL)间的数据传递。它可以将一个关系数据库中数据导入Hadoop的HDFS中, 也可以将HDFS中的数据导入关系型数据库中。 Flume: 实时数据采集的一个开源框架,它是Cloudera提供的一个高可用用的、高可靠、分布式的海量日志采集、聚合和传输的系统。目前已经是Apache的顶级子项目。使用Flume可以收集诸如日志、时间等数据 并将这些数据集中存储起来供下游使用(尤其是数据流框架,例如Storm)。和Flume类似的另一个框架是Scribe(FaceBook开源的日志收集系统,它为日志的分布式收集、统一处理提供一个可扩展的、高容错的简单方案)  Kafka: 通常来说Flume采集数据的速度和下游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来缓冲,而这方面最为流行和应用最为广泛的无疑是Kafka。它是由LinkedIn开发的一个分布式消息系统, 以其可以水平扩展和高吞吐率而被广泛使用。目前主流的开源分布式处理系统(如Storm和Spark等)都支持与Kafka 集成。 Kafka是一个基于分布式的消息发布-订阅系统,特点是速度快、可扩展且持久。与其他消息发布-订阅系统类似

Flink初探-为什么选择Flink

只谈情不闲聊 提交于 2020-01-11 02:05:49
本文主要记录一些关于Flink与storm,spark的区别, 优势, 劣势, 以及为什么这么多公司都转向Flink. What Is Flink 一个通俗易懂的概念: Apache Flink 是近年来越来越流行的一款开源大数据计算引擎,它同时支持了批处理和流处理. 这是对Flink最简单的认识, 也最容易引起疑惑, 它和storm和spark的区别在哪里? storm是基于流计算的, 但是也可以模拟批处理, spark streaming也可以进行微批处理, 虽说在性能延迟上处于亚秒级别, 但也不足以说明Flink崛起如此迅速(毕竟从spark迁移到Flink是要成本的). 最显而易见的原因 网上最热的两个原因: Flink灵活的窗口 Exactly once语义保证 这两个原因可以大大的解放程序员, 加快编程效率, 把本来需要程序员花大力气手动完成的工作交给框架, 下面简单介绍一下这两个特征. 1.什么是 Window 在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。 窗口可以是时间驱动的(Time Window, 例如: 每30秒钟

Spark 数据倾斜及其解决方案

老子叫甜甜 提交于 2020-01-10 18:12:19
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/lqMu6lfk-Ny1ZHYruEeBdA 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平台、移动浏览器、推荐广告和大数据、人工智能等相关开发和架构。目前在vivo智能平台中心从事 AI中台建设以及广告推荐业务。擅长各种业务形态的业务架构、平台化以及各种业务解决方案。 本文从数据倾斜的危害、现象、原因等方面,由浅入深阐述Spark数据倾斜及其解决方案。 一、什么是数据倾斜 对 Spark/Hadoop 这样的分布式大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。 对于分布式系统而言,理想情况下,随着系统规模(节点数量)的增加,应用整体耗时线性下降。如果一台机器处理一批大量数据需要120分钟,当机器数量增加到3台时,理想的耗时为120 / 3 = 40分钟。但是,想做到分布式情况下每台机器执行时间是单机时的1 / N,就必须保证每台机器的任务量相等。不幸的是,很多时候,任务的分配是不均匀的,甚至不均匀到大部分任务被分配到个别机器上,其它大部分机器所分配的任务量只占总得的小部分。比如一台机器负责处理 80% 的任务,另外两台机器各处理 10% 的任务。 『不患多而患不均』,这是分布式环境下最大的问题。意味着计算能力不是线性扩展的

Spark 数据倾斜及其解决方案

跟風遠走 提交于 2020-01-10 17:40:09
一、什么是数据倾斜 对 Spark/Hadoop 这样的分布式大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。 对于分布式系统而言,理想情况下,随着系统规模(节点数量)的增加,应用整体耗时线性下降。如果一台机器处理一批大量数据需要120分钟,当机器数量增加到3台时,理想的耗时为120 / 3 = 40分钟。但是,想做到分布式情况下每台机器执行时间是单机时的1 / N,就必须保证每台机器的任务量相等。不幸的是,很多时候,任务的分配是不均匀的,甚至不均匀到大部分任务被分配到个别机器上,其它大部分机器所分配的任务量只占总得的小部分。比如一台机器负责处理 80% 的任务,另外两台机器各处理 10% 的任务。 『不患多而患不均』,这是分布式环境下最大的问题。意味着计算能力不是线性扩展的,而是存在短板效应: 一个 Stage 所耗费的时间,是由最慢的那个 Task 决定。 由于同一个 Stage 内的所有 task 执行相同的计算,在排除不同计算节点计算能力差异的前提下,不同 task 之间耗时的差异主要由该 task 所处理的数据量决定。所以,要想发挥分布式系统并行计算的优势,就必须解决数据倾斜问题。 二、数据倾斜的危害 当出现数据倾斜时,小量任务耗时远高于其它任务,从而使得整体耗时过大,未能充分发挥分布式系统的并行计算优势。   另外,当发生数据倾斜时,部分任务处理的数据量过大

分布式大数据系统概览(HDFS/MapReduce/Spark/Yarn/Zookeeper/Storm/SparkStreaming/Lambda/DataFlow/Flink/Giraph)

痴心易碎 提交于 2020-01-10 17:39:19
分布式大数据处理系统概览(一)   本博文主要对现如今分布式大数据处理系统进行概括整理,相关课程为华东师范大学数据科学与工程学院《大数据处理系统》,参考 大夏学堂 ,下面主要整理 HDFS/MapReduce/Spark/Yarn/Zookeeper/Storm/SparkStreaming/Lambda/DataFlow/Flink/Giraph 有关的内容。 分布式大数据处理系统大纲 分布式大数据处理系统概览(一): HDFS/MapReduce/Spark 分布式大数据处理系统概览(二): Yarn/Zookeeper 分布式大数据处理系统概览(三): Storm/SparkStreaming 分布式大数据处理系统概览(四): Lambda/DataFlow/Flink/Giraph   第一节部分主要总结分布式系统的目标、性质;简要介绍几种分布式计算的编程模型;介绍计算机进程与线程关系及远程调用方式;介绍文件系统DFS、介绍Hadoop的文件系统HDFS;介绍分布式计算批处理系统MapReduce和Spark。 0.绪论 0.1分布式系统的目标 0.2 大数据的五个特性(5V) (1)数量Volume (2)种类Variety (3)价值Value (4)真实性Veracity (5)速度Velocity 0.3 分布式计算生态圈 0.4分布式计算底层系统 (1

Spark SQL数据加载和保存实例讲解

你。 提交于 2020-01-10 14:28:32
一、前置知识详解 Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作, Load:可以创建DataFrame, Save:把DataFrame中的数据保存到文件或者说与具体的格式来指明我们要读取的文件的类型以及与具体的格式来指出我们要输出的文件是什么类型。 二、Spark SQL读写数据代码实战 import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import org.apache.spark.sql.*; import org.apache.spark.sql.types.DataTypes; import org.apache.spark.sql.types.StructField; import org.apache.spark.sql.types.StructType; import java.util.ArrayList; import java.util.List; public class