设为首页 收藏本站
查看: 807|回复: 0

[经验分享] hadoop下的Pipes(用C++进行hadoop程序开发)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-13 08:41:07 | 显示全部楼层 |阅读模式
  
  说明:这篇博客来自我的CSDN博客:http://blog.iyunv.com/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分别如下:





fs.default.name
hdfs://localhost/






dfs.replication
1






mapred.job.tracker
localhost:8021


  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
#include
#include
#include
#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());
}
  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(&cap;_&cap;)O~...)
  

  

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85973-1-1.html 上篇帖子: 编译Hive/Hadoop总结 下篇帖子: ubuntu下安装hadoop
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表