`
lovnet
  • 浏览: 6897484 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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。

<?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。

<?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

以本机为例,输出

      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

#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:
    WordCountMapper(HadoopPipes::TaskContext& context){}
    void map(HadoopPipes::MapContext& context)
    {
        string line =context.getInputValue();
        vector<string>word = HadoopUtils::splitString(line, " ");
        for (unsigned int i=0; i<word.size(); i++)
        {
            context.emit(word[i],HadoopUtils::toString(1));
        }
    }
};

class WordCountReducer:public HadoopPipes::Reducer
{
public:
    WordCountReducer(HadoopPipes::TaskContext& context){}
    void reduce(HadoopPipes::ReduceContext& context)
    {
        int count = 0;
        while (context.nextValue())
        {
            count +=HadoopUtils::toInt(context.getInputValue());
        }
        context.emit(context.getInputKey(),HadoopUtils::toString(count));
    }
};

int main(int argc, char **argv)
{
    return HadoopPipes::runTask(HadoopPipes::TemplateFactory<WordCountMapper,WordCountReducer>());
}

2、创建Makefile编译文件
sudo gedit Makefile

CC = g++
HADOOP_INSTALL = /usr/local/hadoop
PLATFORM = Linux-i386-32
CPPFLAGS = -m32 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include
LIBS = -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib -lhadooppipes -lhadooputils -lpthread 
wordcount: wordcount.cpp
	$(CC) $(CPPFLAGS) $< -Wall $(LIBS) -g -O2 -o $@

3、运行编译文件
make
4、上传运行程序到hdfs
hadoop fs -mkdir bin
hadoop fs -put wordcount bin
5、准备测试文件
sudo gedit myfile.txt
文件内容:1 2 3 4 5 6 7 8 9 10 11 12 13。
6、上传测试文件
hadoop fs -mkdir input
hadoop fs -put myfile.txt input
7、编写配置文件
sudo gedit job_config.xml

<?xml version="1.0"?>
<configuration>
<property>
 <name>mapred.job.name</name>
 <value>WordCount</value>
</property>

<property>
 <name>mapred.reduce.tasks</name>
 <value>10</value>
</property>

<property>
 <name>mapred.task.timeout</name>
 <value>180000</value>
</property>

<property>
 <name>hadoop.pipes.executable</name>
 <value>/user/hadoop/bin/wordcount</value>
 <description> Executable path is given as"path#executable-name"
                sothat the executable will havea symlink in working directory.
                This can be used for gdbdebugging etc.
 </description>
</property>

<property>
 <name>mapred.create.symlink</name>
 <value>yes</value>
</property>

<property>
 <name>hadoop.pipes.java.recordreader</name>
 <value>true</value>
</property>

<property>
 <name>hadoop.pipes.java.recordwriter</name>
 <value>true</value>
</property>
</configuration>

8、运行任务
hadoop fs -rmr output
hadoop pipes -conf job_config.xml -input input/myfile.txt -output output -program bin/wordcount
9、查看结果
hadoop fs -ls output
hadoop fs -cat output/part-00000
hadoop fs -cat output/part-00001

结果格式如下

    1	1
    12	1
    13	1
    2	1
    3	1
    4	1
    5	1


分享到:
评论

相关推荐

    Hadoop实战实战-陆嘉恒(高清完整版)

    《Hadoop实战(第2版)》能满足读者全面学习最新的Hadoop技术及其相关技术(Hive、HBase等)的需求,是一本系统且极具实践指导意义的Hadoop工具书和参考书。第1版上市后广受好评,被誉为学习Hadoop技术的经典著作之...

    hadoop实战第二版及源码

    《Hadoop实战第二版》是由陆嘉恒编著的一本深度解析Hadoop技术的专业书籍,其源码的提供为读者提供了亲自动手实践Hadoop的机会,增强了学习效果。Hadoop作为大数据处理领域的基石,它的核心在于分布式存储系统HDFS...

    Hadoop实战(韩冀中)中文版

    Hadoop实战(韩冀中)中文版 pdf。《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个技术体系进行了全面的讲解,不仅包括hdfs和mapreduce这两大核心内容,而且还包括hive...

    Hadoop实战中文版 完整版

    Hadoop实战中文版 完整版

    Hadoop实战 中文版

    纵情享受海量数据之美!揭开云计算的神秘面纱!深入分析,追本溯源!作为云计算所青睐的分布式架构,hadoop 是一个用java 语言... 《hadoop实战》适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读参考。

    Hadoop实战++第2版.pdf 高清扫描带书签 免费下载

    hadoop实战 第二版带书签 免费下载

    hadoop实战全套视频

    hadoop实战全套视频,高质量hadoop视频资料,你值得拥有

    《Hadoop实战》中文版电子书下载

    《Hadoop实战》一书是IT领域特别是大数据处理与分析方向的重要参考资料,其核心知识点紧密围绕Hadoop这一开源框架展开,旨在帮助读者深入理解和掌握Hadoop的实际应用与操作技巧。以下是对该书中关键知识点的详细解析...

    hadoop实战第二版(陆嘉恒)

    《Hadoop实战第二版》是由国内知名大数据专家陆嘉恒编著的一本深入浅出的Hadoop技术指南。这本书针对Hadoop生态系统进行了详尽的解析,尤其适合对大数据处理感兴趣的IT从业者、学生以及研究人员阅读。作为第二版,...

    HADOOP硬实战2

    《Hadoop硬实战》收集了85个问题场景以及解决方案的实战演练。在关键问题领域对基础概念和实战方法做了权衡,例如导入导出、序列化,以及LZO压缩。你将会学习到每个技术的细节,以及当遇到一个具体问题时能够给出...

    hadoop 实战 中文版

    《Hadoop实战》中文版是一本深入探讨Apache Hadoop生态系统技术的书籍,旨在帮助读者理解和掌握分布式计算的核心概念以及在实际项目中的应用。Hadoop Action是本书的副标题,暗示了其强调实践性的特点,旨在通过具体...

    hadoop 实战 中文版 韩冀中

    《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个技术体系进行了全面的讲解,不仅包括hdfs和mapreduce这两大核心内容,而且还包括hive、hbase、mahout、pig、zookeeper、...

    Hadoop实战.源代码

    《Hadoop实战.源代码》这个压缩包包含的资源是关于Hadoop技术的实战指南以及相关的源代码,对于想要深入理解和应用Hadoop的IT从业者来说,这是一个宝贵的资料库。Hadoop是一个开源的分布式计算框架,它允许在大量...

    Hadoop实战-陆嘉恒(高清完整版)

    《Hadoop实战-陆嘉恒(高清完整版)》是一本深入浅出介绍Hadoop技术的书籍,尤其适合初学者作为入门教材。Hadoop作为大数据处理领域的基石,其重要性不言而喻。这本书详细讲解了Hadoop的核心概念、架构以及实际应用,...

    Hadoop实战 第2版

    Hadoop 实战第二版,对整个Hadoop体系进行全面的讲解。

    大数据云计算技术 hadoop实战培训(共56页).ppt

    【大数据云计算技术 hadoop实战培训】的PPT深入解析了如何应对海量数据处理的挑战,以及Hadoop在其中的关键作用。大数据是指无法用传统数据库管理工具处理的大量、高速、多样的信息资产,而云计算则提供了按需分配...

    Hadoop实战(全面、权威的Hadoop实战教程)中文第一版陆嘉恒著

    内容全面,涵盖Hadoop技术本身和Hive、HBase、Mahout、Pig、ZooKeeper、Avro、Chukwa等所有与Hadoop相关的子项目! 实战性强,为各个知识点精心设计了大量经典的小案例,易于理解,可操作性强!

    《Hadoop实战》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于获取《Hadoop实战》一书PDF版本的资源链接。接下来,我们将围绕这一主题展开讨论,重点介绍Hadoop的基本概念、功能特性以及如何利用这本书籍来深入学习Hadoop技术。 ...

    Hadoop实战_影印版

    《Hadoop实战》作为云计算所青睐的分布式架构,Hadoop是一个用Java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。《Hadoop实战》分为3个部分,深入浅出地...

Global site tag (gtag.js) - Google Analytics