1. 表中数据过亿,加载速度过慢,而我只需要加载增量数据

如:加载昨天一整天的数据,添加predicates分区,方法如下:

//predicates相当于是把昨天的数据分成一个区,其它的数据不加载
val predicates: Array[String] = Array(s"created_at >=\'" + getDateTime.getYesDate() + "\' and created_at <\'" + getDateTime.getNowDate() + "\'")
// 取得该表数据
val orderInfoDF :DataFrame = spark.read.jdbc(TiDBMysqlUrl, orderInfoTable, predicates, properties)

如果需要加载大表中全部数据,可以把数据分成多个区(读取数据库表默认是一个分区),如下是按创建时间分区,把最近三个月数据分成三个区

val predicates: Array[String] =
Array(
"2019-08-01" -> "2019-09-01",
"2019-09-01" -> "2019-10-01",
"2019-10-01" -> "2019-11-01"
).map {
case (start, end) =>
s"pay_status=1 and created_at >=\'$start\' and created_at <\'$end\'"
} // 取得该表数据
val orderInfoDF :DataFrame = spark.read.jdbc(TiDBMysqlUrl, orderInfoTable, predicates, properties)

2.每次到了最后一个stage,报内存不足错误

原因:

使用了coalesce重设Rdd的分区,可能是分区的数量发生激烈的变化,从父Rdd的几千个分区设置成几个,从而导致这个错误。

方法:

为了避免这个情况,可以设置shuffle=true,即为repartition()方法

有两种方法是可以重设Rdd的分区:分别是 coalesce()和repartition()方法,主要用来合并多个分区,以便生成少数文件

3.插入数据到Tidb里面,直接报超过最大限制条数

Caused by: java.sql.SQLException: statement count  exceeds the transact

解决方法:

可以通过修改tidb的配置,然后重启tidb,但由于运维工程师最大设置为50000,怕负载过高,只能通过批量插入到tidb里面;

由于我这边数据大概每天50万左右,大小不到10M,先是把结果储存在HDFS上,然后读取转换为dataframe格式,相当于分区=文件大小/128M(block块),

则dataframe默认只有两个分区,需要通过repartition()进行重新分区,然后插入即可,如:

resDF.rdd.getNumPartitions查看该dataframe分成几个分区

resDF.repartition().write.mode("append").jdbc(TiDBConnect.url, tableName, prop),分成11分区,保证平均每个分区小于50000即可

spark遇到的问题及解决方法的更多相关文章

  1. Spark程序运行常见错误解决方法以及优化

    转载自:http://bigdata.51cto.com/art/201704/536499.htm Spark程序运行常见错误解决方法以及优化 task倾斜原因比较多,网络io,cpu,mem都有可 ...

  2. Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法

    引用自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246 ...

  3. Spark面对OOM问题的解决方法及优化总结 (转载)

    转载地址: http://blog.csdn.net/yhb315279058/article/details/51035631     Spark中的OOM问题不外乎以下两种情况 map执行中内存溢 ...

  4. spark sql 访问hive数据时找不mysql的解决方法

    我尝试着在classpath中加n入mysql的驱动仍不行 解决方法:在启动的时候加入参数--driver-class中加入mysql 驱动 [hadoop@master spark-1.0.1-bi ...

  5. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  6. spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable

    import org.elasticsearch.cluster.routing.Murmur3HashFunction; import org.elasticsearch.common.math.M ...

  7. Spark OOM:java heap space,OOM:GC overhead limit exceeded解决方法

    问题描述: 在使用spark过程中,有时会因为数据增大,而出现下面两种错误: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMe ...

  8. sc.textFile("file:///home/spark/data.txt") Input path does not exist解决方法——submit 加参数 --master local 即可解决

    use this val data = sc.textFile("/home/spark/data.txt") this should work and set master as ...

  9. kafka broker Leader -1引起spark Streaming不能消费的故障解决方法

    一.问题描述:Kafka生产集群中有一台机器cdh-003由于物理故障原因挂掉了,并且系统起不来了,使得线上的spark Streaming实时任务不能正常消费,重启实时任务都不行.查看kafka t ...

随机推荐

  1. Apache tomcat高可用web集群搭建过程配置记录

    说明,本文仅作为个人搭建配置保存,问题处理没有一一列出,过程也未见详尽,有问题的朋友可以直接留言给我,会一一回复,谢谢. 小目标: 支持故障转移(或主备,扩展性不佳),保证故障转移后,对前端用户透明, ...

  2. Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  3. 【操作系统之九】Linux常用命令之netstat

    一.概念netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP ...

  4. java中的Serializable接口

    实现java.io.Serializable 接口的类是可序列化的.没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化. 序列化类的所有子类本身都是可序列化的.这个序列化接口没有任何方法和域, ...

  5. Python3+PyCryptodome实现各种加密算法教程

    一.说明 PyCryptodome是python一个强大的加密算法库,可以实现常见的单向加密.对称加密.非对称加密和流加密算法.直接pip安装即可: pip install pycryptodome ...

  6. Android工具使用之UiAutomatorViewer

    学习博客: https://blog.csdn.net/l403040463/article/details/79235670    使用, 添加web 网页的监控.

  7. 百度前端技术学院task16源代码

    欢迎访问我的github:huanshen 做这道题目的时候遇到了很多困难. 1.怎么给空对象添加数据,愣是不知道从哪里下手:遍历对象,一个个输出操作: 2.中英文的正则表达式不知道,赶紧去百度: 3 ...

  8. 深入理解 Linux Cgroup 系列(二):玩转 CPU

    原文链接:深入理解 Linux Cgroup 系列(二):玩转 CPU 上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS 系统中的默认设置和控制工具,并以 CPU 为例阐述 c ...

  9. CF573E Bear and Bowling 贪心、分块、凸包

    传送门 题解搬运工++ 先证明一个贪心做法的正确性:做以下操作若干次,每一次考虑选择没有被选到答案序列中的数加入到答案序列中对答案的贡献,设第\(i\)个位置的贡献为\(V_i\),如果最大的贡献小于 ...

  10. B/S架构详解

    学习笔记:  * B/S架构详解 * 资源分类:            1. 静态资源:                * 使用静态网页开发技术发布的资源.                * 特点:  ...