最近在學Hadoop,學習Hadoop第一步當然是搭建環境。因爲剛開始接觸Hadoop,加之對Linux命令行不熟悉。完全搭建好這個環境用了兩天的時間。雖然搭建好這個環境只是第一步,但是我感覺還是收穫很多,比如對Linux的操作,其中最讓我頭疼的是Linux權限問題。搭建過程中操作一般都是對的,因爲開始用的是root用戶,所以切換到普通用戶老是報拒絕操作。所以我頻換的切換用戶進行權限更改,下次再搭建環境的時候一定要用普通用戶操作,這樣就少了很多不必要的麻煩。除非是Linux系統配置文件中只有root才能操作的文件。樓主的實驗環境是用虛擬機虛擬出的三臺主機,其中一臺做爲主節點(namenode)IP:192.168.30.50,兩臺做爲從節點(datanode)IP:192.168.30.51/192.168.30.52
一、設置靜態IP&修改主機名(對三臺電腦都需要進行操作)
0.將三臺電腦安裝Linux系統
1.設置靜態ip(便於機器之間的通信,防止路由器電腦重啓後,ip變化,導致不能通信)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #描述網卡對應的設備別名,例如ifcfg-eth0的文件中它爲eth0
BOOTPROTO=static #這個修改更改爲靜態的
BROADCAST=192.168.0.255 #對應的子網廣播地址
HWADDR=00:07:E9:05:E8:B4 #對應的網卡物理地址
#在文件最後面添加一下代碼
IPADDR=192.168.80.100
NETMASK=255.255.255.0
NETWORK=192.168.0.1
裏面的IPADDR地址設置你想要的,我這裏是192.168.80.100。
設置好後,需要讓IP地址生效,運行下面命令:
service network restart Shutting down interface
然後運行ifconfig就可以看到靜態ip是否生效。
2.修改主機名(每臺電腦都要修改,建議使用hadoop100,hadoop101,hadoop102,對應於ip地址最後面三位數)
vi /etc/sysconfig/network
hostname=hadoop100
重啓一下網絡service network restart
驗證reboot -h now 立刻重啓 然後hostname
3.建立hadoop運行帳號
最好不要使用root操作hadoop,root是超級管理員權限,不推薦各個機器之間使用root訪問,
驗證:service iptables status
Firewall is not running
關閉防火牆開機自動啓動功能:
(1). 先查看 查看: chkconfig --list |grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
(2). 關閉 chkconfig iptables off
驗證:chkconfig --list |grep iptables
說明如果不關閉防火牆以後上傳文件時會報異常
二、配置hosts文件(只需要對主機192.168.80.100(hadoop100)進行操作,然後通過scp命令將這些配置分發給其他電腦即可)
操作192.168.80.100機器
192.168.80.100 hadoop100
192.168.80.101 hadoop101
192.168.80.102 hadoop102
三、爲hadoop賬戶配置ssh免密碼連入
操作hadoop100,hadoop101,hadoop102機器
① ssh-keygen -t rsa會在~/.ssh/文件夾下生成id_rsa id_rsa.pub兩個文件
[root@hadoop100 local]# cd /usr/local
[root@hadoop100 local]# ./jdk-6u30-linux-x64.bin解壓jdk後,生成jdk1.6.0_30文件夾
export PATH=.:$JAVA_HOME/bin:$PATH
chgrp -R hadoop /usr/local/hadoop/
修改爲
export JAVA_HOME=/usr/local/jdk1.6.0_30
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop100:9000</value>#namenode的IP地址與端口
<description>change your own hostname</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
<property>
<name>dfs.replication</name>
<value>2</value>#表示數據備份份數
</property>
</configuration>
<property>
<name>mapred.job.tracker</name>#jobtracker的IP地址及端口
<value>hadoop100:9001</value>
<description>change your own hostname</description>
</property>
</configuration>
scp -r /etc/hosts root@hadoop102:/etc/
scp -r /usr/local/jdk1.6.0_30 root@hadoop102:/usr/local/
scp -r /etc/profile root@hadoop102:/etc/
分別驗證: java -version
ping hadoop101
ping hadoop100
scp -r /usr/local/hadoop/ root@hadoop102:/usr/local/hadoop/
執行命令 hadoop namenode -format
32387 Jps
32283 JobTracker
32198 SecondaryNameNode
32021 NameNode
hadoop101和hadoop102上有
30770 TaskTracker
30866 Jps
30666 DataNode
說明運行成功,。,這時你可以運行個wordcount這個小例子體驗一下、。
運行hadoop的時候兩個錯誤
ERROR namenode.NameNode: java.io.IOException: Cannot create directory/home/hadoop/tmp
ERROR namenode.NameNode: java.io.IOException: Cannot remove current directory:/home/hadoop/tmp/hdfsconf/name/current
原因是 沒有設置
/home/hadoop/tmp的權限沒有設置, 將之改爲:
chown –R hadoop100:hadoop100 /home/hadoop/tmp
sudo chmod -R a+w /home/hadoop/tmp
參考博客:http://www.cnblogs.com/arbitrary/p/3902780.html
http://blog.csdn.net/xumin07061133/article/details/8682424