Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop的可移植键值数据文件格式? 我正在寻找一个便携式的键值数据文件格式,它可以作为Hadoop的输入和输出格式,并且除了在Huoop中直接在C++、java和Python之外也是可读和可写的。一个陷阱。。。我需要支持非java映射器和还原器(特别是通过Hadoop管道C++)。p>_C++_Python_Hadoop_Portability_Key Value - Fatal编程技术网

Hadoop的可移植键值数据文件格式? 我正在寻找一个便携式的键值数据文件格式,它可以作为Hadoop的输入和输出格式,并且除了在Huoop中直接在C++、java和Python之外也是可读和可写的。一个陷阱。。。我需要支持非java映射器和还原器(特别是通过Hadoop管道C++)。p>

Hadoop的可移植键值数据文件格式? 我正在寻找一个便携式的键值数据文件格式,它可以作为Hadoop的输入和输出格式,并且除了在Huoop中直接在C++、java和Python之外也是可读和可写的。一个陷阱。。。我需要支持非java映射器和还原器(特别是通过Hadoop管道C++)。p>,c++,python,hadoop,portability,key-value,C++,Python,Hadoop,Portability,Key Value,有什么想法吗?我是否应该编写自己的可移植键值文件格式,以便与Hadoop和Hadoop管道互操作?这样的新形式对社会有用吗 长版本: Hadoop序列文件(以及它们的近亲Map、Set、Array和BloomMap)似乎是使用Hadoop时高效二进制键值数据存储的标准。序列文件的一个缺点是它们只能在Java中可读写(它们是根据序列化的Java对象指定的)。我想建立一个复杂的多级MapReduce管道,其中输入和输出到各个阶段必须是可读的和可写的,从C++、java和Python。此外,我需要能够

有什么想法吗?我是否应该编写自己的可移植键值文件格式,以便与Hadoop和Hadoop管道互操作?这样的新形式对社会有用吗

长版本: Hadoop序列文件(以及它们的近亲Map、Set、Array和BloomMap)似乎是使用Hadoop时高效二进制键值数据存储的标准。序列文件的一个缺点是它们只能在Java中可读写(它们是根据序列化的Java对象指定的)。我想建立一个复杂的多级MapReduce管道,其中输入和输出到各个阶段必须是可读的和可写的,从C++、java和Python。此外,我需要能够用java(C++ C++)以外的语言编写映射器和还原器,以便在映射阶段使用大的和高度优化的C++库。 我考虑过各种解决办法,但没有一个。。。吸引人

  • 转换:在每个MapReduce阶段前后添加额外的转换阶段,以在序列文件和与其他语言兼容的可移植格式之间转换阶段的输入和输出。
    • 问题:阶段之间消耗和生成的数据非常大(TB)。。。在每个阶段多次复制数据只是为了用不同的编程语言获得读/写访问权,成本很高。共有10个阶段,这对我来说是太多的开销($$)
  • Avro文件:使用Avro的便携式数据文件格式。
    • 问题:虽然似乎有代码允许便携式Avro数据文件在MapReduce中用作输入或输出格式,但它仅适用于用Java编写的映射器和还原器。我已经看过一些关于通过avro/mapred/tether包为其他语言的映射程序创建支持的讨论,但目前只支持java。从文档中可以看出:“为了测试的目的,目前只实现了一个Java框架,所以这个特性还没有用。”
  • 强av>文件+ SWIG:使用AVO数据格式,用java映射器调用从分布式缓存中访问的自定义Sigg包裹C++库,进行实际处理。
    • java字符串的不变性使得编写SWIG包装器既痛苦又低效,因为需要一个副本。而且,这种多层包装开始成为维护、调试和配置的噩梦

  • 我正在考虑基于与Hadoop和Hadoop管道互操作的H文件格式编写自己的语言可移植键值文件格式。。。有更好的现成替代品吗?这种可移植的格式对社区有用吗?

    我想你做了一些错误的假设:

    序列文件的一个缺点是它们只能在Java中可读写(它们是根据序列化Java对象指定的)

    取决于序列化java对象的含义。Hadoop使用WritableSerialization类来提供序列化机制,而不是默认的Java序列化机制。您可以将hadoop配置为使用默认Java序列化(
    JavaSerialization
    ),或您选择的任何自定义实现(通过
    io.serializations
    配置属性)

    这样,如果使用Hadoop可写机制,只需要编写C++的读取器,C++可以解释序列文件,然后编写C++类/ Python等类,您希望序列化(但这将是一个令人痛苦的维护,并导致您的第二个问题,AVRO)

    <> P>此外,我需要能够用java(C++)以外的语言编写映射器和还原器,以便在映射阶段

    中使用大的和高度优化的C++库。 < P>可以用Python/C++ +任何当前使用Hadoop流的方法编写映射器/还原器,并使用序列文件来存储中间格式。流式处理所需的只是映射器/还原器/组合器希望stdin上的输入为
    key\tvalue
    对(您可以自定义分隔符而不是制表符),并以类似格式输出(这也是可自定义的)

    • (我相信你已经找到了这个链接,但以防万一)
    那么,如果您想向流映射器/还原器传递更复杂的键/值对,或者从流映射器/还原器传递更复杂的键/值对,那么该怎么办呢?在本例中,我想说的是,研究定制contrib/流源代码,特别是PipeMapper、PipeReducer和PipeMapRed类。例如,可以修改输出/输入为<代码> <代码>元组,然后修改Python/C++代码以进行适当解释。 通过这些修改,您可以使用Avro来管理hadoop流式框架(Java)和c++/python代码之间的序列化代码。你甚至可以使用Avro

    最后-如果您查看了
    avputformat
    avrotexoutputformat
    类,它们可能正是您想要的(注意,我从未使用过它们)

    谢谢您的回复!SerializationJava Only Format当我声称序列文件是“java Only”格式时,我指的不是键值对的序列化(正如您提到的,它是可配置的),而是写入磁盘的字节的低级格式,它决定了容器格式本身。该格式是根据序列化的java原语(例如,可变长度整数的java内部表示形式等)指定的。这使得用其他语言编写解析器变得困难。你知道一家公司吗