博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop下的Pipes(用C++进行hadoop程序开发)
阅读量:5020 次
发布时间:2019-06-12

本文共 4706 字,大约阅读时间需要 15 分钟。


 

说明:这篇博客来自我的CSDN博客:


 

经过一上午的努力,终于以伪分布式模式运行了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)/includemax_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 
sudo wget 
sudo wget 

更新完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+999999999990043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+999999999990043011990999991950051518004+68750+023550FM-12+038299999V0203201N00261220001CN9999999N9-00111+999999999990043012650999991949032412004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+01111+999999999990043012650999991949032418004+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~...)

 

 

 

 

转载于:https://www.cnblogs.com/didiaoxiong/p/3228613.html

你可能感兴趣的文章
war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法...
查看>>
【ATT】Longest Consecutive Sequence
查看>>
Linux SSH远程文件/目录传输命令scp
查看>>
装饰器
查看>>
Linux常用操作命令(三)
查看>>
主机管理+堡垒机系统开发:前端显示审计日志(九)
查看>>
【职场生活】言多必失,职场成熟人绝不说的十句话
查看>>
Vue.js实现checkbox的全选和反选
查看>>
趣谈Linux操作系统学习笔记:内核态内存映射:如何找到正确的会议室?(第26讲)...
查看>>
Metasploit 读书笔记-持久控制
查看>>
《Windows驱动开发技术详解》之驱动程序的基本结构
查看>>
debezium关于cdc的使用(上)
查看>>
iOS团队编码规范
查看>>
Cloud 学习笔记9. Project 1 : Inverted Index
查看>>
LNMP构建
查看>>
PXE批量自动装机Centos 7
查看>>
Nginx配置优化
查看>>
nginx 2配置文件
查看>>
PHP 解析环境安装
查看>>
nginx 1源包安装
查看>>