Apache Spark

spark为什么这么快

做~自己de王妃 提交于 2020-04-21 07:03:22
作者:张科 网上答案都是千篇一律:数据都在内存所以快,是有误区的。 聊spark必须聊rdd, rdd 全英文 Resilient Distributed Datasets,搞懂这三个单词就完事了其实。 Resilient:能复原的,弹回的,有弹性的。谈谈spark的内存机制,spark的内存整体分外堆内内存和对外内存,而在内存的使用上又分为数据内存和运行内存,就是数据存储和程序运行。 堆内内存的管理并不完全依托与jvm,jvm对于所有的对象都要序列化为二进制字节流,本质上是就是将不连续的空间转换为连续的空间并且需要的空间也会小,相应的也就有反序列化。序列化的方式可以节省空间,但增加了读取时候计算的开销。spark的对象由于是字节流的形式,其占用的内存大小可直接计算,而对于非序列化的对象,其占用的内存是通过周期性地采样近似估算而得,即并不是每次新增的数据项都会计算一次占用的内存大小,这种方法降低了时间开销但是有可能误差较大。 因为堆内内存会有诸多限制,所以spark通过JDK Unsafe API实现堆外内存。Spark 可以直接操作系统堆外内存,减少了不必要的内存开销,以及频繁的 GC 扫描和回收,提升了处理性能。堆外内存可以被精确地申请和释放,而且序列化的数据占用的空间可以被精确计算,所以相比堆内内存来说降低了管理的难度,也降低了误差。 再说说数据内存和运行内存

spark——详解rdd常用的转化和行动操作

…衆ロ難τιáo~ 提交于 2020-04-21 06:20:06
本文始发于个人公众号: TechFlow ,原创不易,求个关注 今天是 spark第三篇 文章,我们继续来看RDD的一些操作。 我们前文说道在spark当中RDD的操作可以分为两种,一种是 转化操作(transformation) ,另一种是 行动操作(action) 。在转化操作当中,spark不会为我们计算结果,而是会生成一个新的RDD节点,记录下这个操作。只有在行动操作执行的时候,spark才会从头开始计算整个计算。 而转化操作又可以进一步分为针对元素的转化操作以及针对集合的转化操作。 针对元素的转化操作 针对元素的转化操作非常常用,其中最常用的就是map和flatmap。从名字上看这两者都是map操作,map操作我们都知道,在之前的MapReduce文章以及Python map、reduce用法的文章当中都有提及。简而言之就是可以将一个操作映射在每一个元素上。 比如假设我们有一个序列[1, 3, 4, 7],我们希望将当中每一个元素执行平方操作。我们当然可以用for循环执行,但是在spark当中更好的办法是使用map。 nums = sc.parallelize([ 1 , 3 , 4 , 7 ]) spuare = nums.map( lambda x: x * x) 我们知道map是一个转化操作,所以square 仍然是一个RDD ,我们直接将它输出不会得到结果

Spark学习记录(一)Spark 环境搭建以及worldCount示例

戏子无情 提交于 2020-04-21 05:44:08
安装Spark ------------------- 首先,安装spark之前需要先安装scala,并且安装scala的版本一定要是将要安装的spark要求的版本。比如spark2.1.0 要求scala 2.11系列的版本,不能多也不能少 1.下载spark-2.1.0-bin-hadoop2.7.tgz 地址: http://spark.apache.org/downloads.html 2.解压 Linux中: 3.环境变量 [/etc/profile] SPARK_HOME=/soft/spark PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin [source] $>source /etc/profile Windos系统中: 将spark安装目录的bin目录以及sbin目录添加到path环境变量中 4.验证spark 运行spark的bin目录中的spark-shell 5.webUI http://localhost:4040/ 注:在spark-shell中 函数.(注意“.”)可以查看api spark实现word count ------------------------ 创建测试文档test.txt内容为 hello world1 hello world2 hello world3 hello world4

Spark RPC框架源码分析(三)Spark心跳机制分析

