![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spark
我在北国不背锅
致力于AI大模型、Java、大数据、运维及各类计算机技术为一体的知识架构
展开
-
Springboot利用SparkLauncher提交Spark任务
Spark-Submit:在一般的Spark项目中,我们通常使用Spark Job的方式提交Spark任务,通过命令行的方式提交Job,使用spark 自带的spark-submit工具提交,官网和大多数参考资料都是已这种方式提交的,提交命令示例如下:$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --原创 2021-10-08 16:43:49 · 2926 阅读 · 5 评论 -
Hadoop-3.2.0集群部署&Spark on yarn设置
集群环境准备1、关闭防火墙关闭防火墙systemctl stop firewalld.service查看防火墙状态firewall-cmd --state禁止firewall开机启动systemctl disable firewalld.service2、关闭selinuxvim /etc/selinux/configSELINUX修改为disabled3、更改主机名hostnamectl set-hostname cdh01参考:https://blog.51cto..原创 2021-09-02 16:51:47 · 2629 阅读 · 0 评论 -
SparkStreaming读取Kafka数据然后保存到Kudu\Clickhouse\InfluxDB
以下是在做预研时研究的,故没有考虑性能等,仅做了可行性测试。1、必要的变量:2、读取kafka的公共代码://设置kafkaParamsval kafkaParams=Map( "bootstrap.servers"->ConfigsUtil.getKafkaCluster, "key.deserializer" -> classOf[StringDeserializer], "value.deserializer" -> classOf[StringDeserial原创 2021-08-23 16:23:03 · 1934 阅读 · 1 评论 -
SparkStreaming读取Kafka的Json数据然后保存到MySQL
一般我们使用SparkStreaming消费kafka数据,获取到数据后解析,使用JDBC的方式写入数据库。以上的方式没什么毛病,但是当我们消费的kafka数据类型比较多样的时候,我们需要对每一类的kafka数据都要解析一遍,才能使用jdbc写入数据库。而我们如果使用sparkSQL的话,则会简单很多,于是想到了以下这种方式,同时使用了SparkStreaming和SparkSQL,SparkStreaming负责消费kafka数据,SparkSQL负责将数据写入数据库。数据示例:{“msg”:原创 2021-08-23 15:26:25 · 1989 阅读 · 0 评论 -
关于SparkSQL中concat函数的使用与一些坑
事情是这样的,在使用sparkSQL执行SQL脚本时,遇到如下的情况:nvl(concat( case WHEN zs.scxs <> 0 THEN concat( '故障发生时:距离上次巡视的时间间隔(平均):' , zs.scxs , '天,') end , case when zs.jscxs <> 0 then concat( '近三次平均巡视时间间隔(平均):' ,zs.jscxs , '天') end),原创 2021-07-22 17:48:51 · 4182 阅读 · 1 评论 -
spark on yarn报错: Futures timed out after 100000 milliseconds
问题描述:21/05/31 16:34:25 ERROR ApplicationMaster: Uncaught exception: java.util.concurrent.TimeoutException: Futures timed out after [100000 milliseconds] at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) at scala.concurrent.impl.P原创 2021-05-31 16:41:45 · 4211 阅读 · 1 评论 -
spark on yarn:due to AM Container for appattempt_xx_xx exited with exitCode:-1000
新部署的hadoop和spark集群,使用spark on yarn模式执行一个简单的spark程序包,spark程序的代码逻辑是读取oracle数据库,读取后对数据做简单处理,然后保存。比较匪夷所思的是,spark代码逻辑执行成功,经过处理的数据成功保存到数据库,但是yarn页面显示spark程序报错。报错信息如下:按这篇文章(https://www.e-learn.cn/content/wangluowenzhang/874518)的解决方法,无法解决。网上找了很多都没有找到解决方。由于是新部原创 2021-04-28 18:24:31 · 3339 阅读 · 0 评论 -
Spark创建DataFrame的几种方式
摘抄自https://blog.csdn.net/shirukai/article/details/81085642本文档仅作为记录package com.hollysys.sparkimport java.utilimport org.apache.spark.sql.types._import org.apache.spark.sql.{Row, SQLContext, SparkSession}/** * Created by shirukai on 2018/7/17 *转载 2020-09-30 15:39:56 · 1880 阅读 · 0 评论 -
SparkSQL一行转多行 一列变多列 多行转一行
项目开发中有这样的需求,原始数据如下:+--------+-----------+| name| message|+--------+-----------+|zhangsan| 4=18,33=78|| lisi|23=54,67=88|+--------+-----------+一行转多行:根据指定的标识符进行切分,然后一行转多行,以新列进行展示:val result= df.withColumn("newMessage",functions.explode(fun原创 2020-09-30 10:11:35 · 6223 阅读 · 0 评论 -
spark3.0新特性
转载文档:历时近两年,Apache Spark 3.0.0 正式版终于发布了动态分区修剪(Dynamic Partition Pruning)所谓的动态分区裁剪就是基于运行时(run time)推断出来的信息来进一步进行分区裁剪。举个例子,我们有如下的查询:SELECT * FROM dim_iteblog JOIN fact_iteblog ON (dim_iteblog.partcol = fact_iteblog.partcol) WHERE dim_iteblog.othercol &转载 2020-08-04 14:52:22 · 2284 阅读 · 0 评论 -
java.lang.NoSuchMethodError: scala.util.Properties$.coloredOutputEnabled()Z
今天在测试spark3.0的过程中,将spark环境的Scala版本提高到2.12.x版本。一开始我设置的是Scala版本是2.12.0<properties> <scala.version>2.12.0</scala.version> <spark.version>3.0.0</spark.version></properties><dependencies> &l原创 2020-08-03 16:52:04 · 3625 阅读 · 1 评论 -
Spark异常:org/codehaus/janino/InternalCompilerException
执行SparkSQL时出现异常:Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerException at org.apache.spark.sql.catalyst.expressions.codegen.GenerateSafeProjection$.create(GenerateSafeProjection.scala:197) at org.a原创 2020-07-20 16:52:06 · 8919 阅读 · 0 评论 -
Can‘t get JDBC type for struct<date:int,day:int,hours:int,minutes:int,month:int,seconds:int,time:big
使用Spark将DataFrame类型数据保存到Oracle的过程中报错:Exception in thread "main" java.lang.IllegalArgumentException: Can't get JDBC type for struct <data:int, day:int, hours:int, minutes:int, month:int, seconds:int, time:bigint, timeZoneOffset:int, year:int>Oracle原创 2020-07-20 14:52:49 · 2965 阅读 · 0 评论 -
Spark读取MySQL(Oracle)数据保存为libsvm格式
libsvm数据格式:libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1]:[value1] [index2]:[value2] …label 目标值,就是说class(属于哪一类),就是你要分类的种类,通常是一些整数。index 是有顺序的索引,通常是连续的整数。就是指特征编号,必须按照升序排列value 就是特征值,用来train的数据,通常是一堆实数组成。即原创 2020-07-14 17:11:49 · 3371 阅读 · 1 评论 -
Java分批写入大量数据到kafka,sparkStreaming实时消费kafka,完成数据下沉(Hive到Hive数据迁移/同步)
最近遇到这样的一个场景:存在两个Hadoop集群,需要将一个集群中的hive数据传输到另一个集群的hive中。且源端hive为其他公司数据源,涉及到的一定的安全和保密性。现大致思路为:Java读取源端hive—>我司kafka—>sparkStreaming读取kafka—>目标端hive代码示例:Java获取其他公司hive表数据:package com.zhbr....原创 2020-03-31 11:33:55 · 4763 阅读 · 6 评论 -
Neo4j连接spark(使用neo4j-spark-connector.jar)
(1)首先,需要自行编译添加jar包 neo4j-spark-connector_*.jar或者添加maven依赖。下载源码:https://github.com/neo4j-contrib/neo4j-spark-connector使用maven编译。或直接使用maven仓库:<!-- https://mvnrepository.com/artifact/neo4j-contr...原创 2020-03-03 09:32:00 · 4547 阅读 · 0 评论 -
Spark RDD转DataFrame并更改列column的类型
文本数据:<BaseValue::CD type=全数>@ id name value unit// 序号 基准值名 基准值 量纲# 1 CD.功率.0 100 MVA# 2 CD.电压.1000 1000 KV# 3 CD.电压.800 800 KV# 4 CD.电压.750 750 KV# 5 CD.电压.660 660 KV# 6 CD.电压.600 600 K...原创 2019-11-26 11:08:55 · 2386 阅读 · 0 评论 -
(Java、Scala)读取IDEA maven项目resource下相对路径文件
在使用maven创建的项目中,在编译时会在项目下生成target文件夹,其下面的class文件夹里面生成src->main中的数据如resources中的文件或者是scala文件夹下面的.scala文件的“倒影”。所以寻找文件的相对位置时,要先找到target这个目录下的地址,然后再找具体的文件。如图所示,要读取resource下Excel文件夹下的Excel文件,target目录下已经...原创 2019-11-15 17:36:44 · 7650 阅读 · 0 评论 -
关于Hadoop(Spark、HBase)集群关闭不了的问题
有时候,我们对运行几天或者几个月的hadoop或者spark集群做停止操作,会发现,停止命令不管用了,为什么呢?因为基于java开发的程序,想要停止程序,必须通过进程pid来确定,而hadoop和hbase默认的情况下,会把pid文件存储在Linux上的/tmp目录的某个目录下,进程名命令规则一般是 框架名-用户名-角色名.pid,而默认情况下,linux的tmp里面的东西,一天会删除一次,所...原创 2019-11-04 11:52:31 · 4681 阅读 · 0 评论 -
Spark读取Kafka两种方式的详细说明
Spark读取kafka的两种方式spark streaming提供了两种获取方式,一种是同storm一样,实时读取缓存到内存中;另一种是定时批量读取。这两种方式分别是:Receiver-baseDirectReceiver-base:Spark官方最先提供了基于Receiver的Kafka数据消费模式。不过这种方式是先把数据从kafka中读取出来,然后缓存在内存,再定时处理。如果...转载 2019-11-04 11:07:32 · 5501 阅读 · 0 评论 -
Java项目中各种配置文件的写法(示例)
日志文件log4j.properties## Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements. See the NOTICE file distributed with# this work for additional informati...原创 2019-11-04 09:26:16 · 3213 阅读 · 0 评论 -
Spark中DataFrame去除NaN、null以及空字符串数据
去除null、NaN://创建sparkSession(打包在集群上运行要删除master) val sparkConf: SparkConf = new SparkConf().setAppName(this.getClass.getSimpleName.filter(!_.equals('$'))) //获取sparkContext val sparkContext = ne...原创 2019-11-01 13:58:22 · 7348 阅读 · 0 评论 -
多源数据接入:Spark外部文件数据接入
技术选型:SparkRDD组件介绍:RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在...原创 2019-10-30 14:28:25 · 1621 阅读 · 0 评论 -
多源数据接入:Spark+Kafka实时数据接入
组件介绍:Apache Kafka 是一个可扩展,高性能,低延迟的消息队列,允许我们像消息系统一样读取和写入数据。Spark Streaming 是 Apache Spark 的一部分,是一个可扩展、高吞吐、容错的实时流处理引擎。使用 Scala 语言开发的,支持 Java API。技术架构:Kafka有两类客户端,Producer(消息生产者的)和Consumer(消息消费者)。消息生...原创 2019-10-30 14:16:43 · 3399 阅读 · 0 评论 -
使用Spark读取已开启Kerberos认证的HBase并注册临时表
1、首先获取相应的krb5.conf与keytab文件2、代码示例:package com.zhbr.hbase.testimport java.io.IOExceptionimport com.google.protobuf.ServiceExceptionimport org.apache.hadoop.hbase.HBaseConfigurationimport org.apa...原创 2020-12-22 12:48:12 · 5523 阅读 · 2 评论 -
Spark-Submit参数设置说明
集群配置软件配置Hadoop 2.6.0Spark 2.2.0硬件配置三台服务器,32 核 64G 500G总资源:32 核 64G x 3 = 48核 192GYarn 可分配总资源:48 核 60G x 3 = 144核180G默认情况下,yarn 可分配核 = 机器核 x 1.5,yarn 可分配内存 = 机器内存 x 0.8。提交作业:直接使用了...原创 2019-09-26 11:35:31 · 2601 阅读 · 0 评论 -
Spark常见异常: java.util.concurrent.TimeoutException: Futures timed out
执行spark on yarn任务时报错:Caused by : java.util.concurrent.TimeoutException: Futures timed out after 60s参考此网站https://stackoverflow.com/questions/41123846/why-does-join-fail-with-java-util-concurrent-tim...原创 2019-09-24 15:23:17 · 8441 阅读 · 0 评论 -
Spark常见异常:Failed to get broadcast_32_piece0 of broadcast_32
类似于此异常:org.apache.spark.SparkException: Failed to get broadcast_32_piece0 of broadcast_32本人在此网站https://issues.apache.org/jira/browse/SPARK-5594找到了关于此异常的描述:In my case, this issue was happening whe...原创 2019-09-23 13:28:21 · 4628 阅读 · 0 评论 -
Spark常见异常:Missing an output location for shuffle
执行数据量较大的spark任务时经常会出现MetadataFetchFailedException:org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 10at org.apache.spark.MapOutputTracker$$anonfun$conver...原创 2019-09-23 11:42:28 · 21183 阅读 · 2 评论 -
Spark On Yarn 提交后VCore显示错误
yarn8088UI界面VCore Total原本显示共有120个,今天将spark任务提交到yarn执行后发现,VCore的数据变成了26个。提交命令: ./bin/spark-submit \ --class com.jyn.secondtime.Seconds \ --master yarn \ --deploy-mode cluster \ --driver-memo...原创 2019-09-21 12:38:45 · 2136 阅读 · 0 评论 -
SparkSQL处理增量更新与全量更新
SparkSQL的增量更新项目包结构:工具类Utils:package com.zhbr.utilsimport java.util.Propertiesimport org.apache.spark.sql.execution.datasources.jdbc.JDBCOptionsimport org.apache.spark.sql.{DataFrame, SaveMode...原创 2019-09-19 10:06:33 · 8535 阅读 · 6 评论 -
SparkSQL中两个decimal类型数据相除(相乘)为null的问题
如代码所示,在计算RFHL字段时,计算结果总是为空。源表字段类型:代码://读取数据val data: DataFrame = spark.read.format("jdbc") .option("url", "jdbc:mysql://21.76.120.96:3306/us_app") .option("dbtable", "pdwqy_qxzh_piu")...原创 2019-09-18 16:02:03 · 6388 阅读 · 5 评论 -
spark任务成功运行,但8088UI界面不显示Application
今天运行spark任务时,提交的任务成功地计算出了数据,但8088web界面始终不限application的信息。起初以为是spark集群出了问题,于是进行了重启,但重启后问题依然没有解决。于是返回到代码,发现测试完毕,mater没有删掉,删掉mater问题得到解决。//获取sparkSessionval sparkSession = SparkSession.builder().appN...原创 2019-09-18 14:51:42 · 5346 阅读 · 1 评论 -
SparkSQL实现行转列与列转行
例如目前有一张表dlzz:TG_ID表示变压器台区ID,DATA_DATE表示时间,I1、I2和I3分别表示三个不同时间点的电流值SparkSQL实现列转行 val frame: DataFrame = spark.read.format("jdbc") .option("url", "jdbc:mysql://localhost:3...原创 2019-09-18 13:29:57 · 7978 阅读 · 0 评论 -
SparkSQL的内置函数与自定义函数
SparkSQL内置函数sparkSQL支持大量的常见函数,具体参考此文章https://www.iteblog.com/archives/2336.htmlSparkSQL的自定义函数(UDF)在Spark中,也支持Hive中的自定义函数。自定义函数大致可以分为三种:•UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等•U...原创 2019-09-18 11:26:32 · 1627 阅读 · 0 评论 -
关于sparkSQL子查询的相关问题
sparkSQL支持的子查询:spark.sql("select u1 from (select u1,u2,u3 from tableTemp)").show()spark.sql("select u1 from tableTemp1 where u1 > (select max(pre) from tableTemp2)").show()sparkSQL不支持的子查询:ex...原创 2019-09-18 10:25:33 · 5721 阅读 · 7 评论 -
SparkSQL性能优化
一、代码层面的优化使用高性能算子使用reduceByKey/aggregateByKey替代groupByKey。使用mapPartitions替代普通map。mapPartitions类的算子,一次函数调用会处理一个partition所有的数据,而不是一次函数调用处理一条,性能相对来说会高一些。但是有的时候,使用mapPartitions会出现OOM(内存溢出)的问题。因为单次函数调...原创 2019-09-17 18:02:58 · 3516 阅读 · 0 评论 -
Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取Oracle的number类型的数据时精度丢失问题在程序开发中,使用到了sparkSQL读取Oracle数据库,发现当sparkSQL读取Oracle的number类型字段时,数据的小数经度会出现了丢失的情况。更为奇怪的是,现有三张Oracle表的字段类型都为number类型,第二种表的数据小数部分出现了丢失,另外两张表则没有问题。三张表的只是在小数位数上存在区别:第一...原创 2019-09-17 16:37:15 · 2465 阅读 · 0 评论 -
SparkSQL读取/写入MySQL/Oracle数据(分区并行读取)
**SparkSQL读取MySQL数据**一、sparkSQL读取MySQL数据1、第一种方式def main(args: Array[String]): Unit = { //获取sparkSession val sparkSession = SparkSession.builder().appName(this.getClass.getSimpleName.filt...原创 2019-10-23 16:30:42 · 6118 阅读 · 0 评论 -
Spark任务的某个Stage卡住不动问题
有时候Spark任务莫名会在某个Stage卡住,然后一直停在那里,如果任务重新跑的话又是没有问题的,在实际项目中如果这样的任务出现了,需要仔细分析Spark的log,这样的情况一般是数据不均衡导致的某个节点任务量偏大,而这个节点分配不到太多内存(其他还有很多任务都在这里运行)导致任务卡顿。有几个参数非常有效,主要是Spark的任务推测执行参数,任务推测执行默认是不开启的,因为开启了是会浪费资源的,...转载 2019-09-29 09:05:39 · 7281 阅读 · 3 评论