大数据开发 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
大数据开发 Flink 广播流(流处理) 当两条流需要 join 的时候,并且其中一条流的数据量很小,并且不是经常变动。此时可以将数据流较小的流作为广播流,这样的话在另外一条流的每一个Subtask里面都有了这个数据量较小的数据流。 配合 MapStateDescriptor 使用,就可以把广播流当做变量一样来使用了。 同时还可以实时更新广播流的值。 yuziyue 29 Jul 2023 · 2 min read
大数据开发 SparkSQL使用UDF和UDAF和UDTF SparkSQL使用UDF和UDAF和UDTF 一. UDF 用户自定义函数UDF(User Defined Function)UDAF(User Defined Aggregate Function),即用户定义的聚合函数,聚合函数和普通函数的区别是什么呢,普通函数是接受一行输入产生一个输出,聚合函数是接受一组(一般是多行)输入然后产生一个输出,即将一组的值想办法聚合一下。 yuziyue 29 Jul 2023 · 3 min read
大数据开发 Spark task 序列化总结 我们在 driver 中定义的数据,在 executor 中执行时是无法获取到 driver 中的数据的( 会报错Task not serializable),task 分为 ShuffleMapTask 和 ResultTask,这两种 task 都已经实现了序列化了,所以如果我读取在 driver 中定义的对象,还需要将数据序列化。 其中一种方法是使用广播变量 另一种方法是我们手动编写数据的序列化方法。 yuziyue 29 Jul 2023 · 2 min read
大数据开发 SparkStreaming Scala 示例 准备TCP连接 命令行启动 8888 端口,等待 SparkStreaming 来连接,当 SparkStreaming 启动后再这里输入内容,SparkStreaming 会立即读取输入的内容,等待 SparkStreaming 来连接 添加SparkStreaming的依赖 编写代码 lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).print() yuziyue 29 Jul 2023 · 1 min read
大数据开发 Spark 创建 DataFrame 的7种方法 Spark 创建 DataFrame 的7中方法 使用 toDF 传入参数创建DataFrame 使用 scala case class 创建DataFrame 使用 scala class 创建DataFrame 使用 java class 创建DataFrame 使用 StructType 创建DataFrame 读取 JSON 创建DataFrame 读取 CSV 创建DataFrame csv读取schema时,不需要读取整体的数据,只需要读取前几行即可 yuziyue 29 Jul 2023 · 3 min read
大数据开发 Spark 所有排序方法总结 Spark 所有排序方法总结 定义case class,在内部重写需要排序的字段 然后使用sortBy(x => x) 指定一个 tuple,安装tuple给定的字段排序 如果需要倒序,使用负号 排序方法1 排序方法2 排序方法3 排序方法4 val name = fields(0) val age = fields(1).toInt val score = fields(2).toInt Person(name, age, score) yuziyue 29 Jul 2023 · 2 min read
大数据开发 SparkStreaming连接Kafka示例 配置kafka 配置kafka,确保kafka能正常生产消息,消费消息。SparkStreaming程序 使用和 kafka 直连的方式:SparkStreaming的一个task对应一个kafka的一个partition。这个task不仅仅是读数据,还有处理的逻辑。在 map 里面可以判断这个消息来自哪个topic yuziyue 29 Jul 2023 · 2 min read
大数据开发 Hbase 性能优化总结 因为一个cf会对应一个store,每个store都有一个Memstore,当触发flush阈值后进行flush的最小单位是Region,而不是MemStore级别的,所以会有多个cf被flush,会生成多个HFile文件。并且HFile多了就会频繁触发compact。最终导致系统产生更多的I/O。批量数据写入采用 BulkLoad HBase通过rowkey、family、qualifier、TimeStamp可以对HBase中的数据进行快速定位,HBase中rowkey可以唯一标识一行记录。 yuziyue 29 Jul 2023 · 4 min read
大数据开发 Kafka 事务与 ExactlyOnce 语义 为了实现Producer的幂等语义,Kafka引入了Producer ID(即PID)和Sequence Number。每个新的Producer在初始化的时候会被分配一个唯一的PID,该PID对用户完全透明而不会暴露给用户。对于每个PID,该Producer发送数据的每个都对应一个从0开始单调递增的Sequence Number。 yuziyue 29 Jul 2023 · 8 min read
大数据开发 Kafka 使用 Java 多线程消费数据 Kafka 使用 Java 多线程消费数据 下面的示例中,使用多线程消费数据Kafka数据,并手动提交 offset 手动提交的的好处是不会丢失数据,如果程序崩溃,会重复消费部分数据,所以你的程序针对相同的数据可以幂等地运行。 表示在还没有提交过任何 offset 的时候,从什么位置开始消费数据 yuziyue 29 Jul 2023 · 1 min read
大数据开发 Kafka 生产者与消费者 JAVA API 本文总结 Kafka 生产者与消费者的 JAVA API 示例 序列化与反序列化 序列化配置 反序列化配置 1.3 ProducerRecord参数 二. 生产者 创建测试kafka ProducerRecord 消息记录可以简化参数,最简单的可以只有两个参数:topic 和 value,其他的都是用默认值。kafka消息的timestamp如果是自定义的话,不能晚于当前7天,因为晚于7天的消息会被自动删除。 yuziyue 29 Jul 2023 · 4 min read