我是Hadoop
MapReduce的新手(准确地说是4天),并且被要求在集群上执行分布式XML解析。根据我在Internet上的(重新)搜索,使用Mahout的XmlInputFormat应该相当容易,但是我的任务是确保该系统适用于大型(〜5TB)XML文件。
据我所知,发送到映射器的文件拆分不能大于hdfs块大小(或每个作业块大小)。[如果我弄错了,请纠正我]。
我面临的问题是,某些XML元素很大(〜200MB),而有些很小(〜1MB)
所以我的问题是:XmlInputFormat创建的XML元素块大于块大小时会发生什么?它将整个大文件(例如200MB)发送到映射器,还是将元素分成三部分(64
+ 64 + 64 + 8)发送出去?
我目前无法访问公司的hadoop集群(并且直到某个时候才可以访问),所以我无法执行测试并找出答案。请帮我。
所以要清除一些东西:
Mahout的XMLInputFormat将处理XML文件,并在两个已配置的开始/结束标记之间提取XML。因此,如果您的XML如下所示:
<main>
<person>
<name>Bob</name>
<dob>1970/01/01</dob>
</person>
</main>
并且您已将开始/结束标记配置为<person>
和</person>
,那么您的映射器将通过以下<LongWritable, Text>
对传递到其map方法:
LongWritable: 10
Text: "<person>\n <name>Bob</name>\n <dob>1970/01/01</dob>\n </person>"
然后,您就可以在映射器中处理此数据。
关于splits,XmlInputFormat
extends
TextInputFormat
,因此,如果您输入的文件是可拆分的(即未压缩或使用可拆分的编解码器(例如snappy)压缩),则该文件将由一个或多个映射器处理,如下所示:
mapred.max.split.size=10485760
),那么您将获得5个映射任务来处理文件当文件拆分为这些块或拆分大小的块时,XmlInputFormat将寻求对块的字节地址/偏移量/拆分边界进行查找,然后向前扫描,直到找到配置的XML起始标记或到达块的字节地址为止/分割边界。如果找到开始标签,它将消耗数据直到找到结束标签(或文件末尾)。如果找到结束标记,则记录将被传递到您的映射器,否则您的映射器将不会收到任何输入。要强调的是,在尝试找到结束标签时,地图可能会扫描到块/拆分的末尾,但只有找到开始标签后才会执行此操作,否则扫描将在块/拆分的末尾停止。
因此,要(最终)回答您的问题,如果您尚未配置映射器(并且正在使用默认值或标识映射器,因为它是众所周知的),那么是的,XML块的大小(MB,GB)无关紧要,TB!)它将被发送到减速器。
我希望这是有道理的。
编辑
跟进您的评论:
我是Hadoop MapReduce的新手(准确地说是4天),我被要求在集群上执行分布式XML解析。根据我在Internet上的搜索,使用Mahout的XmlInputFormat应该相当容易,但我的任务是确保该系统能够处理巨大的(~5TB)XML文件。 据我所知,发送到映射器的文件拆分不能大于hdfs块大小(或每个作业块大小)。[如果我错了请纠正我]。 我面临的问题是,有些XML元素很大(~20
php artisan route:cache命令引发错误: stream_set_chunk_size():块大小不能大于2147483647 在供应商处/monolog/monolog/src/monolog/Handler/StreamHandler。菲律宾比索:144 请帮我解决这个问题
我在laravel项目中遇到了“stream\u set\u chunk\u size():chunk size不能大于laravel 24215454”这一错误。不知道这是为什么。 我使用的是Laravel8和XAMPP3.3。0
我正在尝试安装Craftable,当我运行命令时,它抛出错误: 在StreamHandler.php第144行:stream_set_chunk_size():块大小不能大于2147483647 请帮我解决这个问题。
我有一个名为MyPanel extend JPanel的类,使用GridLayout。每个单元格都包含一个小部件(一个JComboBox、JTextField、JLabel)。 我的主要类extend JFrame使用GridBagLayout。当我将MyPanel添加到其中时,它会占用大量空间(所有窗口都在我的桌面空间外水平移动)。我该怎么修?这是我的主类的构造函数 MyPanel构造函数
我想知道,如果从年初到某个日期过去的天数是奇数。我尝试使用LocalDate从我的字符串()中解析日期,但我得到错误: