- 博客(47)
- 资源 (10)
- 收藏
- 关注
原创 17,关于spark的一些参数优化
Executor执行能力spark.executor.memory=4g用于缓存数据、代码执行的堆内存以及JVM运行时需要的内存。spark.yarn.executor.memoryOverhead=1024Spark运行还需要一些堆外内存,直接向系统申请spark.executor.cores=2单个executor上可以同时运行的task数,该参数决定了一个executor上可以并行执行几个task。Driver执行能力spark.driver.memory=4gdriver端的内存和
2021-10-22 15:23:50 1041
原创 15,spark history webUI使用姿势
Environment环境配置包括了几本的环境信息,和spark properties, 以及各种加载的jar包。了解这些配置是我们排查问题的前提。一般而言,我们通过spark-submit,以及其他方式运行spark-application, 通过Environment,我们可以看到一些基础的配置设置是否和目的一样。比如设置的spark.executor.core, spark.executor.memory是否和传参一致。关于hadoop的相关properties,在这里是看不到的,如果想要看
2021-10-13 13:48:25 659
原创 12,spark源码分析-Catalyst流程解析(5)
物理阶段生成之后,status=runnable. 下一个阶段就是物理执行计划执行之前的prepareprepare阶段及时拿到所有的准备阶段的任务,依次调用apply().里面比较重要的是EnsureRequirements(确保执行计划分区与排序正确性), CollapseCodegenStages(代码生成)。EnsureRequirements主要就是验证输出的分区(partition)和我们要的分区是不是一样,不一样在一定的条件下需要加入shuffle处理重分区,如果有排序需求还会排
2021-09-24 15:48:29 339
原创 11,spark源码分析-Catalyst流程解析(4)
此阶段是从优化过的LogicalPlan转换成物理执行计划PhysicalPlanplan 是从BaseSessionStateBuilder中实例化的。sparkPlan的继承关系:sparkPlan -> SparkStrategies -> QueryPlanner -> TreeNodesparkPlan继承了SparkStrategies, strategies()方法里面包含四部分,1:自定义实验的策略2:sparkplan扩展的一些策略。4: 一些基础操作
2021-09-24 15:47:10 632
原创 10,spark源码分析-Catalyst流程解析(3)
因为Optimizer集成了RuleExecutor,所以和Analyzer的解析逻辑是一样的,Optimizer也有大量的Rule规则。
2021-09-24 15:38:41 381
原创 9,spark源码分析-Catalyst流程解析(2)
QueryExecution在调用分析器之前,首先创建QueryExecution. QueryExecution 是spark执行查询的主链路。RuleExecutorRule是一系列的规则的接口类,比如分析器的各种分析规则,优化器的各种规则,执行器的各种规则等等。RuleExecutor 就是各种不同Rule匹配逻辑执行计划树结构并且生成新的树结构的生成器。在RuleExecutor的实现子类(如Analyzer和Optimizer)中会定义Batch(每个Batch代表着一套规则).
2021-09-24 10:59:33 773
原创 8,spark源码分析-Catalyst流程解析(1)
首先从网上找来一张图,说明一下sql解析的整个流程。sql语句经过Antlr4的语法和词法解析,生成Unresolved Logical Plan;analyzer与catalog进行绑定, 把Unresolved Logical Plan转换为Logical Plan;optimizer对Logical Plan优化,生成Optimized LogicalPlan;SparkPlan将Optimized LogicalPlan转换成 Physical Plan;prepareForExecut
2021-09-23 13:47:56 712
原创 5,spark源码分析-stage提交
我们以sparkPI的样例,我们发现reduce是一个action操作,map, parallelize是transation操作。生成两个两个RDD, MapPartitionsRDD, ParallelCollectionRDD。程序的入口从reduce函数开始。RDD.reduce我们知道map, parallelize全部是transaction操作,对应的方法体是new一个新的RDD出来,而reduce是action操作,是使用上一个RDD的实例做对应的操作,所以当前this.rdd是上一
2021-09-18 12:08:26 343
原创 4,spark源码分析-executor启动
启动的入口:org.apache.spark.executor.CoarseGrainedExecutorBackend初始化初始化各种配置和rpc的连接,从driver拉取各种配置信息。driver端的回复通过rpcEnc设置endpoint的时候,会自动化初始化CoarseGrainedExecutorBackend,调用onStart()方法,具体原理参考(https://blog.csdn.net/u013560925/article/details/80274135)把当前的ex
2021-09-10 16:09:43 341
原创 3,spark源码分析-SparkContext初始化
我们在driver中启动用户线程之后,就进入了用户的Main-class。在样例中,我们首先实例化一个SparkSession, 在sparkSession中初始化SparkContext.SparkContext实例化的过程是一个比较复杂的过程,初始化的东西比较多。包括SparkEnv, spark-history, 心跳,状态追踪,广播,资源/任务调度,底层通信。下图是从网友博客找到的SparkContext包含的比较重要的组件,以下我从SparkContext实例化过程中组件初始化的顺序对各个组
2021-09-08 14:47:55 671
原创 2,spark源码分析-ApplicationMaster启动
ApplicationMasterorg.apache.spark.deploy.yarn.ApplicationMaster.main()初始化在初始化过程中,对sparkContext进行了初始化spark.yarn.archive > spark.yarn.jars > local jars说明一下,在没有配置 spark.yarn.archive,spark.yarn.jars的时候,系统会不停的上传本地的jar包到hdfs,这个过程是很耗时的。spark.yarn.ar.
2021-09-06 16:23:01 696
原创 1,spark源码分析-spark-submit启动
运行脚本按照一般的场景下,我们使用spark自带的例子进行dubug的分析。spark-submit --conf spark.eventLog.dir=hdfs://cluster/logs/spark --conf spark.yarn.stagingDir=/data/spark/ --master yarn --deploy-mode cluster --executor-memory 2G --executor-cores 2 --queue root.default --class or
2021-08-31 18:19:36 1256
原创 kafka使用中的若干知识点
消费者订阅topic的方式KafkaConsumer.subscribe()consumer自动分配partition,内部算法保障topic-partition以最优的方式均匀分配给group下不同的consumer.consumer自动上下线/group的扩缩容可以自动通过reblance机制均衡消费。offset的管理通过group management保证。高级apioffset支持自动/手动提交在使用subscribe的时候,需要关注的点包括配置,自动/手动提交,rebalanc
2021-08-26 14:52:22 809
原创 sparksql 谓词下推功能的bug
场景描述,一个普通的sql,因为查询条件过多,导致task一直在filter, 假死的状态。spark的版本为spark-2.3sql语句CREATE TABLE `temp.tmp_st_loan_bfm_crdamt_slast_xray20210727`( `userid` bigint, `flag_type` string, `score_bairong` bigint, `bfm_used_rate` double, `lrm_credit_amt` big
2021-07-29 15:23:06 778
原创 大数据调度系统并发度控制的一些思考
问题场景:调度系统高并发的场景下(400+),不同worker的并发度有比较大的差异,高负载的worker由于任务数比较多,极端情况下cpu,内存已经打满,系统会随机kill掉一些任务的进程。导致任务状态长久不更新。在调度高峰时段,整个集群的并发度在400+, 理想状态每台worker机器的并发度40+,但是由于任务资源消耗,运行时间的原因导致任务不均衡。出现不同worker之间并发度有比较大的差异。针对以上问题涉及到调度系统的关键点:并发度控制任务分发/接收策略对于第一种场景来说,一般
2021-07-28 12:26:18 605
原创 scala的提取器和模式匹配
最近在看spark的源代码的时候,发现一些简化版的提取器,找了半天,有个不错的文档,推荐一下。https://windor.gitbooks.io/beginners-guide-to-scala/content/chp1-extractors.html
2021-06-01 16:29:57 105
转载 ManagementFactory获取jvm,os的信息
转载地址:https://blog.csdn.net/dream_broken/article/details/49759043
2021-03-22 19:06:15 101
原创 关于UDF可扩展性的思考
在业务不断的增加下,UDF的数量也是不断增多,口径问题和统一化也是日益凸显。UDF按照我们日常使用分为工具解析UDF, 业务解析UDF。一般业务解析UDF都是有一定的业务含义,只能用在某些场景下。一般而言,UDF的通常是由数据平台同学开发的。具体的口径通过数仓同学口述而来。举个例子,实时数据Flink有自己的UDF, 离线数据hive有自己的UDF. 在某一天某一块业务变更,有多个地方使用不同的UDF来解决相同的问题,而这些UDF有些是历史的包袱,有些是不同平台开发的。在修改的时候,总会存在gap.在
2021-03-08 11:57:56 329
原创 调度系统稳定和一致性保证的思考
稳定性的保证一直是数据平台服务的头等大事,越来越多的小公司通过上云的方式来保证底层服务的稳定性,通过大厂的云服务能力(数据存储服务,容器服务,计算服务等),让小公司的业务变得更加专注。以我司为例,我们去年9月份把底层数据,以及资源容器,以及部分计算服务迁移到云上,但是因为一些历史包袱以及开源的原因,比如spark, 调度系统等,云厂商提供的服务其实是不满足我们公司的业务需求的。所以必须我们自身去保证系统的稳定性。调度系统作为数据平台的大脑,稳定性保证是核心的功能,如何在出现网络问题,流量压力,服务器宕机
2021-03-05 17:45:15 868 4
原创 clickhouse在实时大屏应用的一些思考
最近我们通过实时数仓+clickhouse的方式把我们的实时大屏进行了重构,在重构的过程中我们参考了网上很多的例子,基本上大体的思路就是flink做宽表,实时使用clickhouse进行数据存储,同时批处理写入到hive。使用基本的设计架构就是这样,通过flink把消息报进行分层,主要分为两到三层,dw层主要做维表的join和冗余。业务线dw做kafka业务的打散,分业务管理以及一些指标的微聚合。流批写入到clickhouse和hive中,并且同步hive到clickhouse进行数据补偿。对
2021-02-24 16:07:11 1394
原创 调度系统批量重跑任务的思考
在调度系统中总会遇到这种场景,上游任务出现数据问题,数据缺失,数据重复。这些问题出现的原因有很多,比如上游业务问题,升级某一调度组件测试覆盖不全面,代码bug等。 出现问题的原因,问题的修复,系统针对问题的升级改造,其实这一整套的链路很复杂的逻辑。本文从几个方面对这类问题进行一些思考;问题发现在DQC规则报警没有全面覆盖的场景下,数据问题的发现大部分场景都是依靠业务方对业务的感知,或者线上用户的投诉的反馈。对于kpi任务而言,如果在上游任务执行初期监测的到,就可以立即停止链路调用,去梳理其他业务是否有
2021-01-29 14:35:05 2841
原创 关于hive隐式转换。
bl tinyint si int bigint float double dm string vc ts date ba boolean true false ...
2021-01-25 17:25:40 694 2
原创 一些存储引擎的对比
Kylin离线/准实时/实时OLAP,兼容一部分明细类的查询。对于超大规模数据量olap(广告,曝光),目前没有对手。hbase作为存储引擎,通过m/r, spark根据维度的笛卡尔积组合计算聚合的结果。准实时/实时,3.0版本实时olap对标druid,未来极有可能超越。因为主要存储计算结果数据,90%查询结果直接可以通过rowkey获取,查询效率极高(可达ms级别)。维度和指标可以通过bitmap, hll, 数据字典存储,存储占用很小。支持JDBC页面用
2021-01-12 14:15:54 860 2
原创 一些常用的linux命令
文件字符批量替换sed -i ‘s/查找字段/替换字段/g’ configurations.xml搜索文件并且字符串批量替换find ./ -name ‘*.xml’ | xargs perl -pi -e ‘s|被替换的字符|替换的字符|g’全文搜索find ./ -name ‘*.xml’ | xargs grep ‘搜索字符’根据创建时间删除文件find /home/file/ -ctime +10 -name “*.txt” -delete 删除10天之前以.txt结尾
2021-01-12 12:13:22 269 1
原创 浅谈Flink实时开发(1)
架构网上找了一个flink工作原理的例子。我们是在yarn上运行的。官方给了两种运行的模式,我们这边用的是Flink Run(yarn Session的运行规则决定了集群一次只能跑一个任务,单次任务比较合适,不适合批量长期任务运行)。客户端提交flink程序,并且向yarn申请资源,包含一个jobManager和若干个TaskManager, 每一个都是一个jvm进程。jobManager通过yarn重启失败jobManager以及zk来保证其HA(官方推荐yarn版本在2.5.0以上), 具体的逻辑
2021-01-07 01:14:25 1117
原创 浅谈数据平台迁移上云的经验教训
在今年年中,本人有幸参与了公司数据平台迁移到云上的整个过程。整个过程历时半年多,我们作为一个顶级的二流互联网公司,数据平台的发展经历了几代人的努力,已经成长的比较完善,但是依然有很多问题需要借助云的能力去解决,在这次迁移过程中,经历了各种人事变迁,业务和技术的问题。不过也让我对数据平台的整体的业务和技术架构进行了一番梳理和学习,有了深层次的认识,记录一下,给后人留下一点东西。为什么要进行迁移上云数据平台迁移的黑历史迁移的过程一点点想法为什么要进行迁移上云这是个深奥的问题。技术落后 当.
2020-12-31 13:31:46 2254 1
原创 浅谈OLAP引擎Kylin
OLAPOLAP 联机分析处理,主要支持复杂的分析操作,侧重决策的支持,对大数据量比较友好。普遍的场景就是星状模型的数据表查询,并且支持上钻,下卷的一些功能。目前OLAP有两个方向, 1:预计算的方式。直接把所有维度组合的查询都预计算好,直接拿结果数据。 2:直接查询数据明细方式,通过一些优化手段(内存计算,增加索引,数据字典等),直接操作的是原始的数据。目前在用的OLAP的一些开源引擎,kylin, druid, presto,impala, es比较多。druid主要用于实时数据,ky
2020-12-28 20:02:13 797
原创 浅谈storm实时数据的开发
部署方式1. 根据业务分集群进行部署,三台主节点nimbus(master-slave). 防止出现单点故障(一台出现故障,topology拓扑也不会挂掉,只是不能提交新的任务到集群)。2. worker节点32core+120G。每个6到10台。每台机器60Slots (flink也可以基于slot,yarn来管理,前者的好处是部署比较简单,只需要管理机器上的线程数即可,不需要额外的资源来管理容器,但是扩展内存,cpu数比较困难,集群slot的的使用率普遍会很低,除非进行代码的优化。)3. 通过
2020-12-28 19:53:30 413
原创 浅谈大数据任务调度平台
谈到大数据,避免不了hadoop, hive, spark 这些基础套件,但是在整个大数据开发的时候,我们面对的基本上都是数据开发平台和任务调度系统。数据开发平台一般直接面对业务同学,很大程度上影响业务同学的开发效率和节奏。而任务调度系统像一个黑盒一样,使用方一般都是数据开发的同学。但是任务调度系统在整个大数据体系中却占据着核心的地位。本人刚好负责一家互联网上市公司的调度平台,本文将通过几个方面介绍以下调度平台的基本功能,和在工作中的使用经验。
2020-12-28 13:54:35 8954 12
原创 浅谈大数据标签平台
起始标签平台作为数据平台建设的一部分,尤其是在互联网电商平台中,有着重要的作用。本人在公司接手并且重构了整个标签平台的核心逻辑。对标签平台有一定的了解。写这篇文章的契机是几个数仓的哥们,问到了这方面的问题,正好我也可以总结一下。本文从技术角度,通过以下几个方面来阐述标签平台的建设历程什么是特征/标签。什么是标签平台。标签平台迭代历程。标签平台核心功能的解析。标签平台未来需要解决的问题。关键字解读特征:对某个维度特征的描述,特征也是标签,只不过是原子维度的标签。标签:一组特征的组合。
2020-12-08 10:22:20 10134 2
原创 hive谓词与cbo的一些奇葩事
谓词下推Predicate Pushdown(PPD): 就是在不影响结果的情况下,尽量将过滤条件提前执行。谓词下推后,过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量,节约了集群的资源,也提升了任务的性能。Preserved Row table(在join中返回全部数据) left join 左边的部分 right join 右边的部分 full join 左边和右边的 Null Supplying table(有空数据的join) During...
2020-11-27 16:06:10 2032
原创 遇到一个hive-2.1的bug
sql语句create table temp.tmp_c1a62d85598c47e0a23a4620348385f4xray202011181 STORED AS TEXTFILE as select userid from (select userid ,count(distinct poolid) as pool_cnt from dwd_pay_market where poolid in (1839,1840
2020-11-19 14:22:13 1158
原创 快速排序
算法描述选择基准点 找到基准点位置,将小于基准值的元素和大于基准值的元素进行交换 设置新的基准点 对新基准点左右两侧递归进行这个过程步骤选择基准点,一般使用数组头部元素为基准点 从数组右边开始,循环找到第一个大于基准点的数字 从数组左边开始,循环找到第一个小于基准点的数字 交换数字 依次进行2,3,4操作,直到左边的位置小于右边的位置 设置新的基准点 对新基准点左右两侧递归进行这个过程代码public class Test { public static vo
2020-11-09 15:40:21 119
原创 数据交换dump一个隐藏bug
场景:数据交换平台,mysql全量数据导出到hive。原理:查询mysql的最大,最小id. 然后根据并发,fetch大小,分配给不同线程的mysql连接执行,查询的数据通过hive的hcatelog api接口导入到hive表。描述:1:mysql表全量数据导入到hive. 发现进度到100%了,但是系统一直无法执行成功。2:使用jstack 查看进程,发现mysql一直在resultset无法close.3于是查看mysql的进程。mysql中有10几个进程一直是sle.
2020-11-04 14:36:09 209
ClassLoader类加载机制
2013-03-05
HTTP 1.1与HTTP 1.0的比较.doc
2012-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人