
spark
spark
Knight_AL
这个作者很懒,什么都没留下…
展开
-
一文看懂Spark中Cache和CheckPoint的区别
缓存是将数据保存在主机磁盘/内存中,如果服务器宕机数据丢失,需要重新根据依赖关系计算得到数据,需要花费大量时间,所以需要将数据保存在可靠的存储介质HDFS中,避免后续数据丢失重新计算。看下面代码会打印多少条-------------------------(RDD2) 使用了CheckPoint。看下面代码会打印多少条-------------------------(RDD2) 使用了Cache。看下面代码会打印多少条-------------------------(RDD2)1.数据保存位置不一样。原创 2023-11-16 13:28:04 · 997 阅读 · 0 评论 -
spark与scala的对应版本查看
https://mvnrepository.com/artifact/org.apache.spark/spark-core总结原创 2023-11-15 13:39:26 · 2283 阅读 · 0 评论 -
Spark-Yarn模式安装部署
目录可能碰到的问题1.解压 Spark 安装包tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /export/servers2.修改名字mv spark-2.4.0-bin-hadoop2.7 spark3.进入配置文件目录conf, 配置spark-evn.shcd conf/cp spark-env.sh.template spark-env.shYARN_CONF_DIR=/export/servers/hadoop-3.1.3/etc/ha原创 2021-03-29 11:36:56 · 706 阅读 · 0 评论 -
Spark Core项目实战(3) | 页面单跳转化率统计
数据源链接:https://pan.baidu.com/s/1TtBQpQUNBebqxrrx9czxqQ 提取码:fmw6源码在github:https://github.com/lidonglin-bit/Spark-Core目录一.页面单跳转化率统计需求简介思路分析二.具体实现具体业务实现完整项目代码一.页面单跳转化率统计需求简介 计算页面单跳转化率,什么是页面单跳转换率,比如一个用户在一次 Session 过程中访问的页面路径 3,5,7,9,10,21,那么页面 3 跳到页面 5原创 2020-08-26 20:59:50 · 640 阅读 · 0 评论 -
Spark Core项目实战(2) | Top10热门品类中每个品类的 Top10 活跃 Session 统计
数据源链接:https://pan.baidu.com/s/1TtBQpQUNBebqxrrx9czxqQ 提取码:fmw6源码在github:https://github.com/lidonglin-bit/Spark-Core根据上个需求的基础上求的Top10热门品类中每个品类的 Top10 活跃 Session 统计(建议先做实战1,再做实战2)https://blog.youkuaiyun.com/qq_46548855/article/details/108198209目录一.Top10热门品类原创 2020-08-26 19:54:04 · 1194 阅读 · 0 评论 -
Spark Core项目实战(1) | Top10 热门品类
目录一.数据准备一.数据准备本实战项目的数据是采集自电商的用户行为数据.主要包含用户的 4 种行为: 搜索, 点击, 下单和支付.数据格式如下, 不同的字段使用下划线分割开_:原创 2020-08-25 09:33:57 · 1716 阅读 · 0 评论 -
Spark Core快速入门系列(10) | 累加器+广播变量
目录累加器自定义Int类型的累加器自定义map类型的累加器广播变量累加器累加器实现自定义Int类型的累加器结果为6import org.apache.spark.util.AccumulatorV2import org.apache.spark.{SparkConf, SparkContext}object Acc { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("lo原创 2020-08-21 22:01:41 · 242 阅读 · 0 评论 -
Spark Core快速入门系列(9) | Spark读取文件的切片规则
目录读取文件的切片规则如果找不到源码-分享步骤读取文件的切片规则截取了源码重要的部分//所有的文件FileStatus[] files = listStatus(job);//记录所有文件的总大小//numSlits是minPartitions=2long totalSize = 0;long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);//前部分没有配置,那么就是1 minSplitSize看源码也是1long m原创 2020-08-21 00:13:16 · 753 阅读 · 0 评论 -
Spark Core快速入门系列(8) | HashPartitioner和RangePartitioner
目录自定义Hash分区器自定义Hash分区器HashPatitioner 1.默认分区器 2.聚合算子如果没有分区器就是默认分区器对shuffle后的rdd进行重新分区原创 2020-08-20 22:38:31 · 275 阅读 · 0 评论 -
Spark Core快速入门系列(7) | RDD的持久化和检查点
目录rdd的持久化聚合算子默认缓存checkpointrdd的持久化说明1.如果不使用持久化,那么每次调用collect,都会创建一个job每个 job 总是从它血缘的起始开始计算. 所以, 会发现中间的这些计算过程都会重复的执行.2. 原因是因为 rdd记录了整个计算过程. 如果计算的过程中出现哪个分区的数据损坏或丢失, 则可以从头开始计算来达到容错的目的.接下来我们来看看除了储存在内存中,还能储存在哪里!Storage Level聚合算子默认缓存建议缓存还是要写的,养成习惯默认进行原创 2020-08-19 23:28:29 · 245 阅读 · 0 评论 -
Spark Core快速入门系列(6) | Spark序列化
目录spark的序列化关于序列化的原理Kyro序列化(建议使用)总结spark的序列化进行 Spark 进行编程的时候, 初始化工作是在 driver端完成的, 而实际的运行程序是在executor端进行的. 所以就涉及到了进程间的通讯, 数据是需要序列化的.发现Task not serializable,那么怎么回事呢?接下来有两种方法第一种方法:可以把属性的值存入到一个局部变量,然后传递局部变量第二种方法:继承serializable接口关于序列化的原理Kyro序列化(建议使用)原创 2020-08-19 22:28:35 · 275 阅读 · 0 评论 -
Spark Core快速入门系列(5) | Spark中job的划分
当遇到了宽依赖就会产生一个新的阶段我们再多增加一条repartition(宽依赖)再次查看多了一个stage总结job: 一个应用中,每碰到一个action,就会起一个job 一个应用可以有多个jobstage: 阶段. 每碰到一个宽依赖就会在这个job内创建一个新的stage (如果遇到宽依赖的时候,用的分区器和当前一样,则不会起新的) 一个job至少有一个阶段 stage划分是从后向前划分,执行一定是从前往后task 体系了执行数据分析的并行.原创 2020-08-18 23:39:49 · 974 阅读 · 0 评论 -
Spark Core快速入门系列(4) | RDD的转换(transformation)
目录Value 类型mapmapPartitions(func)map()和mapPartitions()的区别flatMap(func)glom()groupBy(func)filter(func)sample(withReplacement, fraction, seed)distinct([numTasks])coalesce(numPartitions)repartition(numPartitions)coalasce和repartition的区别sortBy(func,[ascending],原创 2020-08-18 23:04:15 · 272 阅读 · 0 评论 -
Spark Core快速入门系列(3) | RDD的依赖关系(宽依赖和窄依赖)
目录查看RDD的血缘关系查看RDD的依赖关系窄依赖宽依赖查看RDD的血缘关系查看RDD的依赖关系窄依赖窄依赖相当于OneToOne如果 B RDD 是由 A RDD 计算得到的, 则 B RDD 就是 Child RDD, A RDD 就是 parent RDD.如果依赖关系在设计的时候就可以确定, 而不需要考虑父 RDD 分区中的记录, 并且如果父 RDD 中的每个分区最多只有一个子分区, 这样的依赖就叫窄依赖一句话总结: 父 RDD 的每个分区最多被一个 子RDD 的分区使用具体来原创 2020-08-16 23:23:12 · 445 阅读 · 0 评论 -
reduceByKey和groupByKey性能上差异比较大
reduceByKey聚合groupByKey分组,如果分组的目的是为了聚合,那么应该使用聚合算子,比如reduceByKey看下面这张图就明白了原创 2020-08-15 23:36:09 · 410 阅读 · 0 评论 -
Spark Core快速入门系列(2) | Spark对集合的切片原理
话不多说,直接看源码!ctrl+左键这里就是讲怎么计算分区的接下来就举个例子吧!(30,40,50,60,70,10,20,60,90,10) 数组有10个,切片为3startend0*10/3=0(0+1)/10*3=31*10/3=3(1+1)*10/3=62*10/3=6(2+1)*10/3=10那么1分区有3个 2分区有3个 3分区有4个...原创 2020-08-15 23:06:53 · 362 阅读 · 0 评论 -
Spark Core快速入门系列(1) | 运行模式-4种
目录Local 模式使用 Spark-shell提交流程wordcount 数据流程分析:Standalone 模式配置 Standalone 模式使用 Standalone 模式运行计算 PI 的程序在 Standalone 模式下启动 Spark-shell配置 Spark 任务历史服务器(为 Standalone 模式配置)HA 配置(为 Mater 配置)Standalone 工作模式图解Yarn 模式Yarn 模式概述Yarn 模式配置Mesos 模式几种运行模式的对比Local 模式Loca原创 2020-08-14 23:48:37 · 489 阅读 · 0 评论 -
Structure streaming-kafka sink
import org.apache.spark.sql.SparkSessionobject KafkaSink { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[*]") .appName("test") .getOrCreate() import spark.implicits._ val原创 2020-06-23 22:53:16 · 253 阅读 · 0 评论 -
Structure streaming-file sink
存储输出到目录中 仅仅支持 append 模式需求: 把单词和单词的反转组成 json 格式写入到目录中import org.apache.spark.sql.SparkSessionobject FileSink { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[1]") .appName("Test")原创 2020-06-23 22:50:10 · 197 阅读 · 0 评论 -
Structure streaming-Append,Complete,Update的区别
Append 模式(默认)默认输出模式, 仅仅添加到结果表的新行才会输出.采用这种输出模式, 可以保证每行数据仅输出一次.在查询过程中, 如果没有使用 watermask 机制, 则不能使用聚合操作. 如果使用了 watermask 机制, 则只能使用基于 event-time 的聚合操作.watermask 用于高速 append 模式如何输出不会再发生变动的数据. 即只有过期的聚合结果 才会在 Append 模式中被"有且仅有一次"的输出.Complete 模式每次触发, 整个结果表的数据都原创 2020-06-23 22:43:34 · 1119 阅读 · 1 评论 -
Structure streaming-DF/DS 不支持的操作
到目前, DF/DS 的有些操作 Streaming DF/DS 还不支持.多个Streaming 聚合(例如在 DF 上的聚合链)目前还不支持limit 和取前 N 行还不支持distinct 也不支持仅仅支持对 complete 模式下的聚合操作进行排序操作仅支持有限的外连接有些方法不能直接用于查询和返回结果, 因为他们用在流式数据上没有意义. count() 不能返回单行数据, 必须是 s.groupBy().count() foreach() 不能直接使用, 而是使用: ds.w原创 2020-06-23 22:37:42 · 234 阅读 · 0 评论 -
Structure streaming-join内外连接
模拟的静态数据:list 30zs 10ww 15模拟的流式数据:list,nanzs,nvww,nanimport org.apache.spark.sql.SparkSessionobject StreamingStatic { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[*]") .appNam原创 2020-06-23 22:21:07 · 283 阅读 · 0 评论 -
Structure streaming-去除重复数据
根据唯一的 id 实现数据去重.意思就是输出过的id,下次再次输入就不会显示了数据`1,2019-09-14 11:50:00,dog1 2,2019-09-14 11:51:00,dog2 1,2019-09-14 11:55:00,dog3 3,2019-09-14 11:53:00,dog4 1,2019-09-14 11:50:00,dog5 4,2019-09-14 11:45:00,dog6import java.sql.Timestampimport org.apach原创 2020-06-23 22:13:50 · 427 阅读 · 1 评论 -
Structure streaming-watermark 机制总结
watermark 在用于基于时间的状态聚合操作时, 该时间可以基于窗口, 也可以基于 eventtimeb本身.输出模式必须是 append 或 update . 在输出模式是 complete 的时候(必须有聚合), 要求 每次输出所有的聚合结果. 我们使用 watermark 的目的是丢弃一些过时聚合数据, 所以 complete 模式使用 wartermark 无效也无意义.在输出模式是 append 时, 必须设置 watermask 才能使用聚合操作. 其实, watermask 定 义了.原创 2020-06-23 21:59:01 · 497 阅读 · 0 评论 -
Structure streaming-window(窗口)操作
import java.sql.Timestampimport org.apache.spark.sql.SparkSessionobject window1 { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[*]") .appName("BasicOperation") .getOrCreate()原创 2020-06-23 21:56:19 · 549 阅读 · 0 评论 -
Structure streaming-操作执行sql(json数据)
{"name": "Michael","age": 29,"sex": "female"}{"name": "Andy","age": 30,"sex": "male"} {"name": "Justin","age": 19,"sex": "male"} {"name": "Lisi","age": 18,"sex": "male"} {"name": "zs","age": 10,"sex": "female"} {"name": "zhiling","age": 40,"sex": "fem原创 2020-06-23 21:50:23 · 288 阅读 · 0 评论 -
Structure Streaming-RateResource
以固定的速率生成固定格式的数据, 用来测试 Structured Streaming 的性能.import org.apache.spark.sql.SparkSessionobject rateSource { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[*]") .appName("rateSource")原创 2020-06-22 23:14:29 · 275 阅读 · 0 评论 -
Structure Streaming-通过 Batch 模式创建 Kafka 工作流
这种模式一般需要设置消费的其实偏移量和结束偏移量, 如果不设置 checkpoint 的情况下, 默 认起始偏移量 earliest, 结束偏移量为 latest.该模式为一次性作业(批处理), 而非持续性的处理数据.import org.apache.spark.sql.SparkSessionobject Kafkabatch { def main(args: Array[String]): Unit = { val spark = SparkSession .build原创 2020-06-22 23:12:53 · 274 阅读 · 0 评论 -
Structure Streaming-Kafka source
导入依赖:<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql-kafka-0-10_2.11</artifactId> <version>2.4.3</version> </dependency>import org.apache.spark.sql.SparkS原创 2020-06-22 23:08:36 · 237 阅读 · 0 评论 -
Structure Streaming-file source
读取普通文件夹内的文件数据import org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.streaming.Triggerimport org.apache.spark.sql.types.StructTypeobject SourceFile { def main(args: Array[String]): Unit = { val spark = SparkSession.builder()原创 2020-06-22 23:01:47 · 131 阅读 · 0 评论 -
Structure Streaming-单词计数
为了使用稳定新的 Structure Streaming, 我们使用新版本.本案例是从一个网络端口中读取数据, 并统计每个单词出现的数量.导入依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.3</version>原创 2020-06-22 22:51:36 · 245 阅读 · 0 评论 -
NoSuchMethodError: scala.collection.mutable.Buffer.empty()Lscala/collection/GenTraversable
Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.mutable.Buffer$.empty()Lscala/collection/GenTraversable;原因就是版本不匹配,我当时用的scala版本是2.13.2,是最新的,整了一天,结果换一个低版本2.11.8就可以了怎么换低版本...原创 2020-06-21 23:13:25 · 3183 阅读 · 0 评论 -
取消Spark中打印日志
将spark中的conf目录下的log4j.properties放到ieda中的resources下将INFO WARN替换成ERROR替换快捷键ctrl+r原创 2020-06-20 23:44:21 · 1936 阅读 · 0 评论 -
SparkStreaming-有状态的数据转换
DStream上的原语与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及各种Window相关的原语。无状态转化操作无状态转化操作就是把简单的RDD转化操作应用到每个批次上,也就是转化DStream中的每一个RDD。部分无状态转化操作列在了下表中。注意,针对键值对的DStream转化操作(比如 reduceByKey())要添加import S原创 2020-06-20 23:39:59 · 489 阅读 · 0 评论 -
SparkStreaming-从kafka采集数据进行消费
用法及说明在工程中需要引入 Maven 工件 spark- streaming-kafka_2.10 来使用它。包内提供的 KafkaUtils 对象可以在 StreamingContext 和 JavaStreamingContext 中以你的 Kafka 消息创建出 DStream。由于 KafkaUtils 可以订阅多个主题,因此它创建出的 DStream 由成对的主题和消息组成。要创建出一个流数据,需要使用 StreamingContext 实例、一个由逗号隔开的 ZooKeeper 主机列表字符原创 2020-06-20 23:25:14 · 611 阅读 · 0 评论 -
SparkStreaming-自定义数据源
用法及说明需要继承Receiver,并实现onStart、onStop方法来自定义数据源采集。案例实操自定义数据源,实现监控某个端口号,获取该端口号内容。代码实现import java.io.{BufferedReader, InputStreamReader}import org.apache.spark.SparkConfimport org.apache.spark.storage.StorageLevelimport org.apache.spark.streaming.receiv原创 2020-06-20 23:20:16 · 482 阅读 · 0 评论 -
Streaming-WordCount案例实操
1.需求:使用netcat工具向9999端口不断的发送数据,通过SparkStreaming读取端口数据并统计不同单词出现的次数2.添加依赖<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>2.1.1</version></depen原创 2020-06-20 23:17:51 · 327 阅读 · 0 评论 -
Spark-Hive数据库
Apache Hive是Hadoop上的SQL引擎,Spark SQL编译时可以包含Hive支持,也可以不包含。包含Hive支持的Spark SQL可以支持Hive表访问、UDF(用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在Spark SQL中包含Hive的库,并不需要事先安装Hive。一般来说,最好还是在编译Spark SQL时引入Hive支持,这样就可以使用这些特性了。如果你下载的是二进制版本的 Spark,它应该已经在编译时添加了 Hive 支持。若原创 2020-06-19 23:32:53 · 434 阅读 · 0 评论 -
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning
外部连接hive,启动spark出现错误一看跟tez有关把/spark/conf/hive.site.xml修改一下将先前的tez改成mr再次启动spark就成功了原创 2020-06-19 23:30:25 · 1597 阅读 · 1 评论 -
Spark-JDBC
Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中。注意:需要将相关的数据库驱动放到spark的类路径下。mv mysql-connector-java-5.1.27-bin.jar /export/servers/spark/jars/(1)启动spark-shell bin/spark-shell(2)从Mysql数据库加载数据方式一val jdbcDF = spark.read原创 2020-06-19 22:36:32 · 342 阅读 · 0 评论