微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hadoop SequenceFile 的键值输出不正确

如何解决Hadoop SequenceFile 的键值输出不正确

我正在使用 spark 3.0 和 scala 在 Amazon Emr 6.10 上运行作业。

问题:在将我的键值 RDD 导出到 S3 上的序列文件并读取它时,我看到一些键指向错误的值。在保存数据之前和读回数据之后,我确实打印了输出,并且键的值不同。 示例:

Export:
"a" -> ObjA,"b" -> ObjB,"c" -> ObjC,.....,"z" -> ObjZ
Import:
"a" -> ObjK,"b" -> ObjV,"z" -> ObjZ

导出的 RDD[(Text,ImmutableWriteble)],key 为字符串,value 为 Kryo V4 序列化对象。

使用的导出选项:

rdd.saveAsNewAPIHadoopFile(path,classOf[Text],classOf[ImmutableBytesWritable],classOf[SequenceFileOutputFormat[Text,ImmutableBytesWritable]],hadoopConfig)

rdd.saveAsSequenceFile(sitesOutputBucketSeq,Some(classOf[SnappyCodec]))

使用的回读选项:

sparkContext.newAPIHadoopFile[Text,ImmutableBytesWritable,SequenceFileInputFormat[Text,ImmutableBytesWritable]](sitesOutputBucketSeq,classOf[SequenceFileInputFormat[Text,hadoopConfig)

sparkContext.sequenceFile[String,ImmutableBytesWritable](sitesOutputBucketSeq)

结果是一样的 - 一些键和值被打乱

我在写入 300 个值和 300 万个值时遇到了这个问题。 我在保存为镶木地板格式并读取它时没有看到这个问题,在我的情况下看起来像序列格式输出的一些问题。

我的火花配置:

    scConf.set("spark.sql.parquet.enableVectorizedReader","false")
    scConf.set("spark.kryo.referenceTracking","false")
    scConf.set("spark.sql.parquet.compression.codec","snappy")
    scConf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
    scConf.set("spark.sql.adaptive.enabled","true")
    scConf.set("spark.sql.adaptive.coalescepartitions.enabled","true")
    scConf.set("mapreduce.map.output.compress","true")
    scConf.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec")
    scConf.set("mapred.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。