0

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

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

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

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

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

问候, 尼基尔

4

1 回答 1

1

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

映射减少任务

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

  • 该框架对映射的输出进行排序,然后将其输入到 reduce 任务。

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

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

图:2 图:3 上图: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

于 2013-02-22T06:40:39.073 回答