程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Hadoop實戰備忘

C++ Hadoop實戰備忘

編輯:C++入門知識

前言: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:       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 [plain]   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 [plain]   <?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、查看結果www.2cto.com     hadoop fs -ls output     hadoop fs -cat output/part-00000     hadoop fs -cat output/part-00001          結果格式如下 [plain]   1   1   12  1   13  1   2   1   3   1   4   1   5   1    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved