【问题标题】:Spark Shell - object not serializable (class: org.apache.hadoop.hbase.client.PutSpark Shell - 对象不可序列化(类:org.apache.hadoop.hbase.client.Put
【发布时间】:2016-06-19 15:32:10
【问题描述】:

我在 Spark / Scala REPL 上尝试一个简单的代码并得到这个错误。如何解决这个问题。我想使用 RDD.saveAsNewAPIHadoopDataset(conf) 将 RDD 保存到 HBase

import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.hadoop.mapreduce.OutputFormat
import org.apache.hadoop.hbase.client.Mutation
import org.apache.hadoop.fs.Path
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.conf.Configuration
import scala.collection.mutable
import java.io.{IOException, File, ByteArrayOutputStream}
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.HashPartitioner

val tableName = "test"
val cfIndex = "cf".getBytes()
val colIndexId = "c1".getBytes()

val RDD = sc.parallelize(List(("1","2"),("1","2"),("1","3"),  ("3","3")),2).repartition(2).mapPartitions { part =>
  val tableName = "test"
  val cfIndex = "cf".getBytes()
  val colIndexId = "c01".getBytes()
  part.map { case(k,v) =>       
    val put = new Put(k.getBytes())
    put.add(cfIndex, colIndexId, v.getBytes())
    (k, put)
  }
}

错误TaskSetManager:阶段5.0(TID 17)中的任务0.0具有不可序列化的结果:org.apache.hadoop.hbase.client.Put

【问题讨论】:

    标签: scala serialization apache-spark


    【解决方案1】:

    Put 不可序列化 - 因为它在您的 map 闭包中,它将在工作节点上执行,因此需要序列化并从驱动程序发送到工作节点。由于它是不可序列化的,因此不会导致异常。

    【讨论】:

    • 我没有收到你的最后一份声明。 “由于它是不可序列化的,因此不会导致异常。”如何解决这个问题?
    • 由于它 (Put) 不可序列化,因此无法序列化(这是在工作人员上执行的必要条件),因此您会得到不可序列化的结果。您可以通过在地图闭包中不使用 Put 来解决此问题 - 您需要找到另一种方法来做您想做的事情。
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2018-08-01
    • 2021-07-15
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多