搭建及修正Hadoop1.2.1 MapReduce Pipes C++开发环境
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++开发环境的更多相关文章
- (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一. 需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...
- 搭建Spark源码研读和代码调试的开发环境
转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...
- 使用gulp搭建一个传统的多页面前端项目的开发环境
1.简介 使用gulp搭建一个传统的多页面前端项目的开发环境 支持pug scss es6编译支持 支持开发环境和打包生成sourceMap 支持文件变动自动刷新浏览器,css是热更新(css改动无需 ...
- Windows上IDEA搭建最新Spark2.4.3源码调试的开发环境
相信很多同学都想通过阅读一些框架的源码,来提高自己的代码能力,但往往在第一步,搭建环境的时候就碰了壁. 本篇就来介绍下如何在Windows下,将最新版的Spark2.4.3编译,并导入到IDEA编译器 ...
- 非在线方式搭建Android开发环境
android 环境搭建 http://jingyan.baidu.com/article/90895e0fba1b5664ed6b0b7e.html android开发环境的搭建(解决sdk下载更新 ...
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...
- MyEclipse10搭建Strust2开发环境
一.创建一个JavaWeb项目 启动MyEclipse10 ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProjec ...
- Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建
1. 首先启动VMware,如果没有安装,请查看前面VMware的安装视频 2 启动虚拟机向导,选择自定义 3 单击下一步 4 选择稍后安装操作系统 5 .选择unbntu 64linux ...
- 传智播客C/C++各种开发环境搭建视频工具文档免费教程
传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓&quo ...
随机推荐
- android:强大的图像下载和缓存库Picasso
1.Picasso一个简短的引论 Picasso它是Square该公司生产的一个强大的图像下载并缓存画廊.官方网站:http://square.github.io/picasso/ 仅仅须要一句代码就 ...
- Bug记录:微博的Java SDK返回经纬度错误
现象:美国的坐标点可能会定位到西藏地区-后发现原来负经度经解析后,均变成正的! 源码: private void getGeoInfo(String geo) { StringBuffer value ...
- C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘
章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加入放大镜的功 ...
- android 联系数据库
联系人数据库学习 2011-10-31(这是android2.3在接触db) 简单介绍 Android中联系人的信息都是存储在一个叫contacts2.db的数据库中.该数据库的路径是:/data/d ...
- Unit of Work
ABP使用及框架解析系列 - [Unit of Work part.2-框架实现] 前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:ht ...
- Android学习小Demo(19)利用Loader来实时接收短信
之前写过一篇文章<Android学习小Demo(13)Android中关于ContentObserver的使用>,在里面利用ContentOberver去监測短信URI内容的变化.我们先来 ...
- C# 判断文件的真实格式
为了防止图片木马,通过后缀判断文件的格式是不准确的.可以通过这种方式进行判断. static void Main(string[] args) { string path = @"C:\Us ...
- 备注ocp_ORACLE专题网络
声明:原创作品,出自 "深蓝的blog" 博客.欢迎转载.转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanl ...
- 【Eclipse高速发展-文章插件】google V8,对于调试Nodejs
安装的的时候能够通过 Help>Eclipse Marketplace的 搜索方式安装 或者 Help>Install New Software Name:googleV8 Locatio ...
- C++ STL它vector详细解释
Vectors vector它是C++标准模板库部分,它是一种多用途,你可以使用各种数据结构和算法的模板类和库. vector其原因被认为是一个容器.因为它可以被存储为各种类型的对象作为容器.一 ...