spark读写数据库大表分区性能优化:经常会遇到spark读写数据库再做分析,像mysql或oracle。

在数据量很大的情况下,如果只有一个worker一个excutor一个task,那你excutor的内存足够大或者worker足够多,没问题,否则就要内存溢出Out of memory。

当数据增加,我们又无法无限制的增加硬件,我们就要利用RDD的partition。将获取一个大表的任务拆分成多个任务,一个一个来执行,每个任务只获取一小部分数据,这样通过多个连接同时去取数据,速度反而更快。

我的配置目前是 master 1 8g,slave 3 8g

Dataset dataset = spark.read().format("jdbc")

.option("url", JDBCUtil.getJdbcUrl(datasourceModel))

.option("dbtable", tableName)

.option("user", datasourceModel.getUserName())

.option("password", datasourceModel.getPassword())

.option("partitionColumn", "ID")

.option("lowerBound", 10000)

.option("upperBound", 100000000)

.option("numPartitions", 10000)

.load();

参数具体意义:partitionColumn, lowerBound, upperBoundThese options must all be specified if any of them is specified. In addition, numPartitions must be specified. They describe how to partition the table when reading in parallel from multiple workers. partitionColumn must be a numeric column from the table in question. Notice that lowerBound and upperBound are just used to decide the partition stride, not for filtering the rows in table. So all rows in the table will be partitioned and returned. This option applies only to reading.

numPartitionsThe maximum number of partitions that can be used for parallelism in table reading and writing. This also determines the maximum number of concurrent JDBC connections. If the number of partitions to write exceeds this limit, we decrease it to this limit by calling coalesce(numPartitions) before writing.

partitionColumn:根据哪个字段分区,必须是数字类型,int是可以的,一般用id

lowerBound:分区下界,假如是10000,那么10000条数据之前都是在一个任务执行

upperBound:分区上届,lowerBound和upperBound的数据会被拆分,而边界外围的会单独作为分区

numPartitions:分区边界之间的数据要分多少分区。

至于到底分了多少块,边界之外的数据怎么分的块,没必要纠结,只要知道,数据肯定是全部取回来了。

另外只需要部分数据的,可以按照sql的方式:

.option("dbtable", "test_table")

可以改写成:

.option("dbtable", "(select * from test_table where dt >= '2017-05-01') as T")

注意:要设置数据库连接数,如果过少,就会出异常

spark写入oracle 优化,spark读写数据库大表分区性能优化相关推荐

  1. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  2. MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)

    海豚精灵:https://www.whhtjl.com:优课GO:https://mgo.whhtjl.com 思考 如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说 ...

  3. 数据库大表如何优化?

    数据库大表如何优化? 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 1. 限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句.比如:我们当用户在查询订 ...

  4. mysql 压力测试知乎_MySQL 对于千万级的大表要怎么优化? - MySQL

    很多人第一反应是各种切分:我给的顺序是: 第一优化你的sql和索引: 第二加缓存,memcached,redis: 第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高, ...

  5. 如何优化MySQL千万级大表

    很好的一篇博客,转载 如何优化MySQL千万级大表 原文链接::https://blog.csdn.net/yangjianrong1985/article/details/102675334 千万级 ...

  6. MySQL大表关联如何优化_MySQL 对于大表(千万级),要怎么优化呢?

    http://www.zhihu.com/question/19719997 提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如何做,对于一个存储设计,必须 ...

  7. 在线重定义生产环境大表分区的惨烈踩雷记录

    精彩预告:第八届数据技术嘉年华大会将于2018年11月16日~17日在北京市朝阳区东三环中路61号富力万丽酒店盛大开启.本次大会邀请互联网领先企业的数据库专家,国产数据库的领军人物,云技术等领域的知名 ...

  8. MIS性能优化常见问题与方案(辅助项目组性能优化的总结贴)

    最近帮忙公司的几个项目组进行了不同方面的性能优化,发现几个项目都出现了一些共性的问题.这里写一篇文章,总结一下这几类问题,以及其对应的解决方案.方便其它项目组参考. 常见问题一:打开页面非常慢,有的项 ...

  9. 线上zabbix数据库重建表分区

    线上zabbix数据库重建表分区 发表于:2015-03-5 0 条评论 当前线上zabbix数据按月分区单个分区文件过大,现重新按天分区. 注意事项: 1,"truncate table ...

最新文章

  1. 云信小课堂|搭建应用级别在线聊天室,7步就够了!
  2. 《Java 高并发》02 多线程的特性
  3. servlet需要和ajax,如何使用Servlet和Ajax?
  4. [物理学与PDEs]第1章第6节 电磁场的标势与矢势 6.3 例 --- 电偶极辐射
  5. 在谈数据治理和数字化的时候,别忘了数据标准
  6. excel表转换成txt导入
  7. 可重入函数 与线程安全的区别与联系
  8. Dijkstra算法图文详解和C++代码
  9. Selenium自动化测试-5.脚本录制神器Katalon Recorder
  10. 利用HUtool读取Excel内容
  11. React+TS免注册DOM页面dialog弹窗
  12. 数据挖掘:模型选择——线性回归
  13. VO、DTO、POJO、PO的区别
  14. 谷歌地球(Google Earth) 7.3.2.5776
  15. C#学习 - 关于Single()
  16. 多线程+反爬:爬取阿里巴巴国际站物流表现数据到mysql
  17. 点线面的特点_夯实基础!点线面的基本特点与表现
  18. 阿里全面进军IoT,语音将是人与IoT最自然的交互方式
  19. .Net部分 面试问题
  20. c++成员变量初始化

热门文章

  1. linux 文件-s,Linux下访问文件的基本模式
  2. PHP怎么抛出错误,php – 从“正确”来源抛出错误
  3. cxf调用接口的几种方式_Java调用CXF WebService接口的两种方式实例
  4. qbytearray初始化全0_【小白学PyTorch】4.构建模型三要素与权重初始化
  5. linux arm uart应用程序,ARM Linux S3C2440 之UART分析
  6. python模拟购物模块_python -模拟购物 -赊账版 粗糙之极
  7. android drawable转bitmap_Android 内存泄漏优化汇总
  8. java的环境变量设置_Java开发环境不再需要配置classpath
  9. css里面的位置属性,CSS定位属性Position详解
  10. java中断异常_Java中断异常 InterruptedException 的正确处理方式