Hadoop實戰之三~ Hello World


本文介紹的是在Ubuntu下安裝用三台PC安裝完成Hadoop集群並運行好第一個Hello World的過程,軟硬件信息如下:

Ubuntu:12.04 LTS

Master: 1.5G RAM,奔騰處理器。

Slave1、Slave2:4G RAM,I3處理器。

開始

 1 安裝Ubuntu : http://cdimage.ubuntu.com/releases/12.04/release/,Ubuntu的安裝過程網上有很多,這里不再贅述了,安裝之前一定要對Linux的目錄樹和Mount有所了解。另外i,安裝Ubutu過程中,三個用戶名必須是一樣的,當然你后面建用戶也行,但是不方便。另外OpenSSH一定要先裝好。

2 安裝好后,開啟root:

sudo passwd root
sudo passwd -u root

3 開始安裝jdk 1.6 ,下載地址 http://www.oracle.com/technetwork/java/javase/downloads/java-se-6u24-download-338091.html
使用終端進入存放jdk-6u24-linux-i586.bin,我的位置是:/usr/lib。我推薦的終端軟件為:XShellXFTP。存放后后:

第一步:更改權限;默認文件沒有可執行權限

chmod g+x jdk-6u24-linux-i586.bin

第二步: 安裝

sudo -s ./jdk-6u24-linux-i586.bin

安裝完畢,下面配置環境變量

我安裝好后java的路徑是:/usr/lib/jdk1.6.0_24
配置classpath,修改所有用戶的環境變量:

sudo vi  /etc/profile  

在文件最后添加

#set java environment
export JAVA_HOME=/usr/lib/jdk1.6.0_24
export JRE_HOME=/usr/lib/jdk1.6.0_24/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

如果使用sudo提示不在用戶組中 則敲命令 su -  ,切換到root,繼續敲 visudo ,然后
在root ALL=(ALL:ALL) ALL下
添加
hadoop ALL=(ALL:ALL) ALL (ps:hadoop是我建的用戶名。)

重新啟動計算機,用命令測試jdk的版本
java -version
顯示如下信息:成功安裝

java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

5 hadoop安裝和運行
下載地址:http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-1.2.1/
存放目錄:/home/hadoop(hadoop是用戶名)
解壓: tar -zxvf hadoop-1.2.1.tar.gz

6 Hadoop集群配置:

1 修改三台主機的hosts文件 :

vi /etc/hosts

加入如下四行,分別修改為你的master機器和slave機器的ip地址即可

127.0.0.1 localhost
192.168.1.1 master
192.168.1.2 slave1
192.168.1.3 slave2
2 修改主機名 vi /etc/hostname
各自改為master,slave1,slave2.

3 配置master免SSH登錄slave

在master上生成密鑰:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

然后用xftp將~/.ssh文件下的所有文件拷貝到兩台slave機器即可。然后輸入命令。

   cd ~/.ssh
   scp authorized_keys slave1:~/.ssh/
   scp authorized_keys slave2:~/.ssh/

4 修改三台主機的配置文件 

vi /home/hadoop/hadoop-1.2.1/conf/hadoop-env.sh 

加入:export JAVA_HOME=/usr/lib/jdk1.6.0_24 (更改為你們自己的目錄)

vi /home/hadoop/hadoop-1.2.1/conf/core-site.xml

加入:

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

繼續:

vi /home/hadoop/hadoop-1.2.1/conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

繼續:

vi /home/hadoop/hadoop-1.2.1/conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>

在master機器上修改:

vi /home/hadoop/hadoop-1.2.1/conf/masters

加入master

vi /home/hadoop/hadoop-1.2.1/conf/slaves

加入

slave1

slave2

5 啟動hadoop:

cd /home/hadoop/hadoop-1.2.1
bin/hadoop namenode  -format  --這里是格式化 一次即可
bin/start-all.sh

6 Hello World-經典的wordcount程序

cd ~
mkdir file
cd file
echo "Hello World" > file1.txt
echo "Hello Hadoop" > file2.txt
cd /home/hadoop/hadoop-1.2.1
bin/hadoop fs -mkdir input
bin/hadoop fs -ls
bin/hadoop fs -put ~/file/file*.txt input
bin/hadoop fs -ls input
bin/hadoop jar ./hadoop-examples-1.2.1.jar wordcount input output

查看輸出結果:

bin/hadoop fs -ls output 

查看最終結果:

可見,wordCount程序運行完成了。詳細執行步驟如下:

  1)將文件拆分成splits,由於測試用的文件較小,所以每個文件為一個split,並將文件按行分割形成<key,value>對,如圖4-1所示。這一步由MapReduce框架自動完成,其中偏移量(即key值)包括了回車所占的字符數(Windows和Linux環境會不同)。

 

 image

圖4-1 分割過程

 

  2)將分割好的<key,value>對交給用戶定義的map方法進行處理,生成新的<key,value>對,如圖4-2所示。

 

 image

圖4-2 執行map方法

 

  3)得到map方法輸出的<key,value>對后,Mapper會將它們按照key值進行排序,並執行Combine過程,將key至相同value值累加,得到Mapper的最終輸出結果。如圖4-3所示。

 

 image

圖4-3 Map端排序及Combine過程

 

  4)Reducer先對從Mapper接收的數據進行排序,再交由用戶自定義的reduce方法進行處理,得到新的<key,value>對,並作為WordCount的輸出結果,如圖4-4所示。

 

 image

圖4-4 Reduce端排序及輸出結果

這一塊:更詳細的介紹可以參考:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html

該文是對《Hadoop實戰》最佳闡述。

后記

 搭建Hadoop集群網上的文章有很多,遇到問題不斷的查找,最終總是可以解決問題的。感覺最繁碎的問題是權限,我后面一概就用root了。改起來煩。然,搭建完一個hadoop根本不算什么。搞懂hadoop適合的業務情形,搞懂Hadoop的設計思想,在寫自己程序時,可以靈活運用,達到它山之石可以攻玉的效果,那才是學習Hadoop的最終目的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM