【问题标题】:Not able to use hibernate classes in Apache Spark无法在 Apache Spark 中使用休眠类
【发布时间】:2015-03-16 10:06:48
【问题描述】:

我正在尝试使用 Apache Spark 进行高速计算。此计算的结果需要存储在 Oracle 中。

我正在使用休眠来执行此操作。但是由于休眠中的某些类(如 (JDBCTransaction))是不可序列化的 - 使用它们时会抛出 java.io.NotSerializableException: org.hibernate.transaction.JDBCTransaction),因此 Spark 集群不支持使用休眠。

是否有任何解决方法可以使用 hibernate 来处理 spark ?

我尝试使用字节码注入将 JDBCTransaction 类标记为可序列化,但它抛出 java.lang.IllegalStateException: unread block data 异常。

【问题讨论】:

    标签: hibernate apache-spark


    【解决方案1】:

    听起来您正试图在驱动程序中创建一个事务对象,并在 RDD 分区上执行事务。这就是您获得可序列化异常的原因;火花执行正在尝试将事务对象发送到远程进程,这显然是行不通的。即使你可以序列化它,在多个远程并行事务中使用同一个事务对象也是无效的。

    如果您需要将数据并行写入数据库,您可能应该查看RDD.foreachPartition(),它允许您为每个单独的分区/进程在本地创建数据库连接和事务。

    如果您要写入数据库的数据相对较小,您可以改为 collect() 它,将其作为驱动程序本地对象返回,然后您可以从那里写入数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多