随笔分类 -  spark

摘要:理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。 阅读全文
posted @ 2020-05-15 16:55 sw_kong 阅读(4726) 评论(0) 推荐(2)
摘要:转载:https://my.oschina.net/tjt/blog/2250953 在实际使用 spark + parquet 的时候, 遇到了两个不解的地方: 我们只有一个 parquet 文件(小于 hdfs block size), 但是 spark 在某个 stage 生成了4个 task 阅读全文
posted @ 2020-05-14 09:59 sw_kong 阅读(1274) 评论(0) 推荐(0)
摘要:前言 有同事问到,Spark读取一张Hive表的数据Task有一万多个,看了Hive表分区下都是3MB~4MB的小文件,每个Task只处理这么小的文件,实在浪费资源浪费时间。而我们都知道Spark的Task数由partitions决定,所以他想通过repartition(num)的方式来改变分区数, 阅读全文
posted @ 2020-05-03 12:04 sw_kong 阅读(2579) 评论(0) 推荐(0)
摘要:转载自网易范欣欣 http://hbasefly.com/ 最近想来,大数据相关技术与传统型数据库技术很多都是相互融合、互相借鉴的。传统型数据库强势在于其久经考验的SQL优化器经验,弱势在于分布式领域的高可用性、容错性、扩展性等,假以时日,让其经过一定的改造,比如引入Paxos、raft等,强化自己 阅读全文
posted @ 2020-05-02 17:29 sw_kong 阅读(379) 评论(0) 推荐(0)
摘要:代码示例: package cn.com.kong.streaming; import kafka.utils.ZkUtils; import org.I0Itec.zkclient.ZkClient; import org.I0Itec.zkclient.ZkConnection; import 阅读全文
posted @ 2020-03-19 08:46 sw_kong 阅读(852) 评论(0) 推荐(0)
摘要:在Spark Streaming程序中,我们经常需要使用有状态的流来统计一些累积性的指标,比如各个商品的PV。简单的代码描述如下,使用mapWithState()算子: val productPvStream = stream.mapPartitions(records => { var resul 阅读全文
posted @ 2020-03-13 15:32 sw_kong 阅读(737) 评论(0) 推荐(0)
摘要:场景描述 如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。那么我就需要一个东西保存历史状态State。 首先区分一下两个概念,state一般指一个具体的task/operator的状态。而checkpoint则表示了一个Job,在一个特定时刻的一份全局状态 阅读全文
posted @ 2020-03-13 15:02 sw_kong 阅读(2021) 评论(0) 推荐(0)
摘要:使用SparkThrfitServer结合Hive来做即席查询,那么会遇到这样的问题,一个数据量很大的查询SQL把所有的资源全占了,导致后面的SQL都等待,尽管在等待的SQL只需要几秒就能完成。 表数据量 3亿+条,36G左右(partquet+snappy) sql语句 sql1 且不要管sql合 阅读全文
posted @ 2020-03-12 11:27 sw_kong 阅读(1626) 评论(0) 推荐(0)
摘要:Spark提供了HashPartitioner和RangePartitioner两种分区策略 ,这两种分区策略在很多情况下都适合我们的场景。但是有些情况下,Spark内部不能符合咱们的需求,这时候我们就可以自定义分区策略。为此,Spark提供了相应的接口,我们只需要扩展Partitioner抽象类, 阅读全文
posted @ 2020-03-10 14:08 sw_kong 阅读(2700) 评论(0) 推荐(0)
摘要:官网:http://spark.apache.org/docs/2.3.0/rdd-programming-guide.html#understanding-closures- Spark中一个非常难以理解的概念,就是在集群中分布式并行运行时操作的算子外部的变量的生命周期 通常来说,这个问题跟在RD 阅读全文
posted @ 2020-03-09 14:41 sw_kong 阅读(1129) 评论(1) 推荐(1)
摘要:静态分区裁剪(Static Partition Pruning) 用过 Spark 的同学都知道,Spark SQL 在查询的时候支持分区裁剪,比如我们如果有以下的查询: SELECT * FROM Sales_iteblog WHERE day_of_week = 'Mon' Spark 会自动进 阅读全文
posted @ 2020-03-04 16:04 sw_kong 阅读(3554) 评论(0) 推荐(1)
摘要:广播变量 先来简单介绍下spark中的广播变量: 广播变量允许开发者缓存一个只读的变量在每台机器上面,而不是每个任务保存一份拷贝。例如,利用广播变量,我们能够以一种更有效率的方式将一个大数据量输入集合的副本分配给每个节点。Spark也尝试着利用有效的广播算法去分配广播变量,以减少通信的成本。 一个广 阅读全文
posted @ 2020-02-28 14:19 sw_kong 阅读(2997) 评论(0) 推荐(0)
摘要:spark动态资源调整其实也就是说的executor数目支持动态增减,动态增减是根据spark应用的实际负载情况来决定。 开启动态资源调整需要(on yarn情况下) 1.将spark.dynamicAllocation.enabled设置为true。意思就是启动动态资源功能 2.将spark.sh 阅读全文
posted @ 2020-01-22 16:16 sw_kong 阅读(9546) 评论(0) 推荐(0)
摘要:场景:推送过来的数据文件数量很多,并且每个只有10-30M的大小 spark读取hdfs一般都是用textfile(),但是对于这种情况,如果使用textFile默认产生的分区数将与文件数目一致,产生大量的任务。 对应这种小文件,spark提供了一个特殊的api, wholeTextFiles(), 阅读全文
posted @ 2020-01-21 13:34 sw_kong 阅读(1797) 评论(0) 推荐(0)
摘要:Apache Spark由于其出色的性能、简单的接口和丰富的分析和计算库而获得了广泛的行业应用。与大数据生态系统中的许多项目一样,Spark在Java虚拟机(JVM)上运行。因为Spark可以在内存中存储大量数据,因此它主要依赖于Java的内存管理和垃圾收集(GC)。但是现在,了解Java的GC选项 阅读全文
posted @ 2020-01-21 13:10 sw_kong 阅读(1868) 评论(0) 推荐(0)
摘要:环境:CDH5.13.3 spark2.3 在提交任务之后,发现executor运行少量几台nodemanager,而其他nodemanager没有executor分配。 测试环境通过spark-shell模拟如下: 第一次尝试分配6个exeutor,具体如下 spark2-shell \ --dr 阅读全文
posted @ 2020-01-21 10:25 sw_kong 阅读(1238) 评论(0) 推荐(0)
摘要:监控spark应用的方式比较多,比如spark on yarn可以通过yarnClient api监控。这里介绍的是spark内置的一种监控方式 如果是sparkStreaming,对应的则是streamingListener package cn.com.kong; import org.apac 阅读全文
posted @ 2020-01-17 13:50 sw_kong 阅读(3507) 评论(0) 推荐(0)
摘要:/** * Returns a new Dataset that has exactly `numPartitions` partitions, when the fewer partitions * are requested. If a larger number of partitions i 阅读全文
posted @ 2020-01-17 09:50 sw_kong 阅读(734) 评论(0) 推荐(1)
摘要:转载自网易范欣欣http://hbasefly.com Join背景介绍 Join是数据库查询永远绕不开的话题,传统查询SQL技术总体可以分为简单操作(过滤操作-where、排序操作-limit等),聚合操作-groupBy等以及Join操作等。其中Join操作是其中最复杂、代价最大的操作类型,也是 阅读全文
posted @ 2020-01-10 09:38 sw_kong 阅读(391) 评论(0) 推荐(0)
摘要:spark aggregate源代码 /** * Aggregate the elements of each partition, and then the results for all the partitions, using * given combine functions and a 阅读全文
posted @ 2020-01-07 16:28 sw_kong 阅读(275) 评论(0) 推荐(0)