為{幸葍}努か 提交于 2020-04-21 05:43:51
一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程。 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(一)简述 这一节我们来看看一个Spark RPC中的运用实例--Spark的心跳机制。当然这次主要还是从代码的角度来看。 我们首先要知道Spark的心跳有什么用。心跳是分布式技术的基础,我们知道在Spark中,是有一个Master和众多的Worker,那么Master怎么知道每个Worker的情况呢,这就需要借助心跳机制了。心跳除了传输信息,另一个主要的作用就是Worker告诉Master它还活着,当心跳停止时,方便Master进行一些容错操作,比如数据转移备份等等。 与之前讲Spark RPC一样,我们同样分成两部分来分析Spark的心跳机制,分为服务端(Spark Context)和客户端(Executor)。 二. Spark心跳服务端heartbeatReceiver解析 我们可以发现,SparkContext中有关于心跳的类以及RpcEndpoint注册代码。 class SparkContext(config: SparkConf) extends Logging { ...... private var _heartbeatReceiver:

Spark复习八:简述Spark运行流程以及Spark分区以及简述SparkContext

别来无恙 提交于 2020-04-21 04:18:44
1.简述Spark运行流程: 1.构建Spark Application的运行环境,启动SparkContext 2. SparkContext向资源管理器(可以是Standalone, Mesos, Yarm)申请运行Executor资源, 并启动 StandaloneExecutorbackend 3. Executor向SparkContext申请Task 4. SparkContext将应用程序分发给Executor 5. SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送 给Executor运行 6. Task在Executor上运行,运行完释放所有资源 2.简述Spark分区: Spark分区分为两个阶段: 在分布式文件系统上文件是分块存储的,将文件块发送给task,将文件进行partition分区,经过shuffle分组,shuffle分组发送给下一个Task进行运算。默认情况下,每个核心一次执行一个任务,每个分区一个任务,每次分割一个分区。 3.简述sparkContext: s parkContext是Spark的入口,相当于应用程序的main函数。 目前在一个JVM进程中可以创建多个SparkContext,但是只能有一个active级别的

前端中台名词扫盲

孤街浪徒 提交于 2020-04-21 04:16:29
中台 课堂笔记 什么是中台 以拍电影为例: 我们看到的前台就是产出的电影本身,后台是整个拍摄组,那么中台就相当于横店影视城,提供可复用的场景来供后台使用,比如拍古装、民国片对应的场景,来产出不同的电影。 前台:所见即所得 后台:复杂逻辑 中台:拥有可复用的场景的平台 中台的作用/特点 减少重复劳动、赋能、平台化 中台的划分 主要分为:前台与后台之间的中台、技术中台、业务中台、组织中台 举例: GraphQL、FireBase、Kubernetes、PostgREST、LeanCloud等 除此之外还有两种特殊的 孵化中台的中台:例如Spark、Storm等,可以孵化语音识别、人脸识别的AI中台,而这些孵化的中台可以给其它项目来用 调度中台的中台:比如淘宝会把很多中台产出的项目合成到一个时间线上,这些都是需要有一个中台来调度 涉及到的代码概念 元数据(metadata):用来描述数据的数据,比如下图中常见的请求头和响应头 高阶函数 处理函数的函数(arr.reduce) 返回函数的函数 (koa中 app.use()) Proxy server:代理服务器 ES6 Proxy: 方便开发者劫持对对象的操作 getter/setter Function call/construct 来看下面这段代码,axios,从空对象空手套白狼,来拦截get方法,一层层拦截name,method属性

Spark算子调优—基本的算子调优

≡放荡痞女 提交于 2020-04-21 04:15:44
Spark常见RDD算子调优 算子调优一:mapPartitions 算子调优二:foreachPartition优化数据库操作 算子调优三:filter与coalesce的配合使用 算子调优四:repartition解决SparkSQL低并行度问题 算子调优五:reduceByKey本地聚合 算子调优一:mapPartitions 普通的map算子对RDD中的每一个元素进行操作,而mapPartitions算子对RDD中每一个分区进行操作。如果是普通的map算子,假设一个partition有1万条数据,那么map算子中的function要执行1万次,也就是对每个元素进行操作。 如果是mapPartition算子,由于一个task处理一个RDD的partition,那么一个task只会执行一次function,function一次接收所有的partition数据,效率比较高。 比如,当要把RDD中的所有数据通过JDBC写入数据,如果使用map算子,那么需要对RDD中的每一个元素都创建一个数据库连接,这样对资源的消耗很大,如果使用mapPartitions算子,那么针对一个分区的数据,只需要建立一个数据库连接。 mapPartitions算子也存在一些缺点:对于普通的map操作,一次处理一条数据,如果在处理了2000条数据后内存不足

Spark --Spark Streaming实战 WordCount他来啦!!! updateStateByKey reduceByKeyAndWindow

无人久伴 提交于 2020-04-18 19:42:44
WordCount 需求&准备 ● 图解 ●首先在linux服务器上安装nc工具 nc是netcat的简称,原本是用来设置路由器,我们可以利用它向某个端口发送数据 yum install -y nc ●启动一个服务端并开放9999端口,等一下往这个端口发数据 nc -lk 9999 ●发送数据 话不多说!!!上代码! package cn.itcast.streaming import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream} import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.streaming.{Seconds, StreamingContext} object WordCount { def main(args: Array[String]): Unit = { //1.创建StreamingContext //spark.master should be set as local[n], n > 1 val conf = new SparkConf().setAppName("wc").setMaster("local[*]") val sc = new SparkContext(conf

Spark -- spark on kafka Receiver & Direct Kafka手动维护偏移量

自古美人都是妖i 提交于 2020-04-18 18:18:26
kafka回顾!!!上图完事! 常用命令 #启动kafka /export/servers/kafka/bin/kafka-server-start.sh -daemon /export/servers/kafka/config/server.properties #停止kafka /export/servers/kafka/bin/kafka-server-stop.sh #查看topic信息 /export/servers/kafka/bin/kafka-topics.sh --list --zookeeper node01:2181 #创建topic /export/servers/kafka/bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 3 --partitions 3 --topic test #查看某个topic信息 /export/servers/kafka/bin/kafka-topics.sh --describe --zookeeper node01:2181 --topic test #删除topic /export/servers/kafka/bin/kafka-topics.sh --zookeeper node01:2181 --delete -

美团点评基于 Flink 的实时数仓平台实践

混江龙づ霸主 提交于 2020-04-18 12:17:03
一、美团点评实时计算演进 美团点评实时计算演进历程 在 2016 年,美团点评就已经基于 Storm 实时计算引擎实现了初步的平台化。2017 年初,我们引入了 Spark Streaming 用于特定场景的支持,主要是在数据同步场景方面的尝试。在 2017 年底,美团点评实时计算平台引入了 Flink。相比于 Storm 和 Spark Streaming,Flink 在很多方面都具有优势。这个阶段我们进行了深度的平台化,主要关注点是安全、稳定和易用。从 19 年开始,我们致力于建设包括实时数仓、机器学习等特定场景的解决方案来为业务提供更好的支持。 实时计算平台 目前,美团点评的实时计算平台日活跃作业数量为万级,高峰时作业处理的消息量达到每秒 1.5 亿条,而机器规模也已经达到了几千台,并且有几千位用户正在使用实时计算服务。 实时计算平台架构 如下图所示的是美团点评实时计算平台的架构。 最底层是收集层,这一层负责收集用户的实时数据,包括 Binlog、后端服务日志以及 IoT 数据,经过日志收集团队和 DB 收集团队的处理,数据将会被收集到 Kafka 中。这些数据不只是参与实时计算,也会参与离线计算。 收集层之上是存储层,这一层除了使用 Kafka 做消息通道之外,还会基于 HDFS 做状态数据存储以及基于 HBase 做维度数据的存储。 存储层之上是引擎层,包括 Storm