Hadoop目前人气超旺,返璞归真的KV理念让人们再一次换一个角度来冷静思考一些问题。

但随着近些年来写C/C++的人越来越少,网上和官方WIKI的教程直接落地的成功率却不高,多少会碰到这样那样的问题。

现在我就重新整理下搭建过程的一些细节,供同好者分享,也请多多指点。

1,一些条件:

VituralBox 4.3 Win7 x64

Centos 6.4 x64_86(来自某国内某镜像网站)

Hadoop-1.2.1.tar.gz

安装openssl、zlib、glib必备(之前cassandra的文章有提及)

2,搭建集群过程(这部分简写,网上很多参考)

2.1 ssh_key互信

主备:ssh-keygen -t rsa 回车到底
主备:chmod 755 .ssh
主:cd .ssh
主:cp id_rsa.pub authorized_keys
主:chmod 644 authorized_keys
主:scp authorized_keys 192.168.137.102:/root/.ssh
备:#scp id_rsa.pub 192.168.137.101:/root/.ssh/192.168.137.102.id_rsa.pub
主:
cat 192.168.137.102.id_rsa.pub >> authorized_keys
主备:
vim /etc/ssh/sshd_config
改为 RSAAuthentication yes
PubkeyAuthentication yes
主备:
service sshd restart

2.2 hadoop-env.sh 头上增补

export JAVA_HOME=/opt/java1.6
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIRE=/opt/hadoop/conf

2.3 三大xml配置(此处略,网上都有,或者看老版本default)

2.4 master配置

192.168.137.101

2.5 slaver配置

192.168.137.102

2.6 同步

scp -r hadoop 192.168.137.102:/opt

2.7 格式化

hadoop namenode -format ,提升输入大写Y

2.8 拉起来

start-all.sh

2.9 初验

jps(主跑namenode*2+job,备跑task+data)

hadoop dfsadmin -report

或者开个IE,http://cent1:50070 看下日志,浏览下Hdfs

3,搭建C++ Pipes

cd /opt/hadoop/src/c++/pipes   ->  chmod 777 configure -> ./configure -> make -> make install

cd /opt/hadoop/src/c++/utils     ->  chmod 777 configure -> ./configure -> make -> make install

cd //opt/hadoop/src/c++/libhdfs ->  chmod 777 configure -> ./configure -> make -> make install

把生成的静、动库文件(比自带版本size打了3~4倍)扔到下面三个目录(为今后方便起见)

/opt/hadoop/c++/Linux-amd64-64/lib

/usr/lib64

/usr/lib

/usr/local/lib

及自己的开发目录

把hadoop自带的头文件/opt/hadoop/c++/Linux-amd64-64/include扔到

/usr/include

/usr/local/include

及自己的开发目录

重启hadoop。不做第三步,在开始reduce的过程中会遇到服务器认证失败的报错。

4,开发环境

4.1 用网上北美气象局的SAMPLE

[root@cent3 tt]# more 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

4.2 用网上max_temperature sample

#include "hadoop/Pipes.hh"
#include "hadoop/TemplateFactory.hh"
#include "hadoop/StringUtils.hh"

#include <algorithm>
#include <limits>
#include <stdint.h>
#include <string>
#include <stdio.h>

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=0;
while(context.nextValue())
{
maxValue=std::max(maxValue,HadoopUtils::toInt(context.getInputValue()));
}
context.emit(context.getInputKey(),HadoopUtils::toString(maxValue));
}
};

int main()
{
return HadoopPipes::runTask(HadoopPipes::TemplateFactory<MaxTemperatureMapper,MapTemperatureReducer>());
}

4.3 设置Makefile或者VIM自带设置

CC=g++
PLATFORM=Linux-amd64-64
HADOOP_INSTALL=/opt/hadoop
CPPFLAGS = -m64 -I/usr/local/include
max_temperature: maxtemperature.cpp
  $(CC) $(CPPFLAGS) $< -Wall -L/usr/local/lib -lhadooppipes -lcrypto -lhadooputils -lpthread -g -O2 -o $@

==

