- 博客(35)
- 资源 (1)
- 收藏
- 关注
原创 基于spark sql引擎的即席查询服务
项目地址 IQL,多多支持,欢迎starIQL参考 spark sql在喜马拉雅的使用之xql的load、select、save语法实现了一套基于spark的即席查询服务优雅的交互方式,支持多种datasource/sinkspark常驻服务,基于zookeeper的引擎自动发现负载均衡,多个引擎随机执行多session模式实现并行查询基于spark的动态资源分配,...
2018-05-07 10:56:36 3688 1
原创 [Spark SQL] 源码解析之Optimizer
前言由前面博客我们知道了SparkSql整个解析流程如下:sqlText 经过 SqlParser 解析成 Unresolved LogicalPlan;analyzer 模块结合catalog进行绑定,生成 resolved LogicalPlan;optimizer 模块对 resolved LogicalPlan 进行优化,生成 optimized LogicalPlan;S...
2018-06-06 10:45:59 687
原创 [Spark SQL] 源码解析之Analyzer
前言由前面博客我们知道了SparkSql整个解析流程如下:sqlText 经过 SqlParser 解析成 Unresolved LogicalPlan;analyzer 模块结合catalog进行绑定,生成 resolved LogicalPlan;optimizer 模块对 resolved LogicalPlan 进行优化,生成 optimized LogicalPlan;S...
2018-05-30 10:35:57 789
原创 [Spark SQL] 源码解析之Parser
前言由上篇博客我们知道了SparkSql整个解析流程如下:sqlText 经过 SqlParser 解析成 Unresolved LogicalPlan;analyzer 模块结合catalog进行绑定,生成 resolved LogicalPlan;optimizer 模块对 resolved LogicalPlan 进行优化,生成 optimized LogicalPlan;S...
2018-05-28 20:01:36 2163
原创 [Spark SQL] 主要执行流程
下图便是SparkSql整个解析成RDD的流程图,红色部分便是SparkSql优化器系统Catalyst,和大多数大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等)。下面简述一下每个组成部分都做了什么,后续博客中会进行详解。 SqlParsesqlText先通过SparkSqlParser生成语法树。Spark1版本使用的是scala原生...
2018-05-25 21:06:25 2062 1
原创 Spark metrics实现KafkaSink
背景监控是Spark非常重要的一部分。Spark的运行情况是由ListenerBus以及MetricsSystem 来完成的。通过Spark的Metrics系统,我们可以把Spark Metrics的收集到的信息发送到各种各样的Sink,比如HTTP、JMX以及CSV文件。 目前支持的Sink包括:ConsoleSinkCSVSinkJmxSinkMetricsServletG...
2018-05-19 14:22:27 967
原创 Spark 实现MySQL update操作
背景目前 spark 对 MySQL 的操作只有 Append,Overwrite,ErrorIfExists,Ignore几种表级别的模式,有时我们需要对表进行行级别的操作,比如update。即我们需要构造这样的语句出来:insert into tb (id,name,age) values (?,?,?) on duplicate key update id=?,name =? ,age=...
2018-05-19 13:32:39 7482 3
原创 spark任务之Task失败监控
需求 spark应用程序中,只要task失败就发送邮件,并携带错误原因。 我的GitHub,猛戳我背景在spark程序中,task有失败重试机制(根据 spark.task.maxFailures 配置,默认是4次),当task执行失败时,并不会直接导致整个应用程序down掉,只有在重试了 spark.task.maxFailures 次后任然失败的情况下才会使程序down掉。...
2018-04-13 22:28:41 7611
原创 Spark整合HBase(自定义HBase DataSource)
背景Spark支持多种数据源,但是Spark对HBase 的读写都没有相对优雅的api,但spark和HBase整合的场景又比较多,故通过spark的DataSource API自己实现了一套比较方便操作HBase的API。写 HBase写HBase会根据Dataframe的schema写入对应数据类型的数据到Hbase,先上使用示例:import spark.implic
2018-02-02 22:10:49 2259
原创 [spark streaming] 状态管理 updateStateByKey&mapWithState
前言SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这时就需要sparkStreaming来维护一些状态,目前有两种方案updateStateByKey&mapWithState,mapWithState是spark1.6新加入的保存状态的方案,官方声称有10倍性能提升。updateStateByK
2017-12-30 17:19:17 1709
原创 [spark streaming] 动态生成 Job 并提交执行
Spark Streaming Job的生成是通过JobGenerator每隔 batchDuration 长时间动态生成的,每个batch 对应提交一个JobSet,因为针对一个batch可能有多个输出操作。概述流程:定时器定时向 eventLoop 发送生成job的请求通过receiverTracker 为当前batch分配block为当前batch生成对应的 Jobs将Jobs封装
2017-12-04 10:16:21 1726 1
原创 [spark streaming] ReceiverTracker 数据产生与存储
在Spark Streaming里,总体负责任务的动态调度是JobScheduler,而JobScheduler有两个很重要的成员:JobGenerator 和 ReceiverTracker。JobGenerator 负责将每个 batch 生成具体的 RDD DAG ,而ReceiverTracker负责数据的来源。需要在executor上运行的receiver接收数据的InputDStre
2017-12-02 21:46:47 417
原创 [spark streaming] DStream 和 DStreamGraph 解析
Spark Streaming 是基于Spark Core将流式计算分解成一系列的小批处理任务来执行。在Spark Streaming里,总体负责任务的动态调度是JobScheduler,而JobScheduler有两个很重要的成员:JobGenerator 和 ReceiverTracker。JobGene
2017-11-30 18:10:29 639
原创 [spark] 内存管理 MemoryManager 解析
概述spark的内存管理有两套方案,新旧方案分别对应的类是UnifiedMemoryManager和StaticMemoryManager。旧方案是静态的,storageMemory(存储内存)和executionMemory(执行内存)拥有的内存是独享的不可相互借用,故在其中一方内存充足,另一方内存不足但又不能借用的情况下会造成资源的浪费。新方案是统一管理的,初始状态是内存各占一半,但其中一方内存
2017-11-22 11:27:51 2273 1
原创 [spark] BlockManager 解析
概述BlockManager是spark自己的存储系统,RDD-Cache、 Shuffle-output、broadcast 等的实现都是基于BlockManager来实现的,BlockManager也是分布式结构,在driver和所有executor上都会有blockmanager节点,每个节点上存储的block信息都会汇报给driver端的blockManagerMaster作统一管理,Blo
2017-11-19 01:31:32 1164
原创 [spark] Shuffle Read解析 (Sort Based Shuffle)
本文将讲解shuffle Reduce部分,shuffle的下游Stage的第一个rdd是ShuffleRDD,通过其compute方法来获取上游Stage Shuffle Write溢写到磁盘文件数据的一个迭代器: override def compute(split: Partition, context: TaskContext
2017-11-15 10:46:50 974 1
原创 [spark] Shuffle Write解析 (Sort Based Shuffle)
从 Spark 2.0 开始移除了Hash Based Shuffle,想要了解可参考Shuffle 过程,本文将讲解 Sort Based Shuffle。ShuffleMapTask的结果(ShuffleMapStage中FinalRDD的数据)都将写入磁盘,以供后续Stage拉取,即整个Shuffle包括前Stage的Shuffle Write和后S
2017-11-09 20:19:36 1610 3
原创 [spark] 从spark-submit开始解析整个任务调度流程
spark应用程序可以以Client模式和Cluster启动,区别在于Client模式下的Driver是在执行spark-submit命令节点上启动的,而Cluster模式下是Master随机选择的一台Worker通过DriverWrapper来启动Driver的。
2017-11-01 21:59:35 2701 1
原创 [spark] Standalone模式下Master、WorKer启动流程
Spark作为分布式的计算框架可支持多种运行模式:本地运行模式 (单机)本地伪集群运行模式(单机模拟集群)Standalone Client模式(集群)Standalone Cluster模式(集群)YARN Client模式(集群)YARN Cluster模式(集群)而Standalone 作为spark自带cluster manager,需要启
2017-10-31 10:54:19 1269
原创 [spark] Task成功执行的结果处理
在文章Task执行流程 中介绍了task是怎么被分配到executor上执行的,本文讲解task成功执行时将结果返回给driver的处理流程……
2017-10-27 18:31:25 1900
原创 [spark] Task执行流程
在文章TaskScheduler 任务提交与调度源码解析 中介绍了Task在executor上的逻辑分配,调用TaskSchedulerImpl的resourceOffers()方法,得到了TaskDescription序列的序列Seq[Seq[TaskDescription]],即对某个task需要在某个executor上执行的描述,仅仅是逻辑上的,还并未真正到executor上执行,本文将从
2017-10-26 10:05:30 1363
原创 [spark] spark推测式执行
推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Task的计算结果作为最终结果,同时会干掉其他Executor上运行的实例。spark推测式执行默认是关闭的,可通过spark.speculation属性来开启。检测是否有需要推测式执行的Task在SparkContext创建了schedul
2017-10-19 20:14:49 4171 2
原创 [spark] 数据本地化及延迟调度
Spark本地化即移动计算而不是移动数据,而现实又是残酷的,不是想要在数据块的地方计算就有足够的资源提供,Spark的延迟调度应运而生,资源不够可在限制时间内不断重试,超过限制时间后还无法启动则降低要求再尝试启动……本地化级别(Locality Levels)PROCESS_LOCAL:进程本地化,代码和数据在同一个进程中,也就是在同一个executor中;计算数据的task由executor
2017-10-18 22:01:45 1299 1
原创 [spark] 调度模式(FIFO&FAIR)
spark应用程序的调度体现在两个地方,第一个是Yarn对spark应用间的调度,第二个是spark应用内(同一个SparkContext)的多个TaskSetManager的调度,这里暂时只对应用内部调度进行分析。spark的调度模式分为两种:FIFO(先进先出)和FAIR(公平调度)。默认是FIFO,即谁先提交谁先执行,而FAIR支持在调度池中再进行分组,可以有不同的权重,根据权重、资源等来
2017-10-17 15:20:18 2036
原创 [spark] TaskScheduler 任务提交与调度源码解析
在DAGScheduler划分为Stage并以TaskSet的形式提交给TaskScheduler后,再由TaskScheduler对taskSet进行调度……
2017-10-16 15:16:21 834
原创 [spark] DAGScheduler 提交stage源码解析
DAGScheduler在划分完Stage后 ,将会对stage以taskSet的形式提交给TaskScheduler……
2017-10-10 16:54:25 538
原创 [spark] DAGScheduler划分stage源码解析
概述Spark Application只有遇到action操作时才会真正的提交任务并进行计算,DAGScheduler 会根据各个RDD之间的依赖关系形成一个DAG,并根据ShuffleDependency来进行stage的划分,stage包含多个tasks,个数由该stage的finalRDD决定,stage里面的task完全相同,DAGScheduler 完成stage的划分后基于每个Stage
2017-10-07 12:47:35 746
原创 [spark] Checkpoint 源码解析
前言在spark应用程序中,常常会遇到运算量很大经过很复杂的 Transformation才能得到的RDD即Lineage链较长、宽依赖的RDD,此时我们可以考虑将这个RDD持久化。cache也是可以持久化到磁盘,只不过是直接将partition的输出数据写到磁盘,而checkpoint是在逻辑job完成后,若有需要checkpoint的RDD,再单独启动一个job去完成checkpoint,这样该
2017-10-05 22:48:02 723
原创 [spark] RDD缓存源码解析
spark的缓存机制保证了需要访问重复数据的应用(如迭代型算法和交互式应用)可以运行的更快。完整的存储级别介绍如下所示: Storage Level Meaning MEMORY_ONLY 将RDD作为非序列化的Java对象存储在jvm中。如果RDD不能被内存装下,一些分区将不会被缓存,并且在需要的时候被重新计算。这是系统默认的存储级别。 MEMORY_AND_DISK 将R
2017-10-03 20:42:05 635
原创 [spark] RDD解析
RDD(Resilient Distributed Dataset):弹性分布式数据集。特性A list of partitions (可分片)A function for computing each split (compute func)A list of dependencies on other RDDs (依赖)A Partitioner for key-value RDDs
2017-10-03 13:25:35 494
原创 Elasticsearch5.6搭建及拼音中文混合搜索实现
功能分布式的搜索引擎和数据分析引擎全文检索,结构化检索,数据分析对海量数据进行近实时的处理环境搭建 从官网下载压缩包 elasticsearch-5.6.1.tar.gz;解压 tar -zxvf elasticsearch-5.6.1.tar.gz $ES_HOME因es只能由除root以外的用户启动,则给予相应的权限,如给common用户,chown -R common:root
2017-10-03 13:24:33 6297 1
原创 Spark Streaming管理Kafka偏移量
为了让Spark Streaming消费kafka的数据不丢数据,可以创建Kafka Direct DStream,由Spark Streaming自己管理offset,并不是存到zookeeper。启用Spark Streaming的 checkpoints是存储偏移量的最简单方法,因为它可以在Spark的框架内轻松获得。 checkpoints将应用程序的状态保存到HDFS,以便在故障时
2017-09-26 22:54:47 2112
原创 爬虫框架Scrapy
一、安装1、Python2.7Linux默认都有Python,但若是2.6版本,则需要升级到2.7,升级到2.7需要以下步骤: 首先下载源tar包,可利用linux自带下载工具wget下载,如下所示: wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 下载完成后到下载目录下,解压; tar -zxvf Python-
2016-12-08 22:47:14 604
原创 自动化管理工具Rundeck
Rundeck(http://rundeck.org)是开源软件,可以帮助你自动化管理日常操作程序,Rundeck提供了许多特性,将缓解耗时的繁重任务。Rundeck允许在任意数量的节点上运行,并配套有非常方便的可视化界面 ...
2016-11-08 00:13:15 8300 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人