hadoop笔记 (4):streaming

hadoop 提供了 3 种方式来实现自己的功能,一种是 java 接口,另一种是 pipes,还有一种是 streaming。streaming 允许用任何语言来开发 mapper 和 reducer,它们和 hadoop 之间的交互通过标准输入/输出来进行。这种方式的好处是调试很方便。

先来看一个使用 bash 编写的 wordcount 的例子:

#!/bin/bash

while read line; do
    arr=($line)
    let i=0
    while ! [ -z ${arr[$i]} ]; do
        echo -e "${arr[$i]}\t1"
        let i=$i+1
    done

阅读全文…

hadoop笔记 (3):pipes例子分析 (2)

使用 partitioner 和 combiner

下面的程序是对 hadoop 1.0.3 自带例子(src/examples/pipes/impl/wordcount-part.cc)的一个修改版:

#include <string>
#include <vector>
using namespace std;

#include <hadoop/Pipes.hh>
#include <hadoop/StringUtils.hh>
#include <hadoop/TemplateFactory.hh>

class WordCountMapper : public HadoopPipes::Mapper {

    public:

        WordCountMapper(HadoopPipes::TaskContext& context) {}

        void map(HadoopPipes::MapContext& context)
        {
            vector<string> words = HadoopUtils::splitString(context.getInputValue(), " 

阅读全文…

hadoop笔记 (2):pipes例子分析 (1)

Pipes 是 hadoop 提供的 c++ 接口,但是在官网上找不到 pipes 的文档,只能从例子开始一点点摸索。实验环境是 debian 6 amd64,hadoop 1.0.3。hadoop 的安装目录是 $HOME/hadoop,安装和配置过程在上一篇安装笔记中有提到。

为了少敲些字符,给 hadoop 命令做了一个 alias:

alias hadoop='$HOME/hadoop/bin/hadoop'

单词统计程序

下面的程序是对 hadoop 1.0.3 自带的单词统计程序(src/examples/pipes/impl/wordcount-simple.cc)的一个修改版:

#include <string>
#include <vector>
using namespace std;

#include <hadoop/Pipes.hh>
#include <hadoop/StringUtils.hh>
#include <hadoop/TemplateFactory.hh>

class WordCountMapper 

阅读全文…

hadoop笔记 (1):安装和配置

记录一下 hadoop 集群的搭建过程,一共 3 台机器,操作系统都是 debian 6,hadoop 版本是1.0.4,jre 是源里的 openjdk-6。hadoop 官网的说明挺详细,就是不能快速搭建出一个能跑的环境。在网上找到一篇文章(见参考资料 [1]),虽然文章中用的是 0.20 版本,但是在 1.0.4 上也适用。

这里使用 master,slave1 和 slave2 分别作为三台机器的主机名。为了操作方便,每台机器上都有一个用户 hadoop,密码都一样。以下的配置操作都在 master 上进行。

hadoop 的配置(2013.03.16 更新)

把下载到的 hadoop-1.0.4.tar.gz 解压到 hadoop 的家目录下,建立一个软链接 hadoop 指向解压得到的目录,这样以后更新只需重新建立软链接指向新版本即可。

进入解压后的目录,根据实际情况修改 conf/hadoop-env.sh 中的 JAVA_HOME,使其指向 jdk 的安装目录:…

阅读全文…