大数据
文章平均质量分 76
北 方~
这个作者很懒,什么都没留下…
展开
-
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 · 917 阅读 · 0 评论 -
16,spark小文件合并
1111原创 2021-10-22 15:22:50 · 1758 阅读 · 0 评论 -
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 · 539 阅读 · 0 评论 -
14,spark shuffle实现
2323原创 2021-10-13 13:47:54 · 215 阅读 · 0 评论 -
13,spark内存管理
122121原创 2021-10-12 14:04:30 · 709 阅读 · 0 评论 -
12,spark源码分析-Catalyst流程解析(5)
物理阶段生成之后,status=runnable. 下一个阶段就是物理执行计划执行之前的prepareprepare阶段及时拿到所有的准备阶段的任务,依次调用apply().里面比较重要的是EnsureRequirements(确保执行计划分区与排序正确性), CollapseCodegenStages(代码生成)。EnsureRequirements主要就是验证输出的分区(partition)和我们要的分区是不是一样,不一样在一定的条件下需要加入shuffle处理重分区,如果有排序需求还会排原创 2021-09-24 15:48:29 · 266 阅读 · 0 评论 -
11,spark源码分析-Catalyst流程解析(4)
此阶段是从优化过的LogicalPlan转换成物理执行计划PhysicalPlanplan 是从BaseSessionStateBuilder中实例化的。sparkPlan的继承关系:sparkPlan -> SparkStrategies -> QueryPlanner -> TreeNodesparkPlan继承了SparkStrategies, strategies()方法里面包含四部分,1:自定义实验的策略2:sparkplan扩展的一些策略。4: 一些基础操作原创 2021-09-24 15:47:10 · 565 阅读 · 0 评论 -
10,spark源码分析-Catalyst流程解析(3)
因为Optimizer集成了RuleExecutor,所以和Analyzer的解析逻辑是一样的,Optimizer也有大量的Rule规则。原创 2021-09-24 15:38:41 · 322 阅读 · 0 评论 -
9,spark源码分析-Catalyst流程解析(2)
QueryExecution在调用分析器之前,首先创建QueryExecution. QueryExecution 是spark执行查询的主链路。RuleExecutorRule是一系列的规则的接口类,比如分析器的各种分析规则,优化器的各种规则,执行器的各种规则等等。RuleExecutor 就是各种不同Rule匹配逻辑执行计划树结构并且生成新的树结构的生成器。在RuleExecutor的实现子类(如Analyzer和Optimizer)中会定义Batch(每个Batch代表着一套规则).原创 2021-09-24 10:59:33 · 664 阅读 · 0 评论 -
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 · 626 阅读 · 0 评论 -
7,spark源码分析-sparkSQL任务提交
1原创 2021-09-23 11:54:24 · 1046 阅读 · 0 评论 -
6,spark源码分析-task提交(2)
1212原创 2021-09-23 11:52:09 · 226 阅读 · 0 评论 -
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 · 716 阅读 · 0 评论 -
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 · 665 阅读 · 0 评论 -
大数据调度系统并发度控制的一些思考
问题场景:调度系统高并发的场景下(400+),不同worker的并发度有比较大的差异,高负载的worker由于任务数比较多,极端情况下cpu,内存已经打满,系统会随机kill掉一些任务的进程。导致任务状态长久不更新。在调度高峰时段,整个集群的并发度在400+, 理想状态每台worker机器的并发度40+,但是由于任务资源消耗,运行时间的原因导致任务不均衡。出现不同worker之间并发度有比较大的差异。针对以上问题涉及到调度系统的关键点:并发度控制任务分发/接收策略对于第一种场景来说,一般原创 2021-07-28 12:26:18 · 530 阅读 · 0 评论 -
关于UDF可扩展性的思考
在业务不断的增加下,UDF的数量也是不断增多,口径问题和统一化也是日益凸显。UDF按照我们日常使用分为工具解析UDF, 业务解析UDF。一般业务解析UDF都是有一定的业务含义,只能用在某些场景下。一般而言,UDF的通常是由数据平台同学开发的。具体的口径通过数仓同学口述而来。举个例子,实时数据Flink有自己的UDF, 离线数据hive有自己的UDF. 在某一天某一块业务变更,有多个地方使用不同的UDF来解决相同的问题,而这些UDF有些是历史的包袱,有些是不同平台开发的。在修改的时候,总会存在gap.在原创 2021-03-08 11:57:56 · 280 阅读 · 0 评论 -
调度系统稳定和一致性保证的思考
稳定性的保证一直是数据平台服务的头等大事,越来越多的小公司通过上云的方式来保证底层服务的稳定性,通过大厂的云服务能力(数据存储服务,容器服务,计算服务等),让小公司的业务变得更加专注。以我司为例,我们去年9月份把底层数据,以及资源容器,以及部分计算服务迁移到云上,但是因为一些历史包袱以及开源的原因,比如spark, 调度系统等,云厂商提供的服务其实是不满足我们公司的业务需求的。所以必须我们自身去保证系统的稳定性。调度系统作为数据平台的大脑,稳定性保证是核心的功能,如何在出现网络问题,流量压力,服务器宕机原创 2021-03-05 17:45:15 · 774 阅读 · 4 评论 -
调度系统批量重跑任务的思考
在调度系统中总会遇到这种场景,上游任务出现数据问题,数据缺失,数据重复。这些问题出现的原因有很多,比如上游业务问题,升级某一调度组件测试覆盖不全面,代码bug等。 出现问题的原因,问题的修复,系统针对问题的升级改造,其实这一整套的链路很复杂的逻辑。本文从几个方面对这类问题进行一些思考;问题发现在DQC规则报警没有全面覆盖的场景下,数据问题的发现大部分场景都是依靠业务方对业务的感知,或者线上用户的投诉的反馈。对于kpi任务而言,如果在上游任务执行初期监测的到,就可以立即停止链路调用,去梳理其他业务是否有原创 2021-01-29 14:35:05 · 2584 阅读 · 0 评论 -
关于hive隐式转换。
bl tinyint si int bigint float double dm string vc ts date ba boolean true false ...原创 2021-01-25 17:25:40 · 636 阅读 · 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 · 219 阅读 · 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 · 1029 阅读 · 0 评论 -
浅谈数据平台迁移上云的经验教训
在今年年中,本人有幸参与了公司数据平台迁移到云上的整个过程。整个过程历时半年多,我们作为一个顶级的二流互联网公司,数据平台的发展经历了几代人的努力,已经成长的比较完善,但是依然有很多问题需要借助云的能力去解决,在这次迁移过程中,经历了各种人事变迁,业务和技术的问题。不过也让我对数据平台的整体的业务和技术架构进行了一番梳理和学习,有了深层次的认识,记录一下,给后人留下一点东西。为什么要进行迁移上云数据平台迁移的黑历史迁移的过程一点点想法为什么要进行迁移上云这是个深奥的问题。技术落后 当.原创 2020-12-31 13:31:46 · 2041 阅读 · 1 评论 -
浅谈OLAP引擎Kylin
OLAPOLAP 联机分析处理,主要支持复杂的分析操作,侧重决策的支持,对大数据量比较友好。普遍的场景就是星状模型的数据表查询,并且支持上钻,下卷的一些功能。目前OLAP有两个方向, 1:预计算的方式。直接把所有维度组合的查询都预计算好,直接拿结果数据。 2:直接查询数据明细方式,通过一些优化手段(内存计算,增加索引,数据字典等),直接操作的是原始的数据。目前在用的OLAP的一些开源引擎,kylin, druid, presto,impala, es比较多。druid主要用于实时数据,ky原创 2020-12-28 20:02:13 · 734 阅读 · 0 评论 -
浅谈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 · 370 阅读 · 0 评论 -
浅谈大数据任务调度平台
谈到大数据,避免不了hadoop, hive, spark 这些基础套件,但是在整个大数据开发的时候,我们面对的基本上都是数据开发平台和任务调度系统。数据开发平台一般直接面对业务同学,很大程度上影响业务同学的开发效率和节奏。而任务调度系统像一个黑盒一样,使用方一般都是数据开发的同学。但是任务调度系统在整个大数据体系中却占据着核心的地位。本人刚好负责一家互联网上市公司的调度平台,本文将通过几个方面介绍以下调度平台的基本功能,和在工作中的使用经验。原创 2020-12-28 13:54:35 · 8431 阅读 · 12 评论 -
浅谈大数据标签平台
起始标签平台作为数据平台建设的一部分,尤其是在互联网电商平台中,有着重要的作用。本人在公司接手并且重构了整个标签平台的核心逻辑。对标签平台有一定的了解。写这篇文章的契机是几个数仓的哥们,问到了这方面的问题,正好我也可以总结一下。本文从技术角度,通过以下几个方面来阐述标签平台的建设历程什么是特征/标签。什么是标签平台。标签平台迭代历程。标签平台核心功能的解析。标签平台未来需要解决的问题。关键字解读特征:对某个维度特征的描述,特征也是标签,只不过是原子维度的标签。标签:一组特征的组合。原创 2020-12-08 10:22:20 · 9513 阅读 · 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 · 1940 阅读 · 0 评论 -
遇到一个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 · 1006 阅读 · 0 评论 -
数据平台架构
后面准备针对大数据平台架构做一些分享,先出一个整体的架构图,然后再后面的blog里面一个个细说原创 2020-11-11 17:21:04 · 186 阅读 · 0 评论 -
数据交换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 · 161 阅读 · 0 评论 -
spark AE功能控制小文件的输出数量
场景:一般我们配置spark.sql.shuffle.partition来控制reduce的个数,但是对于不同的作业,reduce个数是不同的,对于小任务,一方面是影响运行效率,另一方面对于产生的文件数有很大的影响。描述:spark自适应执行,可以动态控制shuffle read的分区数,对reduce个数进行动态调整。命令:spark.sql.adaptive.enabled 设置自适应执行 spark.sql.adaptive.minNumPostShuffle..原创 2020-10-28 12:03:24 · 1386 阅读 · 0 评论 -
kylin 权限管理
关于大数据权限的问题,一直是一个很有意思的问题。公司内部普遍使用的方式如下底层hdfs不做权限控制,控制的逻辑都在表级别。关于表的字段的控制,目前还没有做。 基础数据不做控制,权限主要在上层应用上做。通过之前的文章解决了kylin通过beeline访问hive的问题,但是随之而来的问题也产生了。是使用最高权限data用户来访问还是通过普通的用户权限来访问? 是使用lookup表做表关...原创 2019-04-30 15:40:00 · 1413 阅读 · 0 评论 -
kylin-本地远程调试源代码
一直都想在本地调试kylin的源代码。找了好久的命令收藏一下:1. 在kylin.sh加入-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9001 \### 或者下面的这个也可以,端口号自定义-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address...原创 2019-04-30 14:57:26 · 799 阅读 · 0 评论 -
kylin通过beeline连接hive踩过的坑。
之前一直是通过cli连接hive,由于系统升级需要通过beeline连接。通过官方文档升级发现升级出现报错。报错如下:找不到usr/local/hive/conf,或者usr/local/hive/lib目录。通过google搜索有没有解决方案,发现网上的说法几乎都是错误的。只能看源代码。在kylin.sh中发现加载会自动加载find-hive-dependency.sh文件。内容...原创 2019-04-30 14:49:12 · 3891 阅读 · 2 评论