我应该为Hadoop XMLInputFormat添加自定义getSplits实现吗?

时间:2014-06-07 20:01:35

标签: java xml hadoop mapreduce

背景

请参阅此问题:Parsing XmlInputFormat element larger than hdfs block size及其答案。

假设我想使用Mahout的XMLInputFormat使用Hadoop解析维基百科的页面 - 文章bz2压缩XML转储。我的输入可以有两种类型:

  1. XXwiki-最新的页面,文章,多数据流 - index.txt.bz2
  2. XXwiki-最新的页面-articles.xml.bz2
  3. 第一个是可分割的压缩类型,默认情况下(启用了BZip2Codec)它将被拆分,并且将使用多个映射器并行处理每个解压缩的BZ2分割。

    第二种类型是直接bz2压缩,因此我猜不会拆分? getSplits使用的默认XMLInputFormat实现是FileInputFormat.getSplits,我认为这使得非智能的vanilla拆分不了解我的XML架构。我认为这可能会影响绩效。

    问题:

    1. XMLInputFormat是否适用于不可分割的bz2压缩文件,即原始文本直接压缩,而不是多流bz2(连接)?通过工作,我的意思是并行,使用多个映射器,而不是将所有内容都提供给单个映射器。

    2. 如果我实施https://github.com/whym/wikihadoop#splitting之类的自定义getSplits方法,对我有用吗?另请参阅https://github.com/whym/wikihadoop/blob/master/src/main/java/org/wikimedia/wikihadoop/StreamWikiDumpInputFormat.java#L146 - 此InputFormat使用自定义getSplits实现。为什么呢?

0 个答案:

没有答案