2021SC@SDUSC
接下来一段时间我将会对hadoop中的tool部分进行分析理解
Hadooop Streaming
hadoop streaming
Hadoop流是Hadoop发行版附带的实用程序。该实用程序允许您使用任何可执行文件或脚本作为映射程序和/或缩减程序来创建和运行映射/缩减作业。例如:
mapred streaming \
-input myInputDirs \
-output myOutputDir \
-mapper /bin/cat \
-reducer /usr/bin/wc
hadoop streaming是如何工作的
上面中的mapper跟reducer,它们从stdin读取输入(一行一行)并将输出发送到stdout。该实用程序将创建一个映射/缩减作业,将作业提交到适当的集群,并监视作业的进度,直到作业完成。
当为映射器指定可执行文件时,每个映射器任务将在映射器初始化时作为单独的进程启动可执行文件。当映射器任务运行时,它将其输入转换成行,并将这些行馈送到进程的stdin。同时,映射器从进程的stdout中收集面向行的输出,并将每一行转换成键/值对,作为映射器的输出进行收集。默认情况下第一个制表符前的一行的前缀是键该行的其余部分(不包括制表符)将是价值。如果行中没有制表符,则整行被视为键,该值为空。但是,这可以通过设置进行自定义-输入格式命令选项。
当一个可执行文件被指定给减压器时,每个减压器任务将作为一个单独的进程启动该可执行文件,然后减压器被初始化。当reducer任务运行时,它将其输入键/值对转换成行,并将这些行馈送到进程的stdin。同时,reducer从进程的stdout收集面向行的输出,将每一行转换成键/值对,作为reducer的输出进行收集。默认情况下,直到第一个制表符的行的前缀是键,该行的其余部分(不包括制表符)是值。但是,这可以通过设置进行自定义-outputformat命令选项。
将Java类指定为映射器/缩减器
mapred streaming \
-input myInputDirs \
-output myOutputDir \
-inputformat org.apache.hadoop.mapred.KeyValueTextInputFormat \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer /usr/bin/wc
用job submissions提交打包文件
mapred streaming \
-input myInputDirs \
-output myOutputDir \
-mapper myPythonScript.py \
-reducer /usr/bin/wc \
-file myPythonScript.py
mapred streaming \
-input myInputDirs \
-output myOutputDir \
-mapper myPythonScript.py \
-reducer /usr/bin/wc \
-file myPythonScript.py \
-file myDictionary.txt
为jobs提供其他插件
-inputformat JavaClassName
-outputformat JavaClassName
-partitioner JavaClassName
-combiner streamingCommand or JavaClassName
为输入格式提供的类应该返回文本类的键/值对。如果没有指定输入格式类,则默认使用文本输入格式。由于TextInputFormat返回LongWritable类的键,这些键实际上不是输入数据的一部分,因此这些键将被丢弃;只有值将通过管道传输到流映射器。
为输出格式提供的类应该采用文本类的键/值对。如果没有指定输出格式类,则默认使用文本输出格式。
通用命令选项
指定文件
指定Map-Only job
指定Reducers的数量
自定义如何拆分Key/value Pairs
使文件对任务可用
使归档对任务可用