
Spark
Spark
LittleMagics
Flinker @ JD.com
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何周期性清除Spark Streaming流的状态
年关临近,各种杂事很多,开启短文模式,春节假期过后再恢复正常。在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: val productPvStream = stream.mapPartitions(records => { var result ...原创 2020-01-19 23:22:04 · 243 阅读 · 0 评论 -
Greenplum-Spark连接器(GSC)简介
前言我司算是Greenplum大户,虽然笔者不负责数仓,但是也少不得和它打交道。除了写pgSQL查询之外,Spark SQL能够使可用性更加丰富。Pivotal官方提供了Greenplum-Spark Connector(GSC)以打通GP和Spark,本文做个概述。简单架构与配置极简的架构图如下所示。http://greenplum-spark.docs.piv...原创 2020-01-14 22:39:10 · 3217 阅读 · 4 评论 -
Spark Streaming/Flink广播实现作业配置动态更新
前言在实时计算作业中,往往需要动态改变一些配置,举几个栗子:实时日志ETL服务,需要在日志的格式、字段发生变化时保证正常解析;实时NLP服务,需要及时识别新添加的领域词与停用词;实时风控服务,需要根据业务情况调整触发警告的规则。那么问题来了:配置每次变化都得手动修改代码,再重启作业吗?答案显然是否定的,毕竟实时任务的终极目标就是7 x 24无间断运行。Spark St...原创 2019-11-27 21:33:52 · 724 阅读 · 0 评论 -
利用HanLP与Flink/Spark做实时中文分词
这两天又开始忙起来了,继续写小短文。最近刚刚接了一个实时舆情监控的任务,大体思路是实时接入并处理各微信群内用户的发言。一是从中发现规律,为各群用户生成画像,方便做推广;二是及时将用户的不满与抱怨及时上报给业务方。显然,千里之行的第一步就是将用户的发言做词法分析——通俗来讲就是“分词”。HanLP(主页见这里,项目repo见这里)是目前Java环境下非常流行的中文NLP工具集。要...原创 2019-11-14 22:39:28 · 1091 阅读 · 0 评论 -
浅谈Spark SQL语句解析与基于规则优化(RBO)
前言大数据领域“SQL化开发”的风气方兴未艾,这是因为SQL是一种通用、学习成本低的语言,并且还有较强的数据描述能力。不少大数据框架早已支持了SQL化开发,如Spark、Flink、Kafka等。之前笔者操刀的多数Spark程序都是用传统的RDD API写的,Spark SQL用得很少,Flink也如是。最近抽空对这两门“SQL”做了一些了解,并且断断续续研究了Spark SQ...原创 2019-11-08 22:51:43 · 1602 阅读 · 0 评论 -
利用VisualVM监控Spark Driver/Executor
VisualVM是我们平时最常用的Java应用监控和性能分析工具,功能很丰富。我们有时会利用它来监控Spark作业,主要是Driver和Executor的运行情况。VisualVM支持jstatd和JMX两种方式连接远程JVM,本文简单叙述一下方法。jstatd方式在服务器的$JAVA_HOME/bin目录下新建jstatd.all.policy文件,并写入以下内容。gr...原创 2019-05-31 23:19:11 · 393 阅读 · 0 评论 -
解决Spark Streaming写入HDFS的小文件问题
今天仍然处于感冒状态,打开电脑随便写一篇,然后滚回床上休息。我们都知道,在HDFS中不宜存储大量的小文件。所谓小文件,就是大小远小于dfs.block.size的文件。如果有大量小文件的话,会浪费block,使元数据增加,挤占宝贵的NameNode内存。另外,大文件能够发挥磁盘顺序读写的优势,小文件会产生很多随机读写,性能下降。在我们的数仓体系中,有一部分业务的日志数据来源是R...原创 2019-05-18 23:31:21 · 1684 阅读 · 0 评论 -
深入理解Spark Streaming流量控制及反压机制
目录流量控制简介Spark Streaming流控基本设置Spark Streaming反压机制的具体实现动态流量控制器基于PID机制的速率估算器通过RPC发布流量阈值借助Guava令牌桶完成流量控制The End流量控制简介在流式处理系统中,流量控制(rate control/rate limit)是一个非常重要的话题。对系统进行流控,主要目的是...原创 2019-05-04 22:46:06 · 476 阅读 · 0 评论 -
Spark Tungsten-sort shuffle write流程解析
Tungsten简介tungsten-sort这个名字作为一种排序方法,听起来有点怪异。下面简单介绍一下Tungsten。Project Tungsten(“钨丝计划”)是DataBricks在3~4年前提出的Spark优化方案。由于Spark主要用Scala来开发,底层依赖JVM,因此不可避免地带来一些额外的性能开销(所谓overhead)。Tungsten致力于优化Spar...原创 2019-03-16 23:54:07 · 1394 阅读 · 0 评论 -
Spark bypass sort shuffle write流程解析
#1 - o.a.s.shuffle.sort.BypassMergeSortShuffleWriter.write()方法有意思的是,BypassMergeSortShuffleWriter类是用Java写的,而不是Scala。 @Override public void write(Iterator<Product2<K, V>> record...原创 2019-03-13 19:26:22 · 1961 阅读 · 0 评论 -
Spark基本sort shuffle write流程解析
shuffle write入口先回忆一下基础知识:Spark作业执行的单元从高到低为job→stage→taskstage分为ShuffleMapStage与ResultStage,task也分为ShuffleMapTask与ResultTask调用shuffle类算子会导致stage的划分上一篇shuffle机制概述文章已经提到,ShuffleWriter都实现了w...原创 2019-03-12 22:26:23 · 1236 阅读 · 2 评论 -
Spark shuffle机制概述
shuffle及Spark shuffle历史简介shuffle,中文意译“洗牌”,是所有采用map-reduce思想的大数据计算框架的必经阶段,也是最重要的阶段。它处在map与reduce之间,又可以分为两个子阶段:shuffle write:map任务写上游计算产生的中间数据;shuffle read:reduce任务读map任务产生的中间数据,用于下游计算。下图示...原创 2019-03-11 23:27:44 · 385 阅读 · 0 评论 -
Spark任务中的log4j简单配置方法
Spark默认是集成log4j作为日志框架的,因此在我们的Spark作业中也使用log4j来输出日志。不过,如果只是简单地将自定义的log4j.properties文件扔进项目的resources文件夹,然后直接打包运行的话,会发现程序根本不会鸟它,打印出来的日志与之前完全相同,也不会输出到文件。这时可以在spark-submit的driver JVM参数中,打开log4j的调试...原创 2019-03-04 23:06:34 · 3195 阅读 · 0 评论 -
Kafka+Spark Streaming如何保证exactly once语义
在Kafka、Storm、Flink、Spark Streaming等分布式流处理系统中(没错,Kafka本质上是流处理系统,不是单纯的“消息队列”),存在三种消息传递语义(message delivery semantics),分别是:at least once:每条消息会被收到1次或多次。例如发送方S在超时时间内没有收到接收方R的通知(如ack),或者收到了R的报错,就会...原创 2019-03-03 22:59:58 · 403 阅读 · 0 评论 -
Spark的两种内存管理机制:静态内存管理与统一内存管理
在利用Spark开发各类计算任务时,Executor内存的配置永远是重中之重,因此了解Spark的内存管理机制是非常有益的。在1.6版本之前,Spark只有一种内存管理机制,即静态内存管理(StaticMemoryManager),1.6版本以后又引入了新的统一内存管理(UnifiedMemoryManager)。下面分别来看一下这两种机制的细节。静态内存管理任何一个Spar...原创 2019-02-23 19:31:00 · 761 阅读 · 1 评论 -
根据Spark源码分析job提交及stage创建流程
我们已经知道,在Spark中,一个job可以划分为一个或多个stage。而stage中的一个执行单元就叫task,与RDD的分区有对应关系。从RDD到stage再到task的调度job是由RDD的action算子触发的,比如collect()、count()、foreach()等。那么,从action算子出发,我们就可以通过源码了解job提交及stage划分流程。...原创 2019-02-20 21:43:50 · 355 阅读 · 0 评论 -
Kafka+Spark Streaming管理offset的两种方法
Kafka配合Spark Streaming是大数据领域常见的黄金搭档之一,主要是用于数据实时入库或分析。为了应对可能出现的引起Streaming程序崩溃的异常情况,我们一般都需要手动管理好Kafka的offset,而不是让它自动提交,即需要将enable.auto.commit设为false。只有管理好offset,才能使整个流式系统最大限度地接近exactly once语义。...原创 2019-02-13 22:25:12 · 812 阅读 · 0 评论 -
提交Spark作业,科学设定spark-submit参数
首先摆出我们常用的一种设定。bin/spark-submit \--class com.xyz.bigdata.calendar.PeriodCalculator \--master yarn \--deploy-mode cluster \--queue default_queue \--num-executors 50 \--executor-cores 2 \...原创 2019-02-11 22:09:14 · 456 阅读 · 0 评论