【问题标题】:Serializing Java object using Hadoop libraries使用 Hadoop 库序列化 Java 对象
【发布时间】:2015-07-09 13:00:52
【问题描述】:

我正在尝试在 Java 中序列化一个对象并将其写入文件,以便我的 Map 函数可以从文件中获取它并反序列化它以取回对象。

我认为 Java 序列化不是很理想。所以我想使用 hadoop 库来做到这一点。

有人可以与我分享一些如何做到这一点的语法。我对 hadoop 很陌生,不知道从哪里开始。对代码的一些解释也很棒!

【问题讨论】:

  • 您要使用哪个序列化程序... Avro、Sequence、Parquet、????
  • 哇,有 3 个!我不知道。你能解释一下区别吗?

标签: java hadoop serialization mapreduce


【解决方案1】:

您应该使用 Hadoop 序列化,以便您的 mapreduce 作业的任何 InputFormat 都可以读取输入记录。

我建议您按照以下步骤操作,

  1. 尝试将您的 java 对象转换为任何 Writable 实现 Mapreduce 如 Text , IntWritable, ListWritable 等。如果不是 可行让你的Java对象扩展Writable接口 hadoop 并实现自定义的读/写方法。

  2. 使用SequenceFile作为存储格式,并创建一个Java程序使用SequenceFile.Writer将你上面的Writable对象写入 一个序列文件。请参阅 Hadoop I/O 章节的 SequenceFile 主题 Hadoop 权威指南。

  3. 现在编写一个使用 SequenceFileInputFormat 作为输入的 mapreduce 程序 格式,您将获得序列化的 java 对象 在您的映射器中一一阅读。

要创建自定义可写,请参考

http://www.ashishpaliwal.com/blog/2012/05/hadoop-recipe-implementing-custom-writable/

要将可写对象写入序列文件,请参考,

How to convert .txt file to Hadoop's sequence file format

【讨论】:

    【解决方案2】:

    Hadoop 中的序列化是使用 Avro、Parquet、Sequence File、ORC 等完成的……您可以在您的 java 程序中使用上述任何一种。您需要了解 hadoop 使用上述序列化格式之一。所以你不需要那些 Hadoop 库。

    【讨论】:

    • 我正在为我的搜索引擎制作爬虫和索引器,并希望创建倒排索引以将任何单词与文档列表匹配。为此,我有一个 map-reduce 作业,它读取包含序列化对象的 hadoop 文件,例如: object{ String content_of_html_page;长文档ID;虽然进化现在不是什么大问题,但我还是想考虑一下。我正在使用 amazon S3 来存储这些文件。我可以将这些文件类型存储在 S3 中吗?这篇文章读起来很有趣!你会推荐我使用哪个来实现我的目的?
    • 我还想在一个文件中存储很多这些。例如串行对象1 串行对象2 串行对象3 ...
    • 是的,您可以这样做...hadooptutorial.info/… 关注此..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多