Filesystems Hadoop块大小问题

Filesystems Hadoop块大小问题,filesystems,hadoop,Filesystems,Hadoop,我的任务是为我的公司处理数TB的SCM数据。我建立了一个hadoop集群,并有一个脚本从SCM服务器中提取数据 由于我是通过流接口批量处理数据,所以我遇到了一个O'Reilly的Hadoop书似乎没有解决的块大小问题:跨越两个块的数据会发生什么?wordcount示例如何解决这个问题?到目前为止,为了解决这个问题,我们已经求助于使每个输入文件小于64mb 在考虑减速机脚本时,这个问题再次出现;地图中的聚合数据是如何存储的?那么,当减少碳排放量时,这个问题会出现吗 如果文件大于一个块,则可以将其拆

我的任务是为我的公司处理数TB的SCM数据。我建立了一个hadoop集群,并有一个脚本从SCM服务器中提取数据

由于我是通过流接口批量处理数据,所以我遇到了一个O'Reilly的Hadoop书似乎没有解决的块大小问题:跨越两个块的数据会发生什么?wordcount示例如何解决这个问题?到目前为止,为了解决这个问题,我们已经求助于使每个输入文件小于64mb


在考虑减速机脚本时,这个问题再次出现;地图中的聚合数据是如何存储的?那么,当减少碳排放量时,这个问题会出现吗 如果文件大于一个块,则可以将其拆分,这样每个文件块将转到不同的映射器,或者整个文件可以转到一个映射器(例如,如果此文件是gzip文件)。但是我想您可以使用一些配置选项来设置它


拆分会自动处理,您不必担心。maps的输出存储在hdfs上的tmp目录中。

如果每个块都可以干净地断开一部分数据,则这不应该是一个问题(如通过换行)。如果您的数据不是逐行数据集,则是,这可能是一个问题。您还可以增加集群上块的大小(dfs.block.size)

您还可以在流媒体中自定义输入如何进入映射器

映射步骤中的数据根据partioner类与映射键进行排序

然后将数据混洗在一起,使所有贴图键聚集在一起,然后传输到减速器。有时,在减速器步骤发生之前,如果您愿意,组合器会出现

很可能您可以创建自己的定制输入阅读器(这里是如何流式处理XML文档的示例)

您关于“跨越两个块的数据”的问题是RecordReader所处理的。RecordReader的用途有三个:

  • 确保每个k、v对都已处理
  • 确保每个k、v对仅处理一次
  • 处理跨块拆分的k、v对

  • (3)中实际发生的情况是,RecordReader返回到NameNode,获取下一个块所在的DataNode的句柄,然后通过RPC将整个块拉入,并读取第一条记录的剩余部分,直到记录分隔符。

    这很完美。通过将文件拆分大小限制为64MB(块的大小),从而将每个文件(适合一个块)映射到单个映射进程,我的大多数问题都得到了解决。在一个2节点集群上,我们在3分钟内处理了大约2gb的数据——速度快得离谱:)我认为“拆分”记录不应该有问题:就像常规文件系统一样,块大小是物理构造,在逻辑级别上不一定有深刻影响。因此,虽然将文件大小设置为块大小(理想情况下更小)是好的,但为了避免负面性能问题,不需要为了正确性而拆分。