Ich versuche, eine große Menge an Daten von Spark zu HBase zu laden. Ich verwende saveAsNewAPIHadoopDataset-Methode.Problem mit Objekt nicht serialisierbar Klasse: org.apache.hadoop.hbase.io.ImmutableBytesWritable Fehler
Ich erstelle ImmutableWritable und Put und speichern, die wie folgt erforderlich ist.
dataframe.mapPartitions { rows =>
{
rows.map { eachRow =>
{
val rowKey = Seq(eachRow.getAs[String]("uniqueId"), eachRow.getAs[String]("authTime")).mkString(",")
val put = new Put(Bytes.toBytes(rowKey));
val fields = eachRow.schema.fields;
for (i <- 0 until fields.length) {
put.addColumn(userCF, Bytes.toBytes(fields(i).name), Bytes.toBytes(String.valueOf(eachRow.get(i))))
}
(new ImmutableBytesWritable(Bytes.toBytes(rowKey)), put)
}
}
}
}.saveAsNewAPIHadoopDataset(job.getConfiguration)
Meine Daten sind 30 GB wert und es ist in HDFS in 60 Dateien vorhanden.
Wenn ich den gleichen Job mit 10 Dateien gleichzeitig einreichen, ging alles gut.
Aber, wenn ich alles auf einmal einreiche, gibt es diesen Fehler. Der Fehler ist wirklich frustrierend und ich habe alles Mögliche versucht. Aber ich frage mich wirklich, was es geschafft hat, erfolgreich zu laufen, wenn die Daten 5 GB groß sind und was es zu einem Fehler führte, wenn es 30 GB ist.
Hat jemand mit dieser Art von Problemen konfrontiert.?
Können Sie den kompletten Stack-Trace hier einfügen ...? –
Wenn ich 40G Speicher pro Executor zugeteilt habe, wird der Job nah, aber wenn ich weniger Speicher zugewiesen habe, bin ich mit diesem Fehler konfrontiert. Das bedeutet, dass bei jedem Shuffle dieser Fehler auftritt. – Srini