用Bash Script编写Hadoop MapReduce Streaming

用Bash Script编写Hadoop MapReduce Streaming

标签(空格分隔): hadoop mapreduce bash



MapReduce对外提供一个多语言编写MR的功能,就是Hadoop Streaming。我们可以通过自己喜欢的语言来编写Mapper和Reducer函数,运行MapReduce job。

根据Hadoop Streaming的定义,只要我们能够从标准输入(standard input)读入数据,然后从标准输出(standard output)读出数据就OK了。但是有一点需要记住,就是如果你要使用自己喜欢的的语言,如Python,就必须要事先在集群上安装该语言对应的版本和对应的lib等等。这里给出Shell Script的示例

输入事文本文件,功能是从特定的字符开始统计单词的平均长度。你可以在程序里实现做些检查来忽略一些字符,也可以少用Pipes和一些command来提升性能等。

  1. Mapper Script : word_lenght.sh

    
    #!/bin/bash
    
    #This mapper script will read one line at a time and  then break it into words
    
    #For each word starting LETTER and LENGTH of the     word are emitted
    
    while read line
    do
    for word in $line do
    if [ -n $word ] then
        wcount=`echo $word | wc -m`;
        wlength=`expr $wcount - 1`;
        letter=`echo $word | head -c1`;
        echo -e "$letter\t$wlength";
    fi
    done
    done
    
    #The output of the mapper would be “starting letter  of each word” and “its length”, separated by a tab space.
    
  2. Reducer Script: avg_word_length.sh
#!/bin/bash
#This reducer script will take-in output from the mapper and emit starting letter of each word and average length
#Remember that the framework will sort the output from the mappers based on the Key
#Note that the input to a reducer will be of a form(Key,Value)and not (Key,
#This is unlike the input i.e.; usually passed to a reducer written in Java.
lastkey="";
count=0;
total=0;
iteration=1
while read line
 do
  newkey=`echo $line | awk ‘{print $1}‘`
  value=`echo $line | awk ‘{print $2}‘`
   if [ "$iteration" == "1" ] then
    lastkey=$newkey;c
    iteration=`expr $iteration + 1`;
   fi
   if [[ "$lastkey" != "$newkey" ]] then
    average=`echo "scale=5;$total / $count" | bc`;
    echo -e "$lastkey\t$average"
    count=0;
    lastkey=$newkey;
    total=0;
    average=0;
   fi
   total=`expr $total + $value`;
   lastkey=$newkey;
   count=`expr $count + 1`;
done
#The output would be Key,Value pairs(letter,average length of the words starting with this letter)

3 . run command

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming*.jar
-input /input -output /avgwl
-mapper mapper.sh
-reducer reducer.sh
-file /home/user/mr_streaming_bash/mapper.sh
-file /home/user/mr_streaming_bash/reducer.sh 

还可以用其他语言鞋mapreduce来对比一下性能

翻译:Hadoop MapReduce Streaming Using Bash Script

Google 大牛的Github Project

mapreduce in bash

时间: 2024-11-08 21:43:28

用Bash Script编写Hadoop MapReduce Streaming的相关文章

用PHP编写Hadoop的MapReduce程序

用PHP写hadoop的mapreduce程序 Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java 但hadoop里面有个contrib叫做hadoop streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper 或者 reducer 例如:hadoop jar hadoop-streaming.jar -input SOME_IN

hadoop mapreduce开发实践之HDFS文件分发by streaming

1.分发HDFS文件(-cacheFile) 需求:wordcount(只统计指定的单词),但是该文件非常大,可以先将该文件上传到hdfs,通过-cacheFile的方式进行分发: -cachefile hdfs://host:port/path/to/file#linkname #选项在计算节点上缓存文件,streaming程序通过./linkname的方式访问文件. 思路:mapper和reducer程序都不需要修改,只是在运行streaming的时候需要使用-cacheFile 指定hdf

[译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序

1. [译]下一代的Hadoop Mapreduce – 如何编写YARN应用程序 http://www.rigongyizu.com/hadoop-mapreduce-next-generation-writing-yarn-applications/

Hadoop MapReduce计算框架

1.MapReduce理论 1.1.MapReduce是什么? MapReduce用于处理海量数据的分布式计算框架,是Hadoop生态中的核心之一(MapReduce用于计算海量数据,HDFS用于存储海量数据):MapReduce是谷歌公司在研究如何处理海量数据所提出的一种面向大规模数据处理的并行计算模型和方法. 1.2.MapReduce概述 MapReduce是一个计算框架,用于对大数据进行处理,它的主要思想就是"分而治之":整个MapReduce计算过程可以分为Map(映射)阶段

使用Python实现Hadoop MapReduce程序

转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的ubuntu上的运行过程.文字基本采用博文使用Python实现Hadoop MapReduce程序,  打字很浪费时间滴. 在这个实例中,我将会向大家介绍如何使用Python 为 Hadoop编写一个简单的MapReduce程序. 尽管Hadoop 框架是使用Java编写的但是我们仍然需要使用像C+

Hadoop MapReduce原理及实例

MapReduce是用于数据处理的一种编程模型,简单但足够强大,专门为并行处理大数据而设计. 1. 通俗理解MapReduce MapReduce的处理过程分为两个步骤:map和reduce.每个阶段的输入输出都是key-value的形式,key和value的类型可以自行指定.map阶段对切分好的数据进行并行处理,处理结果传输给reduce,由reduce函数完成最后的汇总. 例如从大量历史数据中找出往年最高气温,NCDC公开了过去每一年的所有气温等天气数据的检测,每一行记录一条观测记录,格式如

Hadoop:MapReduce编程-WordCount统计单词个数-eclipse-java环境

之前习惯用hadoop streaming环境编写python程序,下面总结编辑java的eclipse环境配置总结,及一个WordCount例子运行. 一 下载eclipse安装包及hadoop插件 1去官网下载linux版本的eclipse安装包(或者在本人为了大家方便下载,上传到了csdn下载,网址: 2下载插件:hadoop-eclipse-plugin-2.6.0.jar 二 安装elicpse及hadoop插件 1 把eclipse解压到路径 /user/local/eclipse

hadoop mapreduce开发实践之HDFS压缩文件(-cacheArchive)

1.分发HDFS压缩文件(-cacheArchive) 需求:wordcount(只统计指定的单词[the,and,had...]),但是该文件存储在HDFS上的压缩文件,压缩文件内可能有多个文件,通过-cacheArchive的方式进行分发: -cacheArchive hdfs://host:port/path/to/file.tar.gz#linkname.tar.gz #选项在计算节点上缓存文件,streaming程序通过./linkname.tar.gz的方式访问文件. 思路:redu

【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析

Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS)的开源实现. MapReduce是Google MapReduce的开源实现. HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算. 本文主要参考了以下三篇博客学习整理而成. 1. Hadoop示例程序WordCount详解及实例 2. hadoop 学习笔