随笔分类 - Spark
摘要:搭建Spark源码调试环境 1.调试环境 可以根据官网的Spark 3.2的pom依赖查看各组件的版本 Mac + Jdk1.8 + Maven 3.63 + scala 2.12.15 + antlr + Spark 分支 3.2 1.1 java环境 1)编辑vi ~/.zshrc JAVA_H
阅读全文
摘要:SparkSQL读取Kudu,写出到Kafka 背景:通过spark SQL读kudu表,写入到kafka 参考:1.spark向kafka写入数据 2.通过Spark向Kafka写入数据 1. pom.xml 依赖 <dependencies> <dependency> <groupId>mysq
阅读全文
摘要:SparkSql 将CSV导入kudu pom 依赖 <properties> <spark.version>2.1.0</spark.version> <scala.version>2.11</scala.version> <project.build.sourceEncoding>UTF-8</
阅读全文
摘要:说明 当前处理只实现手动维护offset到mysql,只能保证数据不丢失,可能会重复 要想实现精准一次性,还需要将数据提交和offset提交维护在一个事务中 官网说明 Your own data store For data stores that support transactions, sav
阅读全文
摘要:使用场景 大表join小表 只能广播小表 普通的join是会走shuffle过程的,而一旦shuffle,就相当于会将相同key的数据拉取到一个shuffle read task中再进行join,此时就是reduce join。但是如果一个RDD是比较小的,则可以采用广播小RDD全量数据+map算子
阅读全文
摘要:一. 读取和保存说明 SparkSQL提供了通用的保存数据和数据加载的方式,还提供了专用的方式 读取:通用和专用 保存 保存有四种模式: 默认: error : 输出目录存在就报错 append: 向输出目录追加 overwrite : 覆盖写 ignore: 忽略,不写 二. 数据格式 1. Pa
阅读全文
摘要:一.UDF(一进一出) 步骤 ① 注册UDF函数,可以使用匿名函数。 ② 在sql查询的时候使用自定义的UDF。 示例 import org.apache.spark.sql.{DataFrame, SparkSession} /** * @description: UDF一进一出 * @autho
阅读全文
摘要:一.环境准备 1.pom文件 <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.0.0</version> </dep
阅读全文
摘要:一. SparkStreaming简介 1. 相关术语 流式数据: 指数据源源不断。 实时数据: 当前正在产生的数据。 离线数据: 过去(不是当下产生的)已经产生的数据。 实时计算: 理想上,实时计算一定是对实时数据的计算,理想期望立刻当前计算出结果(要在公司规定的时效范围内)。 离线计算: 计算通
阅读全文
摘要:1.内嵌的HIVE 如果使用 Spark 内嵌的 Hive, 则什么都不用做, 直接使用即可. Hive 的元数据存储在 derby 中, 默认仓库地址:$SPARK_HOME/spark-warehouse 实际使用中, 几乎没有不会使用内置的 Hive 2.集成外部的Hive spark-she
阅读全文
摘要:一. SparkSQL简介 Spark SQL是Spark用于结构化数据(structured data)处理的Spark模块。 Dremel > Drill(Apache) >Impala(Cloudrea) Presto(Hotonworks) Hive > Shark(对Hive的模仿,区别在
阅读全文
摘要:一.文件类型 1.Text文件 读写 读取 scala> val hdfsFile = sc.textFile("hdfs://hadoop102:9000/fruit.txt") hdfsFile: org.apache.spark.rdd.RDD[String] = hdfs://hadoop1
阅读全文
摘要:spark的分区 Spark目前支持Hash分区和Range分区,用户也可以自定义分区,Hash分区为当前的默认分区,Spark中分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle过程属于哪个分区和Reduce的个数。 注意 (1)只有Key-Value类型的RDD才有分区器
阅读全文
摘要:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序。通常跨任务的读写变量是低效的,但是,Spark还是为
阅读全文
摘要:RDD的持久化 1. RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action算子时,该RDD将会被缓存在计算节点的内存中,并供后面重用。 使用 1.rdd
阅读全文
摘要:RDD依赖关系 1. RDD血缘关系 RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数
阅读全文
摘要:1.闭包检查 从计算的角度, 算子以外的代码都是在Driver端执行, 算子里面的代码都是在Executor端执行。那么在scala的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给Executor端执行,就会发生错
阅读全文
摘要:测试准备 pom文件 <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.0.0</version> </depende
阅读全文
摘要:在RDD中默认的算子sortBy,sortByKey只能真的值类型数据升序或者降序 现需要对自定义对象进行自定义排序。 一组Person对象 /** * Person 样例类 * @param name * @param age */ case class Person1(name: String,
阅读全文