大数据开发 Airflow跨dag依赖的特殊情况 在使用跨dag依赖task的时候,通常情况下是依赖的dag的execution_date小于当前dag的execution_date的,如果依赖的task是在将来执行的(execution_date大于当前dag的execution_date),这时候该怎么办呢?假设 dag1 是每天 0:30 执行,比如 execution_date 为 2023-08-18 00:30:00 yuziyue 18 Aug 2023 · 2 min read
大数据开发 Flink 如何使用广播变量(批处理) Flink 如何使用广播变量(批处理) 一. 广播变量介绍 广播变量用于批计算。Flink支持广播变量,可以将数据广播到TaskManager上,数据存储在内存中,这样可以减缓大量的shuffle操作,使用广播变量同时也可以节省内存。 某个算子使用广播变量后,该算子内部的任何函数都可以使用这个广播变量。 yuziyue 8 Aug 2023 · 2 min read
大数据开发 Flink 如何实现双流 join 连接 Flink 如何实现双流 join 连接 一. join() join() 即inner join,算子提供的语义为"Window join",即按照指定字段和(滚动/滑动/会话)窗口进行 inner join,支持处理时间和事件时间两种时间类型。left join 可以使用 coGroup 实现。二. coGroup() 使用 coGroup,不管能不能匹配上,都会把原始数据传递,下面的示例使用 coGroup 实现了 left join 的功能。 yuziyue 8 Aug 2023 · 5 min read
大数据开发 Spark task多线程资源争抢问题 Spark task多线程资源争抢问题 在多个task同时读取 object 单例的内部非线程安全的对象时会报错,示例代码如下: 这个对象是线程不安全的,但是在task里面的多个线程会共用这个对象所有可能会有问题 val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 单个 partition 顺序执行的不会出现争抢问题 yuziyue 8 Aug 2023 · 1 min read
大数据开发 Flink 自定义 aggregate 总结 reduce和aggregate都是增量聚合,它们的区别如下 AggregateFunction 输入输出元素类型可以不相同。 ReduceFunction 输入输出元素类型相同 AggregateFunction它有三个参数:输入类型(IN),累加器类型(ACC)和输出类型(OUT),需要实现4个方法,所有的方法都是在同一个组里面:ACC merge(ACC a, ACC b); 合并两个累加器 yuziyue 6 Aug 2023 · 3 min read
大数据开发 Anaconda 的安装与使用指南 Anaconda 的安装与使用指南 anaconda miniconda conda 这三者有什么区别,他们之间是什么关系呢?conda 是一个包和环境管理工具,被打包在了 anaconda 和 miniconda 里面,所以安装完 anaconda 和 miniconda 后直接使用 conda 命令行就行了。conda 命令默认是没有补全功能的,安装 conda-bash-completion 让 conda 命令实现补全功能。 yuziyue 4 Aug 2023 · 6 min read
大数据开发 Hive Group By 的实现原理总结 Hive Group By 的实现原理总结 Group By是一种常用的操作,用于对数据进行分组并对每个分组进行聚合计算。hive 默认设置了hive.map.aggr=true,会在mapper端先group by一次,最后把结果merge起来,为了减少reducer处理的数据量。在 map 端,将group by的字段作为输出的key,存入环形缓冲区 yuziyue 4 Aug 2023 · 2 min read
大数据开发 Hive ORC 文件存储格式详解 ORC文件是自描述的,它的元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗,目前也被Spark SQL、Presto等查询引擎支持,但是Impala对于ORC目前没有支持,仍然使用Parquet作为主要的列式存储格式。2015年ORC项目被Apache项目基金会提升为Apache顶级项目。 yuziyue 2 Aug 2023 · 13 min read
大数据开发 MySQL 流程控制函数总结 MySQL 流程控制函数总结 这两种方式都支持多个WHEN value THEN result 的形式,当有多个时: 按顺序从前往后判断,当有一个WHEN为真时,后面的WHEN都不执行了,直接结束该CASE语句,到END除结束。继续判断下一行的输入。else 不写时,不满足任何条件时返回 null yuziyue 31 Jul 2023 · 1 min read
大数据开发 flink 如何自定义 source 数据源 Flink 如何自定义 Source 数据源 Apache Flink 提供了自定义 Source 的能力,使用户可以根据自己的需求实现数据源的逻辑。自定义Source是通过实现 Flink 的 SourceFunction接口来实现的。一. 单并行度DataSource 单并行度source实现SourceFunction,并且单并行度source不允许使用setParallelism方式设置并行度。创建MySource 如果 run 方法不会退出,那么就是一个无限的数据流 yuziyue 31 Jul 2023 · 2 min read
大数据开发 flink window窗口概念与使用总结 Flink 之 window 窗口概念与使用 当调用window或windowAll方法时,所传入的参数就是Window Assigner(窗口分配器),其作用是决定划分什么样类型的窗口,即以何种条件划分窗口,输入的数据以何种方式分配到窗口内,窗口如何触发等等。针对计数窗口来说,主要使用CountWindowAll、CountWindow,直接传入一个window的数据条数据。 yuziyue 31 Jul 2023 · 10 min read
大数据开发 Flink实战最常用算子合集详解 keyBy不是算子,只是一个分区的方法。将数据流按照key分成不相交的流,由 DataStream 转换为 KeyedStream。很多的算子都必须要分组以后才可以继续计算,比如:window process等。split 与 select 注意:最新版本的 flink 已经取消了split和select,可以使用测流输出(side output)来实现。 yuziyue 31 Jul 2023 · 3 min read
大数据开发 Hive Join 的实现原理总结 一. 概要说明 Hive中的Join可分为Reduce Join(Reduce阶段完成join,也叫Common Join)和Map Join(Map阶段完成join)。 二. Hive Reduce Join 如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Reduce Join,即在Reduce阶段完成join,整个过程包含Map、Shuffle、Reduce阶段。 yuziyue 31 Jul 2023 · 3 min read
大数据开发 Hive Explain 输出详细总结 一个 HIVE 查询被转换为由一个或多个 stage 组成的序列,即有向无环图 DAG。这些 stage 可以是 MapReduce stage,也可以是负责元数据存储的 stage,也可以是负责文件系统的操作(比如移动和重命名)的 stage。 从最外层开始,包含两个大的部分:stage dependencies(各个stage之间的依赖性)和 stage plan(各个stage的执行计划) yuziyue 31 Jul 2023 · 4 min read
大数据开发 什么是 hive 动态分区 Hive 的动态分区是指在 Hive 表中,分区字段的值 是在数据加载过程中动态生成的。1. 创建表时指定分区字段 首先在创建表时指定分区字段 -- 设置为非严格模式,动态分区的模式默认为 strict -- strict 模式表示必须指定至少一个分区为静态分区 -- nonstrict 模式表示允许所有的分区字段都可以使用动态分区 yuziyue 31 Jul 2023 · 2 min read
大数据开发 zookeeper 核心概念与架构总结 ZooKeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能,ZooKeeper可以保证如下分布式一致性特性。从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到ZooKeeper中去。 yuziyue 31 Jul 2023 · 6 min read
大数据开发 zookeeper Java API 客户端 // 查询 zookeeper 节点数据 bytes = client .getData() .storingStatIn(stat) .forPath("/test-node"); // 删除 zookeeper 节点 // 获取 zookeeper 所有子节点 // 更新 zookeeper 节点 // 判断 zookeeper 节点是否存在 yuziyue 31 Jul 2023 · 1 min read
大数据开发 zookeeper 命令行客户端 zookeeper 命令行客户端 一. 登录 使用 zkCli 连接 zookeeper 二. 创建 create [-s] [-e] path data acl -s 表示创建持久节点。 -e 表示创建临时节点,默认情况下不加 -s 或者 -e 时,创建的是持久节点。 path 为从根开始的路径。 data 存入的数据。 acl 用来控制权限,默认情况下不做任何权限控制。 yuziyue 31 Jul 2023 · 1 min read