java - hadoop 是否为非本地映射器缓存 hdfs-block?

标签 java hadoop hdfs

假设我在 DN1 上运行映射器任务。我感兴趣的 hdfs-block 在 DN2 上。据我了解,hadoop 不会缓存 DN1 上的 block 。这意味着如果我正在读取 1MB 的记录,而 block 是 512 MB,那么我将通过网络 512 次。这是正确的吗?


也许我的问题措辞不正确。我知道数据局部性,我的问题是关于数据局部性不可能的时代。如果 DN2 上的一个 block 中有 512 MB 的数据,但映射器在 DN1 上运行,并且记录读取器提供的每条记录都是 1MB,这是否意味着我们要通过网络 512 次?或者 hadoop 是否缓存该 block ——这意味着它是否将 512 MB 的 block 从 DN2 复制到 DN1,然后开始为记录读取器提供服务。我认为它不会缓存...我认为它通过网络 512 次并逐条记录地获取信息。

最佳答案

Hadoop 的一大障碍是“数据局部性”。第一个数据处理(映射器)将在数据物理存在的节点上运行。一个异常(exception)是当 mapper 处理 block 的最后“行”时,该行可以在其他节点中拆分为一个 block ,在这种情况下数据将被复制到开始处理的 mapper。

关于java - hadoop 是否为非本地映射器缓存 hdfs-block?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392406/

相关文章:

java - 等待不允许 JFrame 更新

java - 我可以在 Apache Ignite 计算中混合使用 C++ 和 Java 吗?

hadoop - 以编程方式读取 Hadoop Mapreduce Program 的输出

hadoop - 将文件从本地复制到hdfs

java - 读取 java 属性文件,值始终为空

java - Junit 测试单独通过但一起运行时失败

hadoop - 如何在 Hadoop 2 + YARN 中计算并发#mappers 和#reducers?

hadoop - 在 Hive 中将日期作为命令行参数传递

apache-spark - PySpark-SparkContext : Error initializing SparkContext File does not exist

apache-spark - 将数据从HDFS发送到特定计算机