大数据Spark技术
编写的代码顺畅运行条件,scala版本均为2.11,hadoop集群版本为2.7,win上为hadoop为2.6,spark为2.0
尘世壹俗人
做一只马喽
展开
-
spark任务报错 Could not find CoarseGrainedScheduler
最后在排查问题的时候发现,在提交任务的命令上,服务的用户提交命令中对于标准的配置格式不对,导致客户端这边没有对任务正常的识别关闭,从而在yarn释放了资源之后,才发现任务已经关闭了。记录一个spark的异常问题,提交spark任务之后,从运行结果和yarn上的日志来看,任务是成功的,但是在client中末尾出现了如下报错。这个报错在社区上有相关案例——》原创 2024-09-18 15:35:46 · 261 阅读 · 0 评论 -
spark任务优化参数整理
Hadoop_MRSpark_Corespark.executor.memory 默认值1gspark.executor.cores 默认值1核spark.executor.instances 默认值2个spark.yarn.am.memory 默认值512mspark.yarn.am.cores 默认值1核Spark_SqlFlink_CoreFlink_Sql...原创 2024-09-05 18:51:20 · 816 阅读 · 0 评论 -
SparkSql自定义函数--UDTF
最后说一点,当你有udtf的需求时,我们很少会去使用spark的基础上去自定义udtf函数,这一点刚入行的朋友或许很纳闷,但其实从名词的角度来说,spark甚至是flink框架都没有自己的udtf,但是从功能实现来讲是有的。但是spark和flink不是这样的,udtf的核心思想就是一进多出,归根结底是将一条数据进行膨胀,最终的结果还能和原数据保持联系,说到这里思想活跃的朋友可能已经反应过来了,spark和flink两个框架,自身提供了。如果你并不是要使用hive上的数据那么就不需要hive的xml文件。原创 2023-02-15 16:36:59 · 554 阅读 · 0 评论 -
Spark提交任务
Spark_Submit脚本参数Spark-submit脚本提交任务时最简易的命令格式如下:./bin/spark-submit \--master spark://localhost:7077 \任务包 任务参数而实际开发中用的一般是如下的格式./bin/spark-submit \--master yarn \--deploy-mode cluster \--driver-memory 1g \--executor-memory 1g \--executor-cores 11原创 2022-11-02 22:16:26 · 3774 阅读 · 0 评论 -
Spark mapPartitions算子使用方式
正常情况下我们使用map方法就足够了,一是使用简单,二是较为安全,mapPartitions在数据量很大的时候相当容易OOM,甚至是导致频繁GC,当然如果你资源足够且map方法对于你确实是效率不佳,那可以考虑使用mapPartitions首先先要知道mapPartitions和map有什么区别,map是直接处理单一的数据并返回,而mapPartitions是处理一个分区下的所有数据,并且它拿到的处理返回值必须是一个容器的迭代器下面开一个实例object Test { def main(args:原创 2022-05-20 17:32:39 · 1107 阅读 · 0 评论 -
如何使用PySpark开发程序
pyspark是spark的python API,本质上其实没有差别,只是开发的语言换了一下,书写的语法不一样而已,所以有Spark的Scala基础的朋友,只需要解决Python语言的书写,其他的就没有问题了想用pyspark开发需要准备一些东西1、JAVAJDK2、Hadoop3、Spark4、PyCharm ---开发工具自定义5、findspark、pyspark、py4j三个pyspark开发用的包上面的东西前三个我就不演示了,大家在本地准备好并且配置好环境变量就可以了,我这里主要是原创 2021-09-07 00:43:13 · 1345 阅读 · 0 评论 -
Spark常用算子
spark有些常用的算子我们要知道package com.wyimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}object OperatorDemo { def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf().setMaster("local").setAppName("O原创 2021-02-04 18:55:16 · 104 阅读 · 0 评论 -
SparkSql如何拉取oracle数据
首先在你的pom中添加如下依赖<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version></dependency>之后准备sparksql容器对象val spark = SparkSession .builder() .ma原创 2021-05-07 15:40:13 · 596 阅读 · 0 评论 -
SparkStreaming+Flume流计算
SparkStreaming + Flume的方式是一个早期的形式,在新版本的Spark中,并不提倡直接与Flume去对接的,但是有的时候我们任然需要这样的形式去处理数据Spark整合Flume的数据在Spark中有两种方式Poll拉与Push推,两种模式对比起来优先使用Poll模式拉模式就是Spark提供了一个sink,SparkStreaming主动的自己去channel里面取数据,根据自身条件去获取数据,稳定性好。推模式,是Flume作为缓存,存有数据。并监听Spark,如果Spark可达,就将原创 2021-03-19 15:15:55 · 228 阅读 · 0 评论 -
SparkStreaming消费Kafka数据手动提交偏移量维护在自定义环境的方式
所谓的手动管理偏移量就是用户自己定义消息何时被真正处理完,并在提交偏移量之前一般会用偏移量做一些其他的操作,好处是用户可以确保只有消息被真正处理完成后再提交偏移量。所以需要我们在代码逻辑中得到实时的偏移量,并且保证<<任务处理完成之后再提交偏移量>>这种时序性。手动管理kafka偏移量有以下优点:a)一般情况下,保证数据不丢失,不重复被消费b)可以方便地查看offset信息操作的api是OffsetRange这个类,它有untilOffset()方法,这个方法可以得到该批次数原创 2021-03-18 11:28:13 · 1160 阅读 · 4 评论 -
spark.shuffle.service.enabled使用
这是Spark on yarn时NodeManager中一个长期在运行的辅助服务,用于提升Shuffle计算性能。默认为false,表示不启用该功能。不过一般是不开启的,因为它提升的只是executor在GC等无法向外提供数据的时候,使用NodeManager中的一个辅助服务去从executor拿数据为其他需要的地方使用它,你需要在yarn-site.xml中配置如下信息<property> <name>yarn.nodemanager.aux-services<原创 2021-03-12 16:15:59 · 3280 阅读 · 0 评论 -
SparkStreaming消费Kafka的两种方式
一,receiver方式读取这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现数据的消费。receiver方式从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming启动的job会去处理那些数据。但是在默认的配置下,这种方式可能会因为底层的失败而丢失数据,因为消费时kafka的高级API是不会去维护偏移量的要启用高可靠机制,让数据零丢失,启用Spark Streaming的预写日志机制(W原创 2021-03-05 16:55:58 · 3248 阅读 · 1 评论 -
SparkStreaming如何优雅停止
Spark发展至今,对于流处理有着自己的优势,本篇博文给大家介绍一下,Spark流处理的优雅停止,作用在让计算自己停止,而非人为的暴力干预给大家写了一个流处理做字频统计,结果写入mysql,做优雅停止的实例,希望可以帮到大家,大家看代码的时候要注意一个事项,我担心大家看不懂,写代码的时候把代码写的比较宽泛,大家看懂之后,自己写的时候可以精简一下object StreamGranceStop2 { def main(args: Array[String]): Unit = { //下面的计算主体原创 2021-03-05 10:29:31 · 406 阅读 · 1 评论 -
SparkStreaming对象如何复用
SparkStreaming对象的复用方式,其实说的是迭代计算的时候,不浪费原来的SparkStreaming对象具体操作方式如下object TestStream { def main(args: Array[String]): Unit = { def createFunc():StreamingContext={ val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")原创 2021-03-04 18:31:41 · 168 阅读 · 1 评论 -
SparkStreaming怎么保存数据到关系型数据库
和Core的时候没什么区别,就是调用foreachRDD,下面是流处理做wordcount保存到mysql的例子object TestStream2 { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount") val ssc = new StreamingContext(conf, Seconds(5)原创 2021-03-04 18:27:26 · 108 阅读 · 1 评论 -
Spark框架保存数据到hive中
大数据计算可以把数据保存在hive上,稳妥的方法有两个,第一个方法是吧数据落到hdfs上先,之后hive去load,方法二是把数据写到hive的的表数据存储路径下,hive读取数据的时候直接反序列化了原创 2021-03-04 18:00:29 · 2170 阅读 · 1 评论 -
SparkSql、SparkCore保存数据到关系数据库
数据分析之后肯定要落地,一般都输落在hdfs,或者是常见的关系型数据库,这里用mysql给大家说一下其实操作起来也方便,调用方法就可以了 val prop=new java.util.Properties() prop.put("driver","com.mysql.jdbc.Driver") prop.put("user","root") prop.put("password","root") resultDF.write.jdbc("jdbc:mysql://loc原创 2021-03-04 17:45:51 · 155 阅读 · 1 评论 -
基于SparkSql实现行列转换
行列转换的其实是一个很常用的数据分析操作,用在数据的拼接与拆分上,实现一些普通的函数无法实现的效果列转行首先为大家介绍的是列转行函数,涉及到的的内建函数有,collect_list 列转行之后不去重,collect_set 列转行之后去重。 列转行对数据的要求为 column 的数据类型是 string ,使用实例如下原数据如下2018-01,项目1,1002018-01,项目2,2002018-01,项目3,3002018-01,项目3,4002018-02,项目1,10002018-原创 2021-03-04 17:33:00 · 6127 阅读 · 1 评论 -
SparkStreaming的reduceByKeyAndWindow
这个方法是window系列方法中的一个,Window系列的方法,作用就是在当前窗口的时间下再次重新开窗,用的不是很多,毕竟一个总的开窗就满足多数的数据分析需求了,大家有兴趣可以去查查这个系列的其他方法,用途都是一个意思,这里用这个方法,给大家做一个主窗口时间为5秒的基础上做每10秒统计5秒的词频操作package com.sparkstreamimport org.apache.spark.SparkConfimport org.apache.spark.streaming.dstream.{DSt原创 2021-03-03 20:28:06 · 290 阅读 · 1 评论 -
SparkStreaming的updateStateByKey
updateStateByKey是按照key做数据状态的更新,内部其实是基于option对象的,我给大家准备了一个流处理用这个方法做按照key在计算词频的例子,但是要记住,用这个方法,数据最好是key-value形式的,大家有需要可以把value做成一个自定义的classpackage com.sparkstreamimport org.apache.spark.SparkConfimport org.apache.spark.streaming.dstream.{DStream, Receiver原创 2021-03-03 20:10:25 · 402 阅读 · 1 评论 -
SparkStreaming监控一个端口的数据
Spark的流对象是有方法提供监控的 val conf = new SparkConf().setMaster("local[2]").setAppName("StreamUpdateState") val ssc = new StreamingContext(conf, Seconds(5))//只有一个参数则是开窗时间 //ssc.sparkContext.setLogLevel("ERROR") ssc.checkpoint("mycheckpoint")//chec原创 2021-03-03 19:57:38 · 294 阅读 · 2 评论 -
SparkSql拉取Hive上的数据
想要读取Hive的数据我们首先要从集群中需要xml文件获取下来,分别是core-site.xml、hdfs-site.xml、hive-site.xml,将这三个文件放在项目的resource目录下,spark运行的时候会自动读取在原本的Spark pom文件中导入spark-hive的包,大家根据自己的scala和spark的版本去选择自己合适的,我用的如下 <dependency> <groupId>org.apache.spark</grou原创 2021-03-01 21:57:46 · 1197 阅读 · 0 评论 -
为什么Spark在运行代码的时候拉取本地文件报错hdfs上不存在
你看一下你的运行环境是不是配置HADOOP_HOME,或者配置文件中配置了yarn关联,如果有那么你要在你的路径前面叫上file:///不然Spark会把路径自动变成hdfs的路径的原创 2021-02-28 22:30:41 · 667 阅读 · 0 评论 -
SparkSql怎么写
有很多人SparkSql不知道如何下手,下面我就给大家写了一个例子,帮大家回忆一下SparkSql怎么写的package com.sparksqlimport org.apache.log4j.{Level, Logger}import org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, SparkSession}case class Employee(id:String,name:String,sex:String,原创 2021-02-28 22:25:29 · 541 阅读 · 0 评论 -
SparkRDD集的partitionBy有什么用
在Spark中数据集的分区是可以控制的,一般是通过聚合方法传入分区数,但是还有另外一种方法就是RDD集的partitionBy方法这个方法的参数可以支持两种类对象,HashPartitioner或者是RangePartitioner,用的时候传入这两种类的对象就可以了,分区数则作为这两种类对象的主构造器传入不过具体使用的时候有些差别如上图展示的那样,RangePartitioner需要传入数据集本身去采样,大家可以自己试一下,他们的结果也不同,HashPartitioner就是最简单的Hash值分区原创 2021-02-28 22:17:05 · 756 阅读 · 0 评论 -
Spark自定义排序
Spark支持我们自定义,只需要继承相应的类就可以了,我在下面准备了一个用身高和年龄做二次排序的例子,希望可以帮到大家首先写一个排序类//名字 年龄 身高class People(val name: String, val age: Int, val hight: Int) extends Ordered[People] with Serializable { override def compare(that: People): Int = { //先比年龄 if(thi原创 2021-02-28 22:00:47 · 192 阅读 · 0 评论 -
大白话说一说Spark的shuffle
说到spark的shuffle,我们就不得不先提一下hadoop的shuffle,但是过程我就不说啦,有兴趣的可以看我之前发的MR原理的博文里面有说hadoop的MR shuffle的运行方式https://blog.csdn.net/dudadudadd/article/details/111593379总的来说,hadoop哪怕到现在默认的也是那么一套shuffle形式,当然hadoop也是支持你自定义分组来该shuffle结果的这个默认的shuffle处理方式就是哈希,一开始的时候spark跟着老原创 2021-02-27 20:51:38 · 1753 阅读 · 0 评论 -
Spark的三种持久化
Spark的持久化有三种,使用时应当选择最合适的哪一个cache使用方法如下 var sprakconf=new SparkConf().setMaster("local").setAppName("log") var sc=new SparkContext(sprakconf) var linesRdd= sc.textFile("C:\\log.txt") linesRdd.cache() cache将数据集持久化到内存,这种持久化相当与另一种叫做persis原创 2021-02-26 23:55:48 · 2664 阅读 · 0 评论 -
Spark的广播变量
Spark的广播变量有区别于累加器,它主要的作用是用来将一个Driver端的一个具体值,共享给所有Executor的,调用也用对应的方法取值就可以了package com.sparkcoreimport org.apache.spark.{SparkConf, SparkContext}object BroadCastTest { def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.se原创 2021-02-25 19:24:08 · 95 阅读 · 0 评论 -
Spark如何拉取Linux的文件
一般情况下,写完代码,只需要用的时候正常传参就可以了,不过要注意的是你的文件在哪里,你就在那里提交任务就可以val lineRDD: RDD[String] = spark.sparkContext.textFile(dir)//dir的值通过main方法参数进入如果有意外,可以尝试在路径的最前面用file:///需要file:///的情况,常发生在你配置了HADOOP_HOME,且Spark配置了yarn关联,所以这个时候你如果单纯的使用路径,会自动变成hdfs上的地址,很多人就是因为这个导致,本原创 2021-02-20 13:15:25 · 613 阅读 · 0 评论 -
SparkCore和SparkSql读取与保存hdfs文件的方法
第一种方式SparkCoreval conf = new SparkConf().setAppName(“File”).setMaster(“spark://IP地址:7077”)//这里你可以写local,我这样写是可以看做是在用spark-on-yarnval sc = new SparkContext(conf);val data = sc.textFile(“hdfs://IP地址:9000/文件路径”)//读取,读取时单一文件或路径都可以data.saveAsTextFile(“hdfs:原创 2021-02-20 13:03:10 · 1741 阅读 · 0 评论 -
SparkSql涉及到的RDD、DataSet、DataFrame之间的互相装换操作
三者是可以相互转换的,我总结了一些常用的转换操作,希望帮到大家package com.sparksqlimport org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}object SparkSqlDataForm { def main(args: Array[String]): Unit = { //SparkSession val spa原创 2021-02-20 09:52:41 · 175 阅读 · 0 评论 -
SparkSql怎么把数据写到文件或者是某个数据库以及用API的方式查数据
package com.sparksqlimport java.util.Propertiesimport org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, SparkSession}object DataFrameFunction { def main(args: Array[String]): Unit = { //SparkSession val spark: SparkSession =原创 2021-02-19 17:31:49 · 308 阅读 · 0 评论 -
SparkSql在最先开始的时候是怎么和RDD交互的
SparkSql在最先开始的时候是数据元与数据分开的package com.sparksqlimport org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, Row, SparkSession}import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}object DataFrameFromStuctType原创 2021-02-19 17:19:28 · 60 阅读 · 0 评论 -
SparkSql数据从RDD集转换
SparkSql的数据我们最基础的手段就是从RDD中获取,下面我们看一下如何获取pom如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apach原创 2021-02-19 16:32:00 · 189 阅读 · 0 评论 -
SparkSql如何读取parquet文件数据
parquet对于大数据来说一般出现在hadoop和hive中,作为一种数据保存的格式,使用的话也是一般通过连接hive,但是我确实是遇到过直接从hdfs上整下来的parquet文件,让你处理,所以给大家分享一下pom如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/X原创 2021-02-19 16:26:28 · 1291 阅读 · 3 评论 -
SparkSql如何拉Mysql的数据
Mysql数据库是比较常用的一个数据库了,从其中拉取数据也比较普遍,下面演示一下怎么去拉取pom如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.原创 2021-02-19 16:19:02 · 98 阅读 · 0 评论 -
SparkSql如何读取JSON数据
工作中用SparkSql读取JSON数据的情况较少,倒不是这个功能不好实现,而是大家一般都不用这个格式的,毕竟除非特殊需要不然多会直接使用最直观的数据格式pom如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x原创 2021-02-19 16:01:50 · 884 阅读 · 0 评论 -
Spark读取CSV数据
我们在日常的SparkSql开发中,会常常接处到CSV数据的拉取,通常出现在,数据库select结果导出或者是特定的处理结果pom如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati原创 2021-02-19 15:55:52 · 2410 阅读 · 0 评论 -
Spark怎么样可以拉取excel的数据
需要导入一个支持的jar。原创 2021-02-19 15:15:12 · 1666 阅读 · 8 评论