小試Hadoop1.1.1隨筆

最近雲計算搞得火熱,於是對落地方案之一的Hadoop,進行了初次接觸,並記錄。

測試環境:

VMware9、Linux(deepin12.06_64版本,選用這個linux是因爲有窗口環境可以編輯文件,訪問windows共享文件,比較方便)

【安裝系統】

1、安裝Linux系統後創建hadoop用戶及組,並建立/home/hadoop目錄,保證目錄可讀寫,後面安裝及測試等操作均用hadoop用戶。

2、修改各臺主機的配置/etc/hosts,加入需要測試的主機對應名稱及IP

192.168.0.10 master

192.168.0.11 slave 

主機信息:

機器名

IP地址

作用

master(Node1)

192.168.0.10

NameNode、JobTracker

slave1(Node2)

192.168.0.11

DataNode、TaskTracker

slave2(Node3)

...

DataNode、TaskTracker

先測試一主一從的環境,ok後再擴展,可以體會到分佈式運算的好處和優勢。


【下載軟件】

1、下載並安裝jdk1.6的64位版本,過程略

//配置JDK環境變量 

# vi /etc/profile

export JAVA_HOME=/opt/jdk1.6.0_39

export PATH=$JAVA_HOME/bin:$PATH:.

//使配置生效

# source /etc/profile

2、下載Hadoop1.1.1(開始下載的是.rpm,但用rpm安裝時,屢屢報錯,貌似rpm對安裝環境要求苛刻),於是下了.tar.gz的文件,並解壓至/usr/hadoop,確保hadoop用戶對該目錄可讀寫,即該目錄owner是hadoop用戶。

【安裝軟件】

1、安裝ssh並實現無密碼登錄slave端,需要使用ssh-keygen -rsa,一路回車,將id_rsa.pub改名爲authorized_keys放入slave機的.ssh目錄(/home/hadoop目錄下新建),詳細過程略。

2、修改hadoop相關配置文件

vi hadoop-env.sh

 export JAVA_HOME=/opt/jdk1.6.0_39


配置文件都位於/usr/hadoop/conf下:
core-site.xml如下:
<configuration>
  <property>
  <name>fs.default.name</name>
 <value>hdfs://master:9000</value>
 </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/tmp</value>
 </property>
</configuration>

hdfs-site.xml如下:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name1,/home/hadoop/name2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data1,/home/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value> 
</property>
</configuration>

mapred-site.xml如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>

1)   dfs.name.dir是NameNode持久存儲名字空間及事務日誌的本地文件系統路徑。 當這個值是一個逗號分割的目錄列表時,nametable數據將會被複制到所有目錄中做冗餘備份。

2)   dfs.data.dir是DataNode存放塊數據的本地文件系統路徑,逗號分割的列表。 當這個值是逗號分割的目錄列表時,數據將被存儲在所有目錄下,通常分佈在不同設備上。

3)dfs.replication是數據需要備份的數量,默認是3,如果此數大於集羣的機器數會出錯。

注意:此處的name1、name2、data1、data2目錄不能預先創建,hadoop格式化時會自動創建,如果預先創建反而會有問題。


配置conf/masters和conf/slaves來設置主從結點,注意最好使用主機名,並且保證機器之間通過主機名可以互相訪問,每個主機名一行。

vi masters:
輸入:

master

vi slaves:

輸入:
slave


配置完主機master環境後,可以拷貝至從機slave中了,使用

scp -r /usr/hadoop hadoop@slave:/usr/hadoop

建議主從機的環境一致


配置完成後,就可以格式化namenode了,如下命令:

hadoop namenode -format

如果沒有報錯的話,基本上沒有什麼問題了,啓動Hadoop:

start-all.sh
全部停止用
stop-all.sh

然後到logs目錄下看有沒有報錯信息,包括slave機裏面的logs

【測試】
1)瀏覽NameNode和JobTracker的網絡接口,它們的地址默認爲:

NameNode - http://master:50070/
JobTracker - http://master:50030/

3)   使用netstat  –nat查看端口49000和49001是否正在使用。

4)將輸入文件拷貝到分佈式文件系統:
hadoop fs -mkdir input

等待一會兒後沒有報錯,想必是成功了,到各個目錄下都沒找到input目錄,連後面創建的output目錄也沒有,比較奇怪。

(現在知道hdfs不是文件系統,所以看不到了)

將core-site.xml作爲測試的輸入文件:
hadoop fs -put conf/core-site.xml input

5)然後啓動hadoop

hadoop jar ../hadoop-examples-1.1.1.jar wordcount input output

如果後面不加wordcount input output 可以查看例子jar包中提供的各種example

如果報錯output目錄存在,執行刪除命令:

hadoop fs -rmr output

6)例子運行完畢後,查看結果如下命令:

hadoop fs -cat output/*


【添加節點】

可擴展性是HDFS的一個重要特性,首先在新加的節點上安裝hadoop,然後修改$HADOOP_HOME/conf /master文件,加入 NameNode主機名,然後在NameNode節點上修改$HADOOP_HOME/conf/slaves文件,加入新加節點主機名,再建立到新加節點無密碼的SSH連接

運行啓動命令:

start-all.sh

然後可以通過http://(Masternode的主機名):50070查看新添加的DataNode


【負載均衡】

start-balancer.sh,可以使DataNode節點上選擇策略重新平衡DataNode上的數據塊的分佈


【後記】

看到某牛人的Hadoop 2.0.0-alpha嚐鮮安裝和hello world》

後,我抑鬱了,好不容易搞懂了Hadoop1.1.1裏面的job和task等機制,現在2.0版本又給搞沒了,還“使用YARN替代了原來的map/reduce,YARN號稱是第二代map/reduce,速度比一代更快,且支持集羣服務器數量更大。”雖然號稱支持更多的節點進行集羣,以及namenode可以做HA,

但已是後話了,容我慢慢學了。

發佈了36 篇原創文章 · 獲贊 24 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章