我想從Spark加載大量的數據到HBase。我正在使用saveAsNewAPIHadoopDataset方法。問題與對象不可序列化類:org.apache.hadoop.hbase.io.ImmutableBytesWritable錯誤
我正在創建ImmutableWritable並放置並保存,如下所示。
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)
我的數據是30GB的價值,它存在於60個文件的HDFS中。
當我一次提交10個文件的同一份工作時,每件事情都很順利。
但是,當我一次提交所有的東西,它是給這個錯誤。這個錯誤真的令人沮喪,我嘗試了所有可能的事情。但真正想知道是什麼讓數據在5GB時成功運行,以及是什麼導致30GB數據時出錯。
有沒有人遇到過這樣的問題。
你可以把完整的堆棧跟蹤在這裏......? –
當我爲每個執行程序分配40G內存時,工作正在接近,但是每當我分配的內存更少時,我都面臨着這個錯誤。這意味着,每當有一個洗牌,我得到這個錯誤。 – Srini