当前位置:编程学习 > C/C++ >>

C++ Hadoop实战备忘

前言:hadoop用于解决大数据处理问题。
看到这么火,咱也来凑把热闹,瞧瞧到底是什么神奇的技术。
实战过程,还是很波折。
毕竟,对这些hadoop的命令不是很熟。
所幸,天不负有心人,终于跑通了第一个示例。
对我而言,这个的意义,不亚于输出了开天辟地的“hello world”。
 
配置过程中出错时,不要泄气,一般是由于路径配置不对引起,可与本文档对比查错。
 
操作系统:Ubuntu 10.04 LTS
JDK:jdk-6u18-linux-i586.bin
Hadoop:hadoop-0.21.0
说明:hadoop版本一定要与本文档匹配,新版本目录格式已做修改。
步骤一:配置环境
本步骤参见:Hadoop环境搭建——单节点篇
  1、安装jdk1.6.0_18
    1)在usr下面新建一个文件夹Java,然后将jdk复制过来.
      sudo mkdir /usr/Java
      sudo cp jdk的路径 /usr/Java
    2)进入到Java目录下,改变文件权限为可执行
      cd /usr/Java 
      sudo chmod u+x jdk-6u18-linux-i586.bin
    3)执行安装
      (现象为Unpacking....加一连串解压信息)
      sudo ./jdk-6u18-linux-i586.bin
  2、安装hadoop0.21.0
    1)将hadoop0.21.0.tar.gz复制到usr下面的local文件夹内
      sudo cp hadoop的路径 /usr/local
    2)进入到local目录下,解压hadoop-0.21.0.tar.gz
      cd /usr/local
      sudo tar -xzf hadoop-0.21.0.tar.gz
    3)为了方便管理,将解压后的文件夹名改为hadoop
      sudo mv hadoop-0.21.0 hadoop
  3、创建一个名为hadoop的用户和用户组
    1)创建一个名为hadoop的用户组
      sudo addgroup hadoop
    2)创建一个名为hadoop的用户,归到hadoop用户组下
      sudo adduser --ingroup hadoop hadoop
    3)用gedit打开etc下的sudoers文件
      sudo gedit /etc/sudoers
    4)在 root   ALL=(ALL)  ALL 下面添加如下一行,然后保存关闭gedit
      hadoop  ALL=(ALL)  ALL
  4、配置环境变量
    1)用gedit打开etc下的profile文件
      sudo gedit /etc/profile
    2)在文件最后加入如下几行
      export CLASSPATH=.:/usr/Java/jdk1.6.0_23/lib:/usr/Java/jdk1.6.0_18/jre/lib:$CLASSPATH
      export PATH=.:/usr/Java/jdk1.6.0_23/bin:/usr/Java/jdk1.6.0_18/jre/bin:/usr/local/hadoop/bin:$PATH
    3)保存后关闭gedit,并重启机器
      sudo reboot
    4)重启后用hadoop用户登录,验证配置是否成功
      java -version(验证java配置是否成功)
  5、创建ssh-key
    1)确保网络通畅,然后装载ssh服务
      sudo apt-get install openssh-server
    2)创建ssh-key,为rsa
      ssh-keygen -t rsa --P
    3)将此ssh-key添加到信任列表中,并启用此ssh-key
      cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
      sudo /etc/init.d/ssh reload
    4)重启系统
  6、配置hadoop
    1)进入到hadoop目录下,配置conf目录下的hadoop-env.sh中的JAVA_HOME
      cd /usr/local/hadoop
      sudo gedit conf/hadoop-env.sh
      (打开后在文档的上部某行有“#export JAVA_HOME=...”字样的地方,去掉“#”,然后在等号后面填写你的jdk路径,完全按此文档来的话应改为 "export JAVA_HOME=/usr/Java/jdk1.6.0_23" )
    2)配置conf目录下的core-site.xml
      sudo gedit conf/core-site.xml
      配置文件内容core-site.xml。
[plain]  
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  
<!-- Put site-specific property overrides in this file. -->  
  
<configuration>  
<property>  
       <name>fs.default.name</name>  
       <value>hdfs://localhost:9000</value>   
</property>  
  
 <property>  
       <name>dfs.replication</name>  
       <value>1</value>   
</property>  
  
<property>   
       <name>hadoop.tmp.dir</name>  
       <value>/home/hadoop/tmp</value>   
</property>  
</configuration>  
    3)配置conf目录下的mapred-site.xml
      sudo gedit conf/mapred-site.xml
      配置文件内容mapred-site.xml。
[plain]  
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  
<!-- Put site-specific property overrides in this file. -->  
  
<configuration>  
<property>   
      <name>mapred.job.tracker</name>   
      <value>localhost:9001</value>  
 </property>   
</configuration>  
 
    4)格式化namenode (首次运行必需的)
      cd /usr/local/hadoop
      hadoop namenode -format
    5)启动hadoop
      sudo chown -hR hadoop /usr/local/hadoop
      bin/start-all.sh
      说明:若启动异常,可重启后重试。
    6)验证hadoop是否正常启动
      jps
      
      以本机为例,输出
[plain]  
2776 SecondaryNameNode  
10848 Jps  
2322 NameNode  
2886 JobTracker  
2539 DataNode  
3102 TaskTracker  
 
步骤二、运行C++ MapReduce程序
本步骤参考文档:Hadoop的C++扩展了解。
  1、创建wordcount.cpp
    cd /home/hadoop/tmp
    mkdir wordcount
    cd wordcount
    sudo gedit wordcount.cpp
[cpp]  
#include<algorithm>  
#include<limits>  
#include<string>  
#include"stdint.h"  
#include"hadoop/Pipes.hh"  
#include"hadoop/TemplateFactory.hh"  
#include"hadoop/StringUtils.hh"  
using namespace std;  
  
class WordCountMapper:public HadoopPipes::Mapper  
{  
public:  
    WordCountMappe
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,