Hadoop 不僅僅提供了cluster之間互相溝通的平台
也提供了一台server自己內部互相平行化的平台
不過當然如果只有一台server
那平行化其實只是假的
但可以提供練習就是了!!

Hadoop 提供兩種模式給Local端
1. Standalone Operation
2. Pseudo-Distributed Mode

Standalone Operation顧名思義就是自己一台server
並沒有任何的平行化
也就是說..其實只是弄好玩的XD
硬是要透過hadoop去做一些事情
但是又沒有去做平行化

Hadoop官方網站提供了一個範例給Standalone Operation


$> mkdir input
$> cp conf/*.xml input
$> bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$> cat output/*


這指令的目的在於把hadoop-*-examples.jar這個檔案解開執行
並且把input裡的*.xml裡任何符合最後那個'dfs[a-z.]+'這個reg.exp.的文字抓下來
至於examples.jar是幹麼的我也不知道orz
不過至少可以執行hadoop了!

另一個模式則是
Pseudo-Distributed Mode 假的分散式 XD
也就是說Hadoop會在一台server上開啟不同的port
假裝這些不同的port就是不同的cluster
然後在利用ssh去跟這些port做檔案傳輸、溝通
但整個作業其實都是在同一台電腦上完成

在實驗Pseudo-Distrubute之前
當然要先設定要開啟的port以及主機的名稱
在conf/hadoop-site.xml裡面增加以下


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



首先要注意的是fs.default.name
因為hadoop是一種MapReduce
所以當然有所謂的Server端和Cluster端
而這邊設定的就是Server端的開口
所以我們設定Localhost:9000
代表server端就是localhost,port是9000
接著是mapred.job.tracker
這是主要控制map-reduce的server
在hadoop裡其實可以設定兩台主要server是分開的兩個node
一台是開始執行的server
一台是控制Map-Reduce的server
不過目前我們還在Pseudo...
所以當然還是在Localhost底下
只是port改成9001囉!

接著測試ssh
如果ssh localhost是ok的那就沒問題
如果發現無法ssh localhost
檢查一下sshd有沒有正常運作
或是執行下面的指令


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



最後就可以開始執行囉!
首先我們要建立一個hadoop用的File System


$ bin/hadoop namenode -format


接著把hadoop相關的daemon都呼叫起來


$ bin/start-all.sh


如此一來hadoop應該就開始運作了

由於hadoop會建立一個HDFS (hadoop file system)
所以我們要把所有要運算的資料丟上去HDFS
( 當然,運算完的結果也會在HDFS上面)
這裡我們使用跟Standalone Operation一樣的範例
首先我們要把conf整個資料夾丟上去


$ bin/hadoop fs -put conf input


fs代表我現在要使用file system
-put代表我要把下一個參數代表的路徑丟上去
input代表我要丟到fs底下的資料夾
所以這個指令會把local端的conf資料夾丟到HDFS底下的input資料夾

除了-put以外
fs還有很多常用的指令
像是 fs -ls 是fs底下的list
fs -cat 是觀看fs底下的檔案
fs -get 是把fs的檔案(src)複製到local端(dist)
...諸如此類
詳細的用法可以執行


bin/hadoop fs


接著我們要一樣把example拿去做運算

$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'

然後就會看到Map 0%、Reduce0%
Map代表的是Hadoop正把工作分給每一個cluster去做運算
Reduce代表的是cluster正在把工作回傳給Hadoop Server
等到兩個都100%後就運算完成囉!

所以接著我們要去看一下output裡面是不是跟Standalone Operation時相同
這邊有兩個方法
一個是把整個output資料夾傳回local端
一個是直接在HDFS上面看

若想要傳回local端,用剛剛講過的-get 就可以了!

$ bin/hadoop fs -get output output
$ cat output/*


若想要在HDFS上面看,就直接用-cat就可以了!

$ bin/hadoop fs -cat output/*



終於結束了Pseudo-Distribute的操作了
接著記得把hadoop關閉 以免吃掉linux的資源XD

$ bin/stop-all.sh

創作者介紹

[todo Austin] 奧斯丁。土豆

austintodo 發表在 痞客邦 PIXNET 留言(0) 人氣()