
Spark 实战系列
文章平均质量分 74
Spark成为大数据领域必备计算引擎已是不争的事实,可以说,无论你是大数据工程师,还是机器学习等算法工师,Spark都是必须要掌握的计算引擎,这个专栏主要是生产环境各种问题的解决方案,性能调优以及源码分析相关的文章,温馨提示订阅后可以阅读spark系列和flink系列的所有文章
JasonLee实时计算
博主一直从事大数据开发的工作,工作经验非常丰富,目前主要专注于 Flink 实时计算领域,博客里面主要分享 spark 和 flink 的实战系列和源码分析的文章,欢迎交流和沟通,也欢迎关注我,希望和你一起学习,共同进步!
展开
-
【Spark 实战系列】Spark 使用 BulkLoad 同步数据到 hbase 排序优化
最近群里有同学问我 spark 用 bulk 写入 hbase 的时候报错,因为 rowkey 排序的问题,今天带大家分析一下这个问题,先看下面的 demo。原创 2022-11-20 14:49:28 · 1473 阅读 · 0 评论 -
【Spark 实战系列】sparkstreaming 任务出现堆积如何优化?(流量突然大增资源不够怎么办?)
在日常的生产中,什么情况下会出现数据堆积呢?原创 2022-11-18 15:39:02 · 1228 阅读 · 0 评论 -
【Spark 实战系列】Phoenix 整合 spark 进行查询分析
Phoenix 是一个开源的 HBASE SQL 层。它不仅可以使用标准的 JDBC API 替代 HBASE client API 创建表,插入和查询 HBASE,也支持二级索引、事物以及多种 SQL 层优化。原创 2022-11-17 22:20:01 · 914 阅读 · 0 评论 -
【Spark 实战系列】sparkstreaming 中使用 StreamingListener 完成程序的异常报警功能
上一篇文章中说了 StreamingListener 的使用,可以自己获取到很多的信息,比如程序的处理延迟,调度延迟,在流式的任务中,报警是非常重要的,比如程序运行延迟太大,或者调度延迟变大,都会对程序的稳定性造成影响,我们需要及时的知道这些信息,做出相应的处理,下面就来看一下如何基于 StreamingListener 完成对 sparkstreaming 程序异常的监控报警功能(代码还是之前的)。原创 2022-11-17 22:00:35 · 771 阅读 · 0 评论 -
【Spark 实战系列】SparkStreaming 累加器的使用
累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。如果你想知道处理成功了多少条,失败了多少条,可以定义两个累计器,一个放在程序处理的最后面,失败的在catch里面进行累计,就可以了,需要注意的是,如果你把程序停了,在启动后,累计器会初始化,不会从上次的结果出接着累计,如果你想要让他接着累计的话,可以把每个批次的结果保存到第三方存储,然后第二次启动的时候,直接把第一个批次的累计器的结果和之前保存的结果相加就好了。原创 2022-11-17 21:47:31 · 1211 阅读 · 0 评论 -
【Spark实战系列】spark sql 如何读取多个路径下的多个 json 文件
在使用sparksql的时候我们经常会遇到这样的需求,读取一个目录下的所有json文件,甚至可能要读取很多个不同目录下的多个json文件,这篇文章就来介绍一下怎么读取多个目录的多个文件先来看一下spark.read.json的5个重载方法json方法有5个,其中有两个被标记为废弃状态,这个方法还是非常丰富的,可以读取单个目录,可以读取多个目录,还可以传入一个RDD,里面是路径,也可以传入一个dataset. 下面来看一下具体的实现.package sqlimport org.ap.原创 2020-07-17 23:07:27 · 1946 阅读 · 0 评论 -
【Spark实战系列】Spark SQL 读取 hbase 映射到 hive 表的数据
这篇文章主要来介绍一下用Spark SQL 如何读取hbase映射到hive的表,有的时候我们的数据存储在hbase中,但是想要用spark去分析,这时候就要用spark读取hbase的数据,spark读取hbase中的数据有很多种方式,今天来介绍一种比较方便的方法.之前也用newAPIHadoopRDD的方式读取过hbase,但是这种方式读取后是一个RDD,虽然通过RDD也可以注册成表,但是...原创 2020-02-29 01:53:04 · 2699 阅读 · 0 评论 -
【Spark实战系列】sparkstreaming 中动态广播变量的使用
在实际的项目中,我们一般都会把配置信息放在配置文件或者存到第三方存储中,然后在程序中去读取,但是有的时候我们想修改这些信息,修改完必须要重启job才能生效,那是不是太麻烦了,那有没有办法修改完不重启job就能生效呢?其实我们可以用sparkstreaming的动态广播变量,比如某个配置需要十分钟更新一次,那我们可以在driver端初始化这个变量,在excetors端获取这个变量(注意exceto...原创 2019-07-05 22:24:55 · 2050 阅读 · 0 评论 -
【Spark实战系列】spark 的 map 和 flatMap 有什么区别?
spark中很常用的两个transformation算子map和flatmap,很多人都不是特别清楚他们之间的区别,今天就简单来说一下:我们先来看下面一个demo:package sparkimport org.apache.spark.{SparkConf, SparkContext}object TestDemo { def main(args: Array[String...原创 2019-02-27 22:53:10 · 1818 阅读 · 0 评论 -
【Spark实战系列】spark 各种报错汇总以及解决方案(持续更新中)
这篇文章主要记录下spark中遇到的各种问题,以及解决方法(以后会持续的更新)1.File does not exist. Holder DFSClient_NONMAPREDUCE_-67513653_1 does not have any open files今天早上发现程序报了一个这个错误,目前还没找到报错的原因,先记录一下吧.2.org.apache.kafka.clients...原创 2019-01-30 15:12:25 · 6145 阅读 · 0 评论 -
org.apache.spark.rdd.MapPartitionsRDD cannot be cast to org.apache.spark.streaming.kafka010.HasOffse
最近有很多同学来问我这个问题,说我的代码啥也没改呀,昨天晚上还运行的好好的,第二天早上再运行就报错了,org.apache.spark.rdd.MapPartitionsRDD cannot be cast to org.apache.spark.streaming.kafka010.HasOffsetRanges,怎么都运行不了,这个错相信大家都非常的熟悉,就是一个类型转换异常,从报错上看呢,说...原创 2019-01-05 21:42:17 · 4896 阅读 · 0 评论 -
【Spark实战系列】sparkstreaming 消费多个 topic 数据写入不同的 hive 表
这几天有人问关于怎么把不同的topic的数据写入到hive的不同的表里,我写了一个简单的demo,大家可以参考一下,package hiveimport java.io.Fileimport org.apache.kafka.clients.consumer.ConsumerRecordimport org.apache.kafka.common.serialization.Stri...原创 2019-05-10 18:08:22 · 4920 阅读 · 10 评论 -
Spark 和 Flink 全方面对比(谁是下一代大数据流计算引擎?)
最近也是有很多同学问我spark和flink到底谁好,应该怎么选择,这也是近年来被问的最多的问题,也是经常被拿来比较的,今天就简单的做一个对比,我没有要挑起spark和flink之间的战争,社区间取长补短也好,互相抄袭也罢,我尽量站在一个公平的角度对待他们.下面会从多个方面对两者进行分析(当然有不全面),希望对大家有所帮助.篇幅较长,望大家耐心阅读.Spark简介Spark的历史比较悠久,...原创 2018-12-18 20:19:34 · 48121 阅读 · 26 评论 -
【Spark实战系列】sparkstreaming 消费 kafka0.10 中的 LocationStrategies 和 ConsumerStrategies 代表的是什么含义?
LocationStrategies新的Kafka使用者API将预先获取消息到缓冲区。因此,出于性能原因,Spark集成将缓存的消费者保留在执行程序上(而不是为每个批处理重新创建它们),并且更喜欢在具有适当使用者的主机位置上安排分区,这一点很重要。在大多数情况下,您应该使用LocationStrategies.PreferConsistent,如上所示。这将在可用执行程序之间均匀分配分区。...原创 2019-03-13 14:18:44 · 5973 阅读 · 4 评论 -
【Spark实战系列】spark 如何实现自定义分区策略
spark默认是提供了两种分区器,HashPartitioner和RangePartitioner,但是有的时候不能满足我们实际的需求,这个时候我们可以自定义一个分区器,也非常的简单.看下面一个demo,把key是偶数的放到一个分区,key是奇数的放到另一个分区.package sparkimport org.apache.spark.{Partitioner, SparkConf, S...原创 2019-03-22 12:51:39 · 2565 阅读 · 0 评论 -
【spark实战系列】Spark SQL 中如何使用 UDAF
什么是UDAF?UDAF(User Defined Aggregate Function),即用户定义的聚合函数,聚合函数和普通函数的区别是什么呢,普通函数是接受一行输入产生一个输出,聚合函数是接受一组(一般是多行)输入然后产生一个输出,即将一组的值想办法聚合一下。类似于sum操作,spark的udf使用看这里直接看下面的demo,计算1-10的平均值,代码也比较简单package ...原创 2019-04-01 12:09:08 · 965 阅读 · 0 评论 -
【Spark实战系列】spark 读取 hbase 数据(newAPIHadoopRDD方式)
用spark读取hbase数据的方法有很多种,今天就用spark内置的方法newAPIHadoopRDD来实现了一个简单的demo,代码非常简单,就不加注释了.spark写入hbase的可以看之前的两篇文章https://blog.youkuaiyun.com/xianpanjia4616/article/details/85301998,https://blog.youkuaiyun.com/xianpanjia...原创 2019-04-09 18:23:59 · 6635 阅读 · 6 评论 -
【Spark实战系列】idea 里面远程提交 spark 任务到 yarn 集群
直接看我的公众号吧不想在复制了:https://mp.weixin.qq.com/s/Rwz5uAI-TfnTBpppsMTfBg欢迎大家关注我的公众号:如果有写的不对的地方,欢迎大家指正,如果有什么疑问,可以加QQ群:340297350,更多的Flink和spark的干货可以加入下面的星球...原创 2019-08-17 00:31:50 · 4154 阅读 · 5 评论 -
【Spark实战系列】structuredstreaming 消费 kafka 数据实现简单的 wordcount
最近也是有很多同学问我,StructuredStreaming结合kafka的使用,我简单的写了一个wordcount的demo,后续会有更加具体和详细的介绍,今天先来一个简单的demo吧.代码在本地可以直接跑通.添加依赖: <dependency> <groupId>org.apache.spark</groupId> ...原创 2018-08-19 22:25:04 · 2869 阅读 · 9 评论 -
【Spark实战系列】sparkstreaming 实时写入 Hbase(saveAsNewAPIHadoopDataset) 方法
之前的博客中也写过sparkstreaming批量写入hbase,今天主要介绍一下用新的API写入Hbase,直接看代码吧:package hbaseimport kafka.PropertiesScalaUtilsimport net.sf.json.JSONObjectimport org.apache.hadoop.hbase.client.{Put, Result}impo...原创 2018-12-27 19:49:25 · 4732 阅读 · 5 评论 -
【Spark实战系列】spark sql 中 UDF 使用教程
UDF(User Defined Function):spark SQL中用户自定义函数,用法和spark SQL中的内置函数类似;是saprk SQL中内置函数无法满足要求,用户根据业务需求自定义的函数。hive中UDF的使用请看这里下面看一个UDF在sparksql中的使用的简单demo:package sparkimport org.apache.spark.sql.{Row,...原创 2018-12-10 19:35:56 · 3551 阅读 · 0 评论 -
【Spark实战系列】sparksql 中 dataframe 的用法总结
Spark SQL 是 Spark 处理结构化数据的一个模块.与基础的 Spark RDD API 不同, Spark SQL 提供了查询结构化数据及计算结果等信息的接口.在内部, Spark SQL 使用这个额外的信息去执行额外的优化.有几种方式可以跟 Spark SQL 进行交互, 包括 SQL 和 Dataset API.当使用相同执行引擎进行计算时, 无论使用哪种 API / 语言都可以快...原创 2018-12-08 12:10:53 · 999 阅读 · 1 评论 -
spark的广播变量和累加器的用法
今天我们主要来说一下spark的广播变量和累加器的具体使用,先来看一下官网的介绍:共享变量通常,当在远程集群节点上执行传递给Spark操作(例如map,reduce)的函数时,它将在函数中使用的所有变量的单独副本上工作.这些变量将复制到每台计算机,并且远程计算机上的变量更新不会传播回驱动程序.支持跨任务的通用,读写共享变量效率低下.但是,Spark确实为两种常见的使用模式提供了两种有限类型...原创 2018-09-16 12:00:02 · 3564 阅读 · 0 评论 -
【Spark实战系列】sparkstreaming 的 reduceByKeyAndWindow 窗口函数的用法详解
今天我们主要来说一下spark中reduceByKeyAndWindow窗口函数的使用方法;先看一下官网的图片吧:这个是sparkstreaming提供的窗口计算,允许你在一个滑动的窗口中进行计算,所有这些窗口操作都需要两个参数 -windowLength和slideInterval。(窗口长度-窗口的持续时间,滑动间隔- 执行窗口操作的间隔)比如说我们现在要每隔2秒,统计前3...原创 2018-09-02 15:55:19 · 8573 阅读 · 7 评论 -
【Spark实战系列】sparkstreaming 实时写数据到 elasticsearch
简单的写了一个sparkstreaming入es的demo,直接看代码吧:package sparkimport kafka.{PropertiesScalaUtils, RedisKeysListUtils}import kafka.streamingRedisHive.{dbIndex, kafkaStreams}import org.apache.kafka.common.se...原创 2018-08-30 10:07:39 · 6057 阅读 · 9 评论 -
【Spark实战系列】spark 中 reparation 和 coalesce 的用法和区别以及源码分析
今天主要来说一下reparation和coalesce的用法和区别:先看一下下面的代码吧:package testimport org.apache.spark.{SparkConf, SparkContext}object RddTest { def main(args: Array[String]): Unit = { val conf = new SparkCo...原创 2018-08-25 17:44:38 · 17899 阅读 · 3 评论 -
【Spark实战系列】sparkstreaming 同时消费多个 topic 的数据实现 exactly-once 语义
最近很多人问我,sparkstreaming怎么消费多个topic的数据,自己维护offest,其实这个跟消费一个topic是一样的,但还是有很多问我,今天就简单的写一个demo,供大家参考,直接上代码吧,已经测试过了.我把offest存到redis里了,当然也可以保存在zk,kafka,mysql,hbase中都可以,看自己的选择.(用了3个topic,每个topic5个partition.)...原创 2018-08-15 18:38:43 · 9733 阅读 · 22 评论 -
【Spark实战系列】sparkstreaming 写入 kafka 性能上不去该如何优化?
在实际的项目中,有时候我们需要把一些数据实时的写回到kafka中去,一般的话我们是这样写的,如下:kafkaStreams.foreachRDD(rdd => { if (!rdd.isEmpty()) { rdd.foreachPartition(pr => { val properties = new Properties()...原创 2018-08-05 17:17:52 · 5711 阅读 · 4 评论 -
【Spark实战系列】spark-submit 提交 spark 任务的具体参数配置说明
今天我们主要来说一下spark-submit的时候一些重要的参数的配置,和spark提交的两种模式;spark提交任务常见的两种模式:1,local[k]:本地使用k个worker线程运行saprk程序.这种模式适合小批量数据在本地调试代码用.(若使用本地的文件,需要在前面加上:file://)2,spark on yarn模式:(1)yarn-client模式: 以client模式...原创 2018-07-06 20:48:24 · 16345 阅读 · 4 评论 -
【Spark实战系列】sparkstreaming 结合 sparksql-2.x 实时写数据到 hive
今天主要来介绍一下SparkSql,2.x新版本操作hive的一个写法.Spark SQL 的功能之一是执行 SQL 查询.Spark SQL 也能够被用于从已存在的 Hive 环境中读取数据废话不多说,直接上代码:package sparkimport java.io.Fileimport java.utilimport kafka.{PropertiesScalaUtil...原创 2018-07-08 14:24:00 · 8463 阅读 · 0 评论 -
【Spark实战系列】sparkstreaming 中 UpdateStateByKey 和 mapWithState 算子的使用(spark的状态管理)
今天我们主要来说一下sparkstreaming带状态的操作,updateStateByKey和mapWithState这两个方法,先看一下官网的介绍:UpdateStateByKey操作该updateStateByKey操作允许您在使用新信息持续更新时保持任意状态。要使用它,您必须执行两个步骤。 定义状态 - 状态可以是任意数据类型。 定义状态更新功能 - 使用函数指定如...原创 2018-09-16 21:46:18 · 2441 阅读 · 0 评论 -
【Spark实战系列】spark 中动态广播变量的使用
今天来说一下spark,动态广播变量的用法,如果对广播变量用法不清楚的可以查看这个博客,在实际项目中,有时候我们的广播变量是动态的,比如需要一分钟更新一次,这个也是可以实现的,我们知道广播变量是在driver端初始化,在excetors端获取这个变量,但是不能修改,所以,我们可以在driver端进行更新这个变量,具体的代码实现如下所示:package testimport java.sq...原创 2018-10-01 00:10:37 · 11275 阅读 · 34 评论 -
【Spark实战系列】spark 的 stage 是如何划分的 看这一篇文章就够了
最近有很多人问我,spark中的stage是怎么划分的?到底是根据什么把一个job分为多个stage的,那我们今天就用最通俗易懂的语言给大家分析一下,帮助大家的理解.我们都知道spark的job是根据action算子触发的,遇到action算子就会起一个job,job里面又划分了很多个stage,然后每一个stage里面运行了很多个task.请大家先记住一句话,stage的划分依据就是看是否产...原创 2018-12-01 15:20:02 · 6997 阅读 · 8 评论 -
【spark实战系列】spark 结合实例分析 stage 的划分过程
昨天在群里有一个同学问了一个spark中关于stage的一个问题,关于spark中stage的划分可以看这个,当时我大致看了一下,简单的回答了一下他,可能说的也不太清楚,今天把这个问题写了一个小demo,总结了一下.问题是这样的,从oracle中读取一个表,然后对某个字段进行重分区,再从oracle中读取另外一张表,同样也对某一个字段进行重分区,最后进行两个df的join操作,然后提交,他对u...原创 2018-12-04 19:27:01 · 2492 阅读 · 7 评论 -
【Spark实战系列】spark 算子详解史上最全
我们都知道spark的编程是非常丰富的,这都要归功于它丰富的算子,再加上scala面向函数式编程的特点,就使得spark程序开发起来非常的方便,你想怎么写就怎么写,你想怎么玩就能怎么玩.当然了你也可以用java,python,R语言,spark都是支持的.先来说一下什么是RDD.弹性分布式数据集 (RDD)spark中很重要的一个概念RDD(弹性分布式数据集)它是可以执行并行操作且跨集群节...原创 2018-11-29 20:27:59 · 6518 阅读 · 0 评论 -
【spark实战系列】spark 任务调度 FIFO 和 FAIR 的详解及使用
今天我们主要来分析一下spark的任务调度,Spark中的调度模式主要有两种:FIFO和FAIR。默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待前面的任务执行。而FAIR(公平调度)模式支持在调度池中为任务进行分组,不同的调度池权重不同,任务可以按照权重来决定执行顺序。spark的调度模式可以通过spark.scheduler.mode进行设置。在D...原创 2018-11-24 00:23:47 · 3569 阅读 · 0 评论 -
【Spark实战系列】spark 中 repartition 和 partitionBy 的源码分析
今天来介绍一下spark中两个常用的重分区算子,repartition 和 partitionBy 都是对数据进行重新分区,默认都是使用HashPartitioner,区别在于partitionBy 只能用于 PairRdd,但是当它们同时都用于 PairRdd时,效果也是不一样的,下面来看一个demo.package testimport org.apache.log4j.{Leve...原创 2018-11-21 20:06:55 · 18172 阅读 · 0 评论 -
local-dirs usable space is below configured utilization percentage/no more
最近新搭建了spark2.3 on yarn的集群,遇到这么一个问题,刚开始没有仔细看,最后才发现是由于datanode节点的磁盘空间不足,造成的,查看了一下机器的磁盘使用,发现确实是没有空间了,已经使用了98%,清理了一下磁盘的空间,或者给磁盘扩容就可以解决这个问题,如下图所示.箭头所指地方,有一个Unhealthy Nodes,这一块会有一个提示,点击进去就有详细的信息.当然我这个现在...原创 2018-10-28 18:48:00 · 3287 阅读 · 0 评论 -
【Spark实战系列】sparkstreaming 实时写入 hive 后合并小文件问题
今天主要来说一下sparksql写入hive后小文件太多,影响查询性能的问题.在另外一篇博客里面也稍微提到了一下,但还是感觉要单独说一下,首先我们要知道hive里面文件的数量=executor-cores*num-executors*job数,所以如果我们batchDuration的设置的比较小的话,每天在一个分区里面就会生成很多的小文件,我们在hive里面查询的时候就会非常的影响性能,下面介绍两...原创 2018-09-28 19:16:39 · 9468 阅读 · 6 评论 -
java.util.ConcurrentModificationException: KafkaConsumer is not safe for multi-threaded access
最近在项目中遇到一个错,搞了很长时间才找到原因,记录一下,主要报错的代码如下:val rdd1 = r.filter(x=>x.value().contains("history_price")).map(y=>{ val json = JSONObject.fromObject(y.value()) json.remove("hi...原创 2018-09-22 12:43:03 · 5156 阅读 · 0 评论