Hadoop Mapreduce HDFS block 拆分

标签 hadoop mapreduce hdfs

我的问题是我有一个文本文件,其中有 100 个单词,用空格分隔,我需要做一个单词计数程序。

那么,当我的名称节点将文件拆分为 HDFS block 时,我们如何确保拆分仅在单词末尾完成?

即,如果我将文本文件中的第 50 个单词作为 Hadoop,如果将其拆分为 64MB block 时,当前 block 的存储可能在单词 Hadoop 的中心达到 64MB,因此一个 block 包含 'had ' 和其他 block 中的另一个 'oop'。

抱歉,如果这个问题听起来很愚蠢,但请提供答案。谢谢。

最佳答案

你的答案是输入拆分。

因为 HDFS 不知道文件的内容。在将数据存储到多个 block 中时,每个 block 的最后一条记录可能会被破坏。记录的第一部分可能在一个 block 中,同一记录的最后部分可能在其他 block 中。

为了解决 block 中的此类问题,MapReduce 使用了输入拆分的概念。

“ block ”不过是分布在多个数据节点上的大小为 128MB 的数据的物理划分,而“输入拆分”是数据的逻辑划分。

在运行 MapReduce 程序时,映射器的数量取决于输入拆分的数量,而在处理输入拆分时,包括包含损坏记录的下一个 block 的位置。

上图显示有三个 HDFS block ,Block-1 数据的最后一部分存储在 Block-2 中。在这种情况下,输入拆分将获取 Block-2 的位置以检索损坏的记录。

hadoopchannel

关于Hadoop Mapreduce HDFS block 拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46949331/

相关文章:

hadoop - 如何将 Hadoop Streaming 与 LZO 压缩的序列文件一起使用?

hadoop - 错误 : while processing statement: FAILED: Hive Internal Error: hive. mapred.supports.subdirectories 必须为真

hadoop - ClassCastException : org. apache.hadoop.io.LongWritable 无法转换为 org.apache.hadoop.hbase.io.ImmutableBytesWritable

hadoop-mapreduce reducer-combiner 输入

json - jackson jsonparser 在损坏的 JSON 中重新开始解析

hadoop - 定义一个可在映射器和缩减器中使用的数组列表

hadoop - Spark vs MapReduce,为什么Spark比MR快,原理?

java - 在新旧版本 Hadoop 上工作的 JAVA 中远程访问 HDFS 的方法

php - 我可以从自定义 Web 应用程序访问 HDFS 文件吗

hadoop - 无法从 Apache Nifi 连接到 Docker 中的 Hadoop