搭建及修正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 ...
随机推荐
- struts详细解释拦截器
1.拦截器:Struts2拦截器将一个Action要么Action的方法.之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现. WebWork:拦截器是动态拦截Action调用的对象 ...
- POJ 2208 已知边四面体六个长度,计算体积
Pyramids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2718 Accepted: 886 Special ...
- Python 摘录LinkedIn用户联系人
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-18 @author: guaguastd @name: l ...
- 超过lua上帝的语言
上帝的语言(god)它是基于lua和RPP新一代编程语言 为什么需要它? 1.好多人不喜欢lua语法,god的语法更像C 2.god支持元编程.闭包.协程 3.凡是lua支持的特性god也支持,lua ...
- ASP.NET 5 Beta8 发布
ASP.NET 5 Beta8 发布 ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home ...
- 于Eclipse传导C/C++配置方法开发(20140721新)
Eclipse 它是一个开源.基于Java可扩展的开发平台. 在其自己的.它只是一个框架和一组服务.对于通过插件组件构建开发环境. --从百度百科的短语. 简单的说Eclipse 是免费的开源的Jav ...
- WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...
- NSIS:判断程序是否运行并进行卸载
原文NSIS:判断程序是否运行并进行卸载 今天在评论里看到网友说要一个这样的功能,就简单写了一个,本来想做360杀手来着,但遗憾的是我从来不用360的东西,所在电脑上也没有360相关的软件进行测试,所 ...
- dede织梦背景经常使用标签
一些非常实用的标签调用的方法 关键描写叙述调用标签: <meta name="keywords" content="{dede:field name='keywor ...
- 微软发布Win10开发者指南视频
假设你是一个开发者,推荐你看看微软今天推出了一系列视频,标题是Win10开发人员指南,总体长度6时,多达22章内容,介绍很广泛.其实,即使你是编程新手或仅有兴趣,也值得一看. 开发人员Jerry Ni ...