我想了解如何使用KFS作为Hadoop中的文件系统来实现mapreduce。
#。/ bin / start-mapred.sh
如果map / reduce作业/任务跟踪器已启动,则所有I / O都将完成KFS。
因此,假设我的输入文件分散在不同的节点(Kosmos服务器)中,我如何(使用KFS作为文件系统的hadoop客户端)发出Mapreduce命令?
此外,在发出Mapreduce命令后,我的hadoop客户端将从不同服务器获取所有数据到我的本地机器,然后执行Mapreduce或者它会在输入文件所在的机器上启动TaskTracker守护程序在那里找到并执行Mapreduce? 如果我错了请纠正我,但我想输入文件顶部Mapreduce的位置是由函数getFileBlockLocations(FileStatus,long,long)返回的。
非常感谢您的时间并帮助我。
此致 NIKHIL
答案 0 :(得分: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