【发布时间】:2018-01-12 18:48:51
【问题描述】:
当我们将以下命令作为 hadoop mapreduce 流的一部分运行时
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streamingxxxx.jar -input cities.txt -output streamout -mapper /bin/cat -reducer 'grep -i CA'
1)基于 Java 的 mapreduce 作业是否在后台运行?
【问题讨论】:
当我们将以下命令作为 hadoop mapreduce 流的一部分运行时
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streamingxxxx.jar -input cities.txt -output streamout -mapper /bin/cat -reducer 'grep -i CA'
1)基于 Java 的 mapreduce 作业是否在后台运行?
【问题讨论】:
你是对的,它是在幕后运行的 java 代码。MapReduce 作业由StreamJob 触发,如果它不是 java 类,则 Mapper 只是指定命令的包装器。
【讨论】:
你可以在article找到你的命令的内部结构
mapper 和 reducer 都是可执行文件,它们从标准输入(逐行)读取输入并将输出发送到标准输出。该实用程序将创建 Map/Reduce 作业,将作业提交到适当的集群,并监控作业的进度,直至完成。
当为映射器指定可执行文件时,每个映射器任务将在映射器初始化时将可执行文件作为单独的进程启动。当映射器任务运行时,它将其输入转换为行并将这些行提供给进程的标准输入。同时,映射器从进程的标准输出中收集面向行的输出,并将每一行转换为键/值对,作为映射器的输出收集。
当为reducer 指定一个可执行文件时,每个reducer 任务将作为一个单独的进程启动该可执行文件,然后reducer 被初始化。随着 reducer 任务的运行,它将其输入键/值对转换为行并将这些行提供给进程的标准输入。同时,reducer 从流程的 stdout 中收集面向行的输出,将每一行转换为键/值对,作为 reducer 的输出收集。
【讨论】: