1. 程式人生 > >Hadoop入門實驗

Hadoop入門實驗

所在 ash 文件復制 技術 分布式 release ide 模擬 原理

一、實驗目的

了解HadoopMapeReduce工作原理

二、實驗內容

實現基於單機的偽分布式運行模擬

三、實驗需要準備的軟件和源

1Jdk1.6以上 下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2Cygwin 下載地址:http://www.cygwin.com/

3、穩定版hadoop 下載地址:http://hadoop.apache.org/common/releases.html#Download

四、實驗步驟

1、了解Hadoop工作機制

aHadoop整體框架運行機制介紹

請參見http://hi.baidu.com/wongxuelei/blog/item/c1642050cfb56d481138c2fd.html

bHadoopMapReduce部分執行流程

請參見http://www.blogjava.net/shenh062326/archive/2011/01/14/342959.html

cHadoop在線中文技術文檔

請參見http://hadoop.apache.org/common/docs/r0.18.2/cn/

個人意見:

ab說的非常詳細,剛入門可以大體了解HadoopHDFSMapeReduce工作框架,等做完實驗後再回過頭來看這個會更清楚;c上有實例的說明和代碼。

2、安裝JDK到本地機器

安裝目錄最好不要有空格(如果有在配置HadoopJAVA_HOME時有點麻煩,下面會具體介紹)

3、安裝Cygwin

請參見《Hadoop開發者入門》第11頁 ——>Windows上安裝Hadoop教程

個人意見:

a、註意選擇上面說的需在Cygwin中安裝的包;

b、上面說到的http://www.cygwin.cn好像鏈接不上了,目前內陸最快的是源有

http://mirrors.163.com/cygwin/ http://mirrors.sohu.com/cygwin/ 會到30 k/s左右,其他的速度一般只有35 k/s

c、如果沒裝成功,最好運行regedit.exe進入註冊表,刪除Cygwin文件,目錄所在位置如圖1

d、環境變量配置僅需把平時我們陪JDK的方法配好,Cygwin僅需把bin所在目錄加入,usr下的不用配;

e、安裝好sshd後,該服務可以在裝好的Cygwin中輸入net start sshd命令啟動。

1 Cygwin所在註冊表位置

技術分享

4、安裝Hadoop

a、下載Hadoop的穩定版本,我選擇的是hadoop-0.18.3.tar.gz(最新版本不太好用),然後解壓到任意盤下;

b、配置Hadoop用於在單機環境上運行的配置文件在最後,來源http://hi.baidu.com/shirdrn/blog/item/33c762fecf9811375c600892.html

註意事項:

a、在配置完JAVA_HOME後,如果路徑有空格,運行$ bin/hadoop namenode -format命令也可能會出錯,最好的辦法是將Windows下的JDK映射到Cygwin中,命令如下:

LN -s /cygdrive/c/Program\ Files/Java/<jre name> /usr/local/<jre name>

其中

/cygdrive/c/Program\ Files/Java/<jre name>表示在Windows中的JDK路徑,

/usr/local/<jre name>表示你想映射到的Cygwin路徑。

然後在把JAVA_HOME配置成 export JAVA_HOME="/usr/local/<jre name>"

b、運行“ $ bin/hadoop dfs -put ./input input”命令時可能會出現讓你把hadoop-site.xml中的“localhost:9000”改成“ hdfs:\\localhost:9000”的問題。未解決,據網上了解說是因為單機運行的問題。

來源http://hi.baidu.com/shirdrn/blog/item/33c762fecf9811375c600892.html

首先進行Hadoop配置:

1conf/hadoop-env.sh文件中最基本需要指定JAVA_HOME,例如我的如下:

export JAVA_HOME="D:\Program Files\Java\jdk1.6.0_07"



如果路徑中存在空格,需要使用雙引號。

2、只需要修改conf/hadoop-site.xml文件即可,默認情況下,hadoop-site.xml並沒有被配置,如果是基於單機運行,就會按照hadoop-default.xml中的基本配置選項執行任務。

hadoop-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>localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>



實現過程

1、認證配置

啟動cygwin,同時使用下面的命令啟動ssh

$ net start sshd



如圖所示:

技術分享

接著,需要對身份加密認證這一部分進行配置,這也是非常關鍵的,因為基於分布式的多個Datanode結點需要向Namenode提供任務執行報告信息,如果每次訪問Namenode結點都需要密碼驗證的話就麻煩了,當然我要說的就是基於無密碼認證的方式的配置,可以參考我的其他文章。

生成RSA公鑰的命令如下:

$ ssh-keygen



生成過程如圖所示:

技術分享

上面執行到如下步驟時需要進行設置:

Enter file in which to save the key (/home/SHIYANJUN/.ssh/id_rsa):



直接按回車鍵即可,按照默認的選項將生成的RSA公鑰保存在/home/SHIYANJUN/.ssh/id_rsa文件中,以便結點之間進行通訊認證。

繼續執行,又會提示進行輸入選擇密碼短語passphrase,在如下這裏:

Enter passphrase (empty for no passphrase):



直接按回車鍵,而且一定要這麽做,因為空密碼短語就會在後面執行過程中免去結點之間通訊進行的認證,直接通過RSA公鑰(事實上,我們使用的是DSA認證,當然RSA也可以進行認證,繼續看後面)認證。

RSA公鑰主要是對結點之間的通訊信息加密的。如果RSA公鑰生成過程如上圖,說明正確生成了RSA公鑰。

接著生成DSA公鑰,使用如下命令:

$ ssh-keygen -t dsa



生成過程與前面的RSA類似,如圖所示:

技術分享

然後,需要將DSA公鑰加入到公鑰授權文件authorized_keys中,使用如下命令:

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys



如圖所示,沒有任何信息輸出:

技術分享

到此,就可以進行Hadoop的運行工作了。

2Hadoop處理的數據文件準備

我使用的是hadoop-0.16.4版本,直接拷貝到G:\根目錄下面,同時,我的cygwin直接安裝在G:\Cygwin裏面。

在目錄G:\hadoop-0.16.4中創建一個input目錄,裏面準備幾個TXT文件,我準備了7個,文件中內容就是使用空格分隔的多個英文單詞,因為是運行WordCount這個例子,後面可以看到我存入了多少內容。

3、運行過程

下面,切換到G:\hadoop-0.16.4目錄下面

$ cd http://www.cnblogs.com/cygdrive/g/hadoop-0.16.4



其中通過cygdrive(位於Cygwin根目錄中)可以直接映射到Windows下的各個邏輯磁盤分區中。

在執行任務中,使用HDFS,即Hadoop的分布式文件系統,因此這時要做的就是格式化這個文件系統,使用下面命令可以完成:

$ bin/hadoop namenode -format



格式化過程如圖所示:

技術分享

此時,應該啟動NamenodeDatanodeSecondaryNamenodeJobTracer,使用這個命令啟動:

$ bin/start-all.sh



啟動過程如圖所示:

技術分享

如果你沒有配置前面ssh的無密碼認證,或者配置了但是輸入了密碼短語,那麽到這裏就會每啟動一個進程就提示輸入密碼,試想,如果有N多進程的話,那豈不是要命了。

然後,需要把上面我們在本地的input目錄中準備的文件復制到HDFS中的input目錄中,以便在分布式文件系統管理這些待處理的數據文件,使用下面命令:

$ bin/hadoop dfs -put ./input input



執行上述命令如果沒有信息輸出就復制成功。

現在,才可以執行Hadoop自帶的WordCount列子了,使用下面命令開始提交任務,進入運行:

$ bin/hadoop jar hadoop-0.16.4-examples.jar wordcount input output



最後面兩個參數分別為數據輸入目錄和數據處理完成後的輸出目錄,這裏,不能在你的G:\hadoop-0.16.4目錄中存在output這個目錄,否則會報錯的。

運行過程如圖所示:

技術分享

通過上圖,可以看出在運行一個Job的過程中,WordCount工具執行任務的進度情況,非常詳細。

最後查看執行任務後,處理數據的結果,使用的命令行如下所示:

$ bin/hadoop dfs -cat output/part-00000



輸出結果如圖所示:

技術分享

最後,停止Hadoop進程,使用如下命令:

$ bin/stop-all.sh



如圖所示:

技術分享

以上就是全部的過程了。

5、hadoop自帶example的代碼和分析

請參見Hadoop MapReduce教程

http://www.cnblogs.com/panderen/archive/2011/05/17/2048651.html

Hadoop入門實驗