说明:这篇博客来自我的CSDN博客:http://blog.csdn.net/lxxgreat/article/details/7755369


经过一上午的努力,终于以伪分布式模式运行了C++版的MapReduce.下面逐一介绍这一过程

一、先决条件
    1. 在Linux系统上已安装好hadoop 1.0.X版本(本人系统为CentOS5.5(64位系统),hadoop版本为1.0.3,其它系统有可能不同)
    2. 了解hadoop基本概念

二、步骤(如果已具备该步骤下的条件可以跳过该步骤)
    1.修改$HADOOP_INSTALL/conf目录下的三个文件core-site.xml, hdfs-site.xml, mapred-site.xml分别如下:

<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value><!--only one copy-->
</property>
</configuration>
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:8021</value>
</property>
</configuration>

2.配置SSH(即无密码访问本机,在CentOS5下比较麻烦)【遇到的困难1】

1). 确认系统已经安装好OpenSSH的server 和client
  安装步骤这里不再讲述,不是本文的重点。
2). 确认本机sshd的配置文件(需要root权限)
  $ vi /etc/ssh/sshd_config
  找到以下内容,并去掉注释符”#“
  RSAAuthentication yes
  PubkeyAuthentication yes
  AuthorizedKeysFile      .ssh/authorized_keys
3).  如果修改了配置文件需要重启sshd服务 (需要root权限)
  $ /sbin/service sshd restart
4). ssh登陆系统 后执行测试命令:
  $ ssh localhost
  回车会提示你输入密码,因为此时还没有生成证书
5).生成证书公私钥的步骤:
  $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
6).测试登陆 ssh localhost:
  $ ssh localhost
  正常情况下会登陆成功,显示一些成功登陆信息,如果失败请看下面的 一般调试步骤
7).若登录失败,很有可能是authorized_keys的权限问题,添加权限
 $ chmod 600 ~/.ssh/authorized_keys
8).测试登陆 ssh localhost:(一般来说会成功!)

3.格式化HDFS文件系统

1)命令: hadoop namenode -format

4.启动守护进程(dfs和mapred,需要正确设置好前面三个文件,否则易出错)

$ start-dfs.sh
     $ start-mapred.sh

5.编写CPP文件,源码如下:

#include <algorithm>
#include <limits>
#include <stdint.h>
#include <string> #include "hadoop/Pipes.hh"
#include "hadoop/TemplateFactory.hh"
#include "hadoop/StringUtils.hh" class MaxTemperatureMapper : public HadoopPipes::Mapper {
public:
MaxTemperatureMapper(HadoopPipes::TaskContext& context) {
}
void map(HadoopPipes::MapContext& context) {
std::string line = context.getInputValue();
std::string year = line.substr(15, 4);
std::string airTemperature = line.substr(87, 5);
std::string q = line.substr(92, 1);
if (airTemperature != "+9999" &&
(q == "0" || q == "1" || q == "4" || q == "5" || q == "9")) {
context.emit(year, airTemperature);
}
}
}; class MapTemperatureReducer : public HadoopPipes::Reducer {
public:
MapTemperatureReducer(HadoopPipes::TaskContext& context) {
}
void reduce(HadoopPipes::ReduceContext& context) {
int maxValue = INT_MIN;
while (context.nextValue()) {
maxValue = std::max(maxValue, HadoopUtils::toInt(context.getInputValue()));
}
context.emit(context.getInputKey(), HadoopUtils::toString(maxValue));
}
}; int main(int argc, char *argv[]) {
return HadoopPipes::runTask(HadoopPipes::TemplateFactory<MaxTemperatureMapper,
MapTemperatureReducer>());
}

6.编写Makefile文件,源码如下(注意:该文件和参考书《hadoop权威指南中文第二版》有一点区别,添加了 "-lcrypto",将"-m32"改为"-m64")

CC = g++
CPPFLAGS = -m64 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include max_temperature: max_temperature.cpp
$(CC) $(CPPFLAGS) $< -Wall -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib -lhadooppipes -lcrypto -lhadooputils -lpthread -g -O2 -o $@

7.安装gcc, g++, 标准C库

安装gcc,g++步骤
1).添加软件更新源
更新方法如下:
先进入yum源配置目录
cd /etc/yum.repos.d

备份系统自带的yum源
mv CentOS-Base.repo CentOS-Base.repo.save

下载其他更快的yum源
sudo wget http://centos.ustc.edu.cn/CentOS-Base.repo
sudo wget http://mirrors.163.com/.help/CentOS-Base-163.repo
sudo wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

更新完yum源后,建议更新一下,使操作立即生效
yum makecache

2).安装gcc
sudo yum install gcc -y

3).安装g++(sudo yum install g++ 报告无法找到g++包,原来这个包的名字叫做gcc-c++。完整的应该是sudo yum install gcc-c++)
sudo yum install gcc-c++ -y

4).安装标准C库

sudo yum install glibc-devel -y

8.安装openssl,命令如下

cd /usr/local/src 
sudo tar zxvf openssl-0.9.8l.tar.gz
sudo cd openssl-0.9.8l
sudo ./config 
sudo make 
make install 
sudo cp libcrypto.a /usr/local/lib
sudo cp libssl.a /usr/local/lib

9.编译源文件,即max_temperature.cpp

1)设置环境变量: exoprt PLATFORM=Linux-amd64-64

2)在max_temperature.cpp所在目录下执行make命令

10.上传文件到HDFS

1)上传本地可执行文件max_temperature到HDFS的bin/max_temperature目录下: hadoop fs -put max_temperature bin/max_temperature

2)上传数据到HDFS: hadoop fs -put sample.txt sample.txt

3)sample.txt内容如下:

0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+00001+99999999999
0043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+99999999999
0043011990999991950051518004+68750+023550FM-12+038299999V0203201N00261220001CN9999999N9-00111+99999999999
0043012650999991949032412004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+01111+99999999999
0043012650999991949032418004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+00781+99999999999

11.使用hadoop pipes命令运行作业,命令如下:

hadoop pipes -D hadoop.pipes.java.recordreader=true -D hadoop.pipes.java.recordwriter=true -input sample.txt -output output -program bin/max_temperature

12.查看作业执行结果:

hadoop fs -cat output/*

若结果为

1949    111
1950    22

表明上述11项设置正确。(庆祝一下,...~O(∩_∩)O~...)

hadoop下的Pipes(用C++进行hadoop程序开发)的更多相关文章

  1. 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发

    以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066      13726230503  ...

  2. 【HADOOP】| 环境搭建:从零开始搭建hadoop大数据平台(单机/伪分布式)-下

    因篇幅过长,故分为两节,上节主要说明hadoop运行环境和必须的基础软件,包括VMware虚拟机软件的说明安装.Xmanager5管理软件以及CentOS操作系统的安装和基本网络配置.具体请参看: [ ...

  3. 在本机eclipse中创建maven项目,查看linux中hadoop下的文件、在本机搭建hadoop环境

    注意 第一次建立maven项目时需要在联网情况下,因为他会自动下载一些东西,不然突然终止 需要手动删除断网前建立的文件 在eclipse里新建maven项目步骤 直接新建maven项目出了错      ...

  4. Hadoop下WordCount程序

    一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...

  5. 【原创 Hadoop&Spark 动手实践 10】Spark SQL 程序设计基础与动手实践(下)

    [原创 Hadoop&Spark 动手实践 10]Spark SQL 程序设计基础与动手实践(下) 目标: 1. 深入理解Spark SQL 程序设计的原理 2. 通过简单的命令来验证Spar ...

  6. 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

    HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...

  7. hadoop下安装mahout

    安装hadoop 完成 安装mahout 首先下载mahout压缩文件apache-mahout-distribution-0.12.2.tar.gz 放到/home/hadoop/software- ...

  8. hadoop下c++程序-天气实例

    非常希望能在hadoop上做c++程序.自己对c++还是有点情节的,依据<hadoop权威指南中文第二版>Hadoop的Pipes进行了试验,并測试成功 #include <algo ...

  9. hadoop下HDFS基本命令使用

    前提:启动hadoop 1. 查看hdfs下 " / " 的目录 hdfs dfs -ls / 2. 创建文件夹(在 " / " 创建hadoop文件夹) hd ...

随机推荐

  1. 二、 C#调用存储过程

    个人比较喜欢使用第二种传递参数的方法 1. 调用的方法 public DataTable ExceStoredProcedure (string strCom, SqlParameter[] comm ...

  2. AndroidStudio debug

    1. view as text

  3. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

  4. UVa 11536 Smallest Sub-Array (水题, 滑动窗口)

    题意:给定 n 个由0~m-1的整数组成的序列,输入 k ,问你找出连续的最短序列,使得这个序列含有1-k的所有整数. 析:这个题,很简单么,只要从头开始扫一遍就OK,时间复杂度为O(n). 代码如下 ...

  5. PostQueuedCompletionStatus详解

    PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包.该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatu ...

  6. JAX-RS入门 一 :基础

    简介 JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源.标注包括: @Path,标注资源类或方法的相对路径 @GET,@PUT, ...

  7. git/github 使用

    原文:http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html git/github学习笔记 Posted on 2011-08-25 2 ...

  8. 在Windows2012下安装SQL Server 2005无法启动服务的解决办法

    下面是我亲自经历过的总结. 因为尝鲜安装了Windows2012,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的 ...

  9. JQuery 弹出层,始终显示在屏幕正中间

    1.让层始终显示在屏幕正中间: 样式代码: .model{ position: absolute; z-index: 1003; width:320px; height:320px; text-ali ...

  10. JS获取URL参数 方法

    function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...