我是新的事后诸葛亮和hadoopMap减少概念。我正在尝试使用MapReduce程序将多个xml文件合并到一个xml文件中。我的意图是通过在文件名前面加上开始和结束标记,将每个xml文件合并到目标xml文件中。例如,下面的xml应该合并成一个单独的xml,如下所示
输入xml文件
<xml><a></a></xml>
<xml><b></b></xml>
<xml><c></c></xml>
输出xml文件
<xml>
<File1Name><xml><a></a></xml><File2Name>
<File2Name><xml><b></b></xml><File3Name>
<File3Name><xml><c></c></xml><File3Name>
<xml>
问题1:是否可以将一个xml文件Map到每个Map器,并创建一个键-值对,将键作为文件名,将值作为每个xml文件的前缀和附加文件名作为开始和结束标记,并使用reducer将所有xml合并到一个上下文中,并输出到上面显示的xml。
问题2:如何在Map器代码中获取文件名作为键?
1条答案
按热度按时间ubof19bj1#
回答1:我不建议只向Map器发送一个xml,除非文件的大小超过1gb。可以将xml位置列表发送到Map器,然后在Map器代码中打开每个位置并将数据提取到输出中。
回答2:如果使用azure blob存储,您可以列出容器中的所有blob,并将它们分配给输入拆分。
资源:
http://www.andrewsmoll.com/3-hacks-for-hadoop-and-hdinsight-clusters/ “黑客3”
http://blogs.msdn.com/b/mostlytrue/archive/2014/04/10/merging-small-files-on-hdinsight.aspx