【问题标题】:how does Mapreduce on KFS happen?KFS 上的 Mapreduce 是如何发生的?
【发布时间】:2013-02-22 06:32:49
【问题描述】:

我想了解在 Hadoop 中使用 KFS 作为文件系统时 mapreduce 是如何发生的。

# ./bin/start-mapred.sh
如果 map/reduce 作业/任务跟踪器启动,所有 I/O 都将完成到 KFS。

那么,假设我的输入文件分散在不同的节点(Kosmos 服务器),我(hadoop 客户端使用 KFS 作为文件系统)如何发出 Mapreduce 命令?

此外,在发出 Mapreduce 命令后,我的 hadoop 客户端会从不同的服务器获取所有数据到我的本地机器,然后执行 Mapreduce,或者它会在输入文件所在的机器上启动 TaskTracker 守护进程在那里找到并执行 Mapreduce? 如果我错了,请纠正我,但我想输入文件顶部 Mapreduce 的位置是由函数 getFileBlockLocations (FileStatus, long, long) 返回的。

非常感谢您抽出宝贵时间帮助我。

问候, 尼基尔

【问题讨论】:

  • 你说的是 Kosmos 文件系统(KFS)
  • 是的。感谢您的回复,但我仍然不清楚 Mapreduce 实际发生在哪里?
  • 查看我的更新答案。

标签: hadoop mapreduce


【解决方案1】:

没有。 MapReduce 是一个以分布式方式在所有节点中运行的程序。主节点就像负责完成工作的所有数据/从节点的主管。

地图归约任务

  • MapReduce 作业通常将输入数据集拆分为独立的 由地图任务完全并行处理的块 方式。

  • 框架对地图的输出进行排序,然后将其输入到 减少任务。

  • 作业的输入和输出通常都存储在一个
    文件系统。

  • 框架负责调度任务、监控它们并
    重新执行失败的任务。

上图:3 显示了 MapReduce 如何在节点级别发生。

现在介绍一下您的 KFS:

当 Hadoop map/reduce 跟踪器启动时,这些进程(在本地和远程节点上)现在需要加载 KFS 的 libkfsClient.so 库。

为简化此过程,建议将libkfsClient.so 存储在 NFS 可访问目录中(类似于存储 Hadoop 二进制文件/脚本的位置);然后,修改 Hadoop 的 conf/hadoop-env.sh 添加以下行并为

<path>:
export LD_LIBRARY_PATH=<path>

查看此链接:http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/kfs/package-summary.html

【讨论】:

  • 这里的图2中解释的Output文件,也是存储在分布式系统的KFS/HDFS中。
  • 嗨!非常感谢您付出这么多的努力来回答我的问题。该图很好地解释了 MapReduce 是如何实际发生的。在 Hadoop 中有不同的文件系统,如 HDFS/KFS/S3/等。在 S3 的情况下,数据被提取到本地机器,然后在其上完成 MR。在下面继续评论......
  • 所以想问一下,在KFS的情况下,数据是从不同的服务器拉到本机的吗?或者 MR 框架是否在包含 MR 输入数据的节点上启动 TaskTracker 守护进程,因此 MR 是在不获取任何数据的情况下执行的?您指定的链接我已经看到,但它没有明确回答问题。感谢您的时间和精力。
  • 我仍然会说它对 GFS、HDFS 或 KFS(cloudstore) 的工作方式相同因为大多数地方 KFS 只是另一种选择,并且没有像 S3 那样特别提及,它们都适用于本地计算并且只对计算数据进行分组以进行减少过程。
猜你喜欢
  • 2014-11-20
  • 2015-06-16
  • 1970-01-01
  • 2017-12-12
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多