Hadoop Streaming
当前位置:以往代写 > 其他教程 >Hadoop Streaming
2019-06-14

Hadoop Streaming

Hadoop Streaming


Hadoop数据流是Hadoop自带刊行的实用措施。该实用措施答允建设和运行Map/Reduce任务的任何可执行文件或剧本映射器和/或减速器。

利用Python示例

对付Hadoop的数据流,我们思量的字计数问题。任何事情在Hadoop中必需有两个阶段:映射器和减速器。我们利用python剧本代码映射器和减速器在Hadoop下运行它。利用Perl和Ruby也是雷同的。

映射阶段代码

!/usr/bin/python
import sys
# Input takes from standard input for myline in sys.stdin: 
# Remove whitespace either side myline = myline.strip() 
# Break the line into words words = myline.split() 
# Iterate the words list for myword in words: 
# Write the results to standard output print '%s\t%s' % (myword, 1)

请确保此文件具有执行权限(利用chmod +x /home/ expert/hadoop-1.2.1/mapper.py)。

减速器阶段代码

#!/usr/bin/python
from operator import itemgetter 
import sys 
current_word = ""
current_count = 0 
word = "" 
# Input takes from standard input for myline in sys.stdin: 
# Remove whitespace either side myline = myline.strip() 
# Split the input we got from mapper.py word, count = myline.split('\t', 1) 
# Convert count variable to integer 
   try: 
      count = int(count) 
except ValueError: 
   # Count was not a number, so silently ignore this line continue
if current_word == word: 
   current_count += count 
else: 
   if current_word: 
      # Write result to standard output print '%s\t%s' % (current_word, current_count) 
   current_count = count
   current_word = word
# Do not forget to output the last word if needed! 
if current_word == word: 
   print '%s\t%s' % (current_word, current_count)

生存mapper.py和reducer.py 在 Hadoop 的主目次映射器和减速器代码。确保这些文件具有执行权限(利用chmod +x mapper.py 和 chmod +x reducer.py)。由于python具有巨细写敏感,因此沟通的代码可以从以下链接下载。

wordCount措施的执行

$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar \
   -input input_dirs \ 
   -output output_dir \ 
   -mapper <path/mapper.py \ 
   -reducer <path/reducer.py

个中“\”用于续行以便于阅读。

譬喻,

./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py

数据流事情道理

在上面的例子中,这两个映射器和减速是从尺度输入读取作为输入,并输出到尺度输出到Python剧本。实用措施将建设一个Map/Reduce功课,并将功课提交到一个符合的集群,并禁锢事情的希望环境,直至完成。

当指定映射器的剧本,每个映射任务将启动剧本作为一个单独的历程时映射器初始化。作为mapper任务运行时,输入转换成行给历程的尺度输入(STDIN)。在此期间,映射器收集从该要领的尺度输出(stdout)面向行输出和每一行转换为键/值对,其被收集作为映射器的输出。缺省环境下,一行到第一个制表符的前缀是键和行(不包罗制表符)的其余部门为值。假如在该行没有任何制表符,则整行键和值被视为null。然而,这可以被定制,每次需要1个。

#p#分页标题#e#

当指定减速剧本,每个减速器任务将启动剧本作为一个单独的历程,然后减速初始化。减速器任务运行时将其转换其输入键/值对,进入行并将该行历程的尺度输入(STDIN)。在此期间,在减速机收集来自该进程的尺度输出(stdout)的面向行的输出,每行转换成一个密钥/值对,其被收集作为减速机的输出。缺省环境下,一行到第一个制表符的前缀是键,(不包罗制表符)的其余部门的值为行。然而,这可以被定制为每次详细要求。

重要的呼吁

参数 描写
-input directory/file-name 输入位置映射。 (必填)
-output directory-name 输出位置的减速器。 (必填)
-mapper executable or script or JavaClassName 映射器可执行文件。 (必填)
-reducer executable or script or JavaClassName 减速器的可执行文件。 (必填)
-file file-name 使现有的映射器,减速机,或组合的可执行当地计较节点上。
-inputformat JavaClassName 类,应该提供返回键/值对文字类。假如没有指定,利用TextInputFormat作为默认。
-outputformat JavaClassName 类,提供给采纳键/值对文字类的。假如没有指定,利用TextOutputformat作为默认值。
-partitioner JavaClassName 类,确定哪个淘汰一个键被发送。
-combiner streamingCommand or JavaClassName 组合可执行文件映射输出。
-cmdenv name=value 通过情况变量数据流的呼吁。
-inputreader 对付向后兼容性:指定记录读取器类(而不是输入名目类)。
-verbose 具体的输出。
-lazyOutput 建设懒输出。譬喻,假如输格外式是基于FileOutputFormat,输出文件仅在第一次挪用output.collect(或Context.write)建设。
-numReduceTasks 指定减速器的数目。
-mapdebug 当map任务失败的剧本挪用。
-reducedebug 剧本挪用时低落任务失败。

    关键字:

在线提交作业