52 "======================
53 "F5 Compile c
54 "======================
55 map <F5> :call Compilepp()<CR>
56 func! Compilepp()
57 if &filetype == 'cpp'
58 exec "w"
59 exec "! clear;
60 \ echo Compiling: ./% ...;
61 \ echo ;
62 \ g++ % -g -lstdc++  -L/usr/local/lib -lhadooppipes -lcrypto -lhadooputils -lpthread  -o %<.o;
63 \ echo Complie Done;
64 \ echo Start Testing;
65 \ echo ;
66 \ echo ;
67 \ echo ;
68 \ ./%<.o;"
69 endif
70 endfunc

==

4.4 开始实验

hadoop dfs -rmr output
hadoop dfs -rm bin/max_temperature
hadoop dfs -put max_temperature bin/max_temperature
haddop dfs -put sample.txt sample.txt

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

大致基本上就是这样了,对重新编译一事,wiki也没有多说什么,也是从别家了解到一些信息,在此要感谢某位前辈。

最后再附上一张我自己理解的MP流程图供参考

搭建及修正Hadoop1.2.1 MapReduce Pipes C++开发环境的更多相关文章

  1. (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

    配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...

  2. 搭建Spark源码研读和代码调试的开发环境

    转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...

  3. 使用gulp搭建一个传统的多页面前端项目的开发环境

    1.简介 使用gulp搭建一个传统的多页面前端项目的开发环境 支持pug scss es6编译支持 支持开发环境和打包生成sourceMap 支持文件变动自动刷新浏览器,css是热更新(css改动无需 ...

  4. Windows上IDEA搭建最新Spark2.4.3源码调试的开发环境

    相信很多同学都想通过阅读一些框架的源码,来提高自己的代码能力,但往往在第一步,搭建环境的时候就碰了壁. 本篇就来介绍下如何在Windows下,将最新版的Spark2.4.3编译,并导入到IDEA编译器 ...

  5. 非在线方式搭建Android开发环境

    android 环境搭建 http://jingyan.baidu.com/article/90895e0fba1b5664ed6b0b7e.html android开发环境的搭建(解决sdk下载更新 ...

  6. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

  7. MyEclipse10搭建Strust2开发环境

    一.创建一个JavaWeb项目 启动MyEclipse10    ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProjec ...

  8. Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建

    1.      首先启动VMware,如果没有安装,请查看前面VMware的安装视频 2 启动虚拟机向导,选择自定义 3 单击下一步 4 选择稍后安装操作系统 5 .选择unbntu 64linux ...

  9. 传智播客C/C++各种开发环境搭建视频工具文档免费教程

    传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓&quo ...

随机推荐

  1. struts详细解释拦截器

    1.拦截器:Struts2拦截器将一个Action要么Action的方法.之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现. WebWork:拦截器是动态拦截Action调用的对象 ...

  2. POJ 2208 已知边四面体六个长度,计算体积

    Pyramids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2718   Accepted: 886   Special ...

  3. Python 摘录LinkedIn用户联系人

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-18 @author: guaguastd @name: l ...

  4. 超过lua上帝的语言

    上帝的语言(god)它是基于lua和RPP新一代编程语言 为什么需要它? 1.好多人不喜欢lua语法,god的语法更像C 2.god支持元编程.闭包.协程 3.凡是lua支持的特性god也支持,lua ...

  5. ASP.NET 5 Beta8 发布

    ASP.NET 5 Beta8 发布 ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home ...

  6. 于Eclipse传导C/C++配置方法开发(20140721新)

    Eclipse 它是一个开源.基于Java可扩展的开发平台. 在其自己的.它只是一个框架和一组服务.对于通过插件组件构建开发环境. --从百度百科的短语. 简单的说Eclipse 是免费的开源的Jav ...

  7. WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

    WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...

  8. NSIS:判断程序是否运行并进行卸载

    原文NSIS:判断程序是否运行并进行卸载 今天在评论里看到网友说要一个这样的功能,就简单写了一个,本来想做360杀手来着,但遗憾的是我从来不用360的东西,所在电脑上也没有360相关的软件进行测试,所 ...

  9. dede织梦背景经常使用标签

    一些非常实用的标签调用的方法 关键描写叙述调用标签: <meta name="keywords" content="{dede:field name='keywor ...

  10. 微软发布Win10开发者指南视频

    假设你是一个开发者,推荐你看看微软今天推出了一系列视频,标题是Win10开发人员指南,总体长度6时,多达22章内容,介绍很广泛.其实,即使你是编程新手或仅有兴趣,也值得一看. 开发人员Jerry Ni ...