常出现的使用误区:

误区一:在driver上创建连接对象(比如网络连接或数据库连接)
    如果在driver上创建连接对象,然后在RDD的算子函数内使用连接对象,那么就意味着需要将连接对象序列化后从driver传递到worker上。而连接对象(比如Connection对象)通常来说是不支持序列化的,此时通常会报序列化的异常(serialization errors)。因此连接对象必须在worker上创建,不要在driver上创建。

dstream.foreachRDD { rdd =>
  val connection = createNewConnection() // 数据库连接在driver上执行
  rdd.foreach { record =>
  connection.send(record) // 在worker上执行
  }
}

误区二:为每一条记录都创建一个连接对象
    通常来说,连接对象的创建和销毁都是很消耗时间的。因此频繁地创建和销毁连接对象,可能会导致降低spark作业的整体性能和吞吐量。

dstream.foreachRDD { rdd =>
rdd.foreach { record =>
val connection = createNewConnection() //每插入一条数据,创建一个连接
connection.send(record)
connection.close()
}
}

  比较正确的做法是:对DStream中的RDD,调用foreachPartition,对RDD中每个分区创建一个连接对象,使用一个连接对象将一个分区内的数据都写入数据库中。这样可以大大减少创建的连接对象的数量。

正确做法一:为每个RDD分区创建一个连接对象

dstream.foreachRDD { rdd =>
rdd.foreachPartition { partitionOfRecords =>
val connection = createNewConnection()
partitionOfRecords.foreach(record => connection.send(record))
connection.close()
}
}

正确做法二:为每个RDD分区使用一个连接池中的连接对象

dstream.foreachRDD { rdd =>
rdd.foreachPartition { partitionOfRecords =>
// 从数据库连接池中获取连接
val connection = ConnectionPool.getConnection()
partitionOfRecords.foreach(record => connection.send(record))
ConnectionPool.returnConnection(connection) // 用完以后将连接返 回给连接池,进行复用
}
}

最新文章

  1. Win7下硬盘安装Ubuntu 12.04.3双系统
  2. Sea.js学习1——初识Sea.js
  3. uva 1471 defence lines——yhx
  4. C# Form窗体子窗口关闭时刷新父窗体中的datagridview
  5. ANDROID_MARS学习笔记_S04_009_用java.lang.ref.SoftReference作缓存,android.os.Handler和new Thread异步加载略图片
  6. JAVA Metrics度量工具 - Metrics Core 翻译
  7. Using HTML5 audio and video
  8. 1.Perl基础系列之WHAT、WHY、HOW
  9. 我是这样使用template.js来异步渲染数据的
  10. win8系统下,python 2.7安装xlrd,xlutils和xlwt的方法
  11. Spring MVC 使用介绍(十四)文件上传下载
  12. 英语进阶系列-A04-英语升级练习二
  13. 探讨PHP页面跳转几种实现技巧 转自# 作者:佚名 来源:百度博客 #
  14. linux下如何删除行首的数字?
  15. CentOS下安装Filezilla软件
  16. 20145303刘俊谦 《Java程序设计》第4周学习总结
  17. 华为机试 求int型数据在内存中存储时1的个数
  18. NHibernate+MySql (erro 解决方法)
  19. 某个应用使cpu使用率100%
  20. bashrc 与 profile 环境变量

热门文章

  1. JAVA遇见HTML——Servlet篇:Servlet基础
  2. docker换源
  3. HTML - My First Page!
  4. leetcode解题报告(3):Search in Rotated Sorted Array
  5. idea快捷方式1
  6. C/C++语言之由数字26引起的文件的数据保存与读取调试。
  7. CF1182F Maximum Sine【类欧,扩欧】
  8. Irrlicht引擎剖析一
  9. 1.1 OC class new summary
  10. 一步一步学习FastJson1.2.47远程命令执行漏洞