Ubuntu 12.04 搭建 hadoop 集群版環境
今天終于在亞運和二哥的教導下終于把hadoop集群的環境搭建好了,搭建的流程和單機版基本差不多,但是搭建過程中也遇到了許多的困難,例如:ssh授權這塊,搭建過程中,出現的問題很多,導致我耽誤了好長的時間!現在我把我的搭建過程梳理一下,如果有什么問題,請多多指教!
一. 搭建環境前的準備:
我的本機Ubuntu 12.04 32bit作為maser,就是上篇hadoop單機版環境搭建時用的那臺機子,
還在KVM中虛擬了4臺機子,分別起名為:
son-1 (ubuntu 12.04 32bit),
son-2 (ubuntu 12.04 32bit),
son-3 (centOS 6.2 32bit),
son-4 (redhat 6.0 32bit).
kvm的搭建詳見:http://www.db89.org/post/2012-05-25/kvmxuniji
kvm的橋接設置詳見:http://www.db89.org/post/2012-05-27/kvmnetset
Ubuntu12.04搭建hadoop單機版環境詳見:http://www.db89.org/post/2012-06-03/hadoopdanjihuanjing
下來修改本機的host文件,
sudo gedit /etc/hosts |
在后面添加內容為:
192.168.200.150 master 192.168.200.151 son-1 192.168.200.152 son-2 192.168.200.153 son-3 192.168.200.154 son-4 |
現在開始我們的打建之旅吧。
二 . 為本機(master)和子節點(son..)分別創建hadoop用戶和用戶組,其實ubuntu和centos下創建用戶還多少還是有點區別的。
ubuntu下創建:
先創建hadoop用戶組:
sudo addgroup hadoop |
然后創建hadoop用戶:
sudo adduser -ingroup hadoop hadoop |
centos 和 redhat 下創建:
sudo adduser hadoop |
注:在centos 和 redhat下直接創建用戶就行,會自動生成相關的用戶組和相關文件,而ubuntu下直接創建用戶,創建的用戶沒有家目錄。
給hadoop用戶添加權限,打開/etc/sudoers文件;
sudo gedit /etc/sudoers |
按回車鍵后就會打開/etc/sudoers文件了,給hadoop用戶賦予root用戶同樣的權限。
在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL,
hadoop ALL=(ALL:ALL) ALL |
三. 為本機(master)和子節點(son..)安裝JDK環境。
ubuntu下一條命令即可:
sudo apt-get install openjdk-6-jre |
centos和redhat建議下載源碼安裝。
詳見:http://www.db89.org/post/2012-07-02/centosjava
四. 修改 本機(master)和子節點(son..)機器名
打開/etc/hostname文件;
sudo gedit /etc/hostname |
分別修改為:master son-1 son-2 son-3 son-4。這樣有利于管理和記憶!
五. 本機(master)和子節點(son..)安裝ssh服務
主要為ubuntu安裝,cents和redhat系統自帶。
ubuntu下:
sudo apt-get install ssh openssh-server |
這時假設您已經安裝好了ssh,您就可以進行第六步了哦~
六. 先為建立ssh無密碼登錄環境
做這一步之前首先建議所有的機子全部轉換為hadoop用戶,以防出現權限問題的干擾。
切換的命令為:
su - hadoop |
ssh生成密鑰有rsa和dsa兩種生成方式,默認情況下采用rsa方式。
1. 創建ssh-key,,這里我們采用rsa方式;
ssh-keygen -t rsa -P "" |
(注:回車后會在~/.ssh/下生成兩個文件:id_rsa和id_rsa.pub這兩個文件是成對出現的)
2. 進入~/.ssh/目錄下,將id_rsa.pub追加到authorized_keys授權文件中,開始是沒有authorized_keys文件的;
cd ~/.ssh cat id_rsa.pub >> authorized_keys |
七. 為本機mater安裝hadoop
我們采用的hadoop版本是:hadoop-0.20.203(http://www.apache.org/dyn/closer.cgi/hadoop/common/ ),因為該版本比較穩定。
1. 假設hadoop-0.20.203.tar.gz在桌面,將它復制到安裝目錄 /usr/local/下;
sudo cp hadoop-0.20.203.0rc1.tar.gz /usr/local/ |
2. 解壓hadoop-0.20.203.tar.gz;
cd /usr/local sudo tar -zxf hadoop-0.20.203.0rc1.tar.gz |
3. 將解壓出的文件夾改名為hadoop;
sudo mv hadoop-0.20.203.0 hadoop |
4. 將該hadoop文件夾的屬主用戶設為hadoop,
sudo chown -R hadoop:hadoop hadoop |
5. 打開hadoop/conf/hadoop-env.sh文件;
sudo gedit hadoop/conf/hadoop-env.sh |
6. 配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本機jdk的路徑);
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk |
7. 打開conf/core-site.xml文件;
sudo gedit hadoop/conf/core-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>hdfs://master:9000</value>
- </property>
- </configuration>
8. 打開conf/mapred-site.xml文件;
sudo gedit hadoop/conf/mapred-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>mapred.job.tracker</name>
- <value>master:9001</value>
- </property>
- </configuration>
9. 打開conf/hdfs-site.xml文件;
sudo gedit hadoop/conf/hdfs-site.xml |
編輯如下:
- <configuration>
- <property>
- <name>dfs.name.dir</name>
- <value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>
- </property>
- <property>
- <name>dfs.data.dir</name>
- <value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- </configuration>
10. 打開conf/masters文件,添加作為secondarynamenode的主機名,這里需填寫 master 就Ok了。
sudo gedit hadoop/conf/masters |
11. 打開conf/slaves文件,添加作為slave的主機名,一行一個。
sudo gedit hadoop/conf/slaves |
這里填成下列的內容 :
- son-1
- son-2
- son-3
- son-4
八. 要將master機器上的文件一一復制到datanode機器上(son-1,son-2,son-3,son-4都要復制):(這里以son-1為例子)
1. 公鑰的復制
scp ~/.ssh/id_rsa.pub hadoop@son-1:~/.ssh/ |
2. hosts文件的復制
scp /etc/hosts hadoop@son-1:/etc/hosts |
注:這里如果不能復制,就先將文件復制到/home/hadoop下面,即為:
/home/hadoophadoop@son-1: scp /etc/hosts |
再在datanode機器上將其移到相同的路徑下面/etc/hosts .
3. hadoop文件夾的復制,其中的配置也就一起復制過來了!
scp -r /usr/local/hadoop hadoop@son-1:/usr/local |
如果不能移動的話和上面的方法一樣!
并且要將所有節點的hadoop的目錄的權限進行如下的修改:
sudo chown -R hadoop:hadoop hadoop |
這些東西都復制完了之后,datanode機器還要將復制過來的公鑰追加到收信任列表:
在每個子節點的自己種都要操作。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
還有很重要的一點,子節點datanode機器要把復制過來的hadoop里面的data1,data2和logs刪除掉!
還有要修改centos節點(son-3)和redhat節點(son-4)的java的環境變量地址,
配置centos節點(son-3)和redhat節點(son-4)的/usr/local/hadoop/conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本機jdk的路徑);這個環境不一,自己配置一下。
這樣環境已經基本搭建好了,現在開始測試一下。
九. 這樣之后基本上就差不多了,首先進入master的hadoop目錄。
cd /usr/local/hadoop |
首先可以做一下負載平衡,我擔心這個加上會有點亂,但是沒有這部分不影響運行,想了解的給我留言!
啟動datanode和tasktracker:
- bin/start-dfs.sh
- bin/hadoop-daemon.sh start datanode
- bin/hadoop-daemon.sh start tasktracker
啟動全部服務直接一條命令:
bin/start-all.sh |
查看自己的datanode是否啟動.
jps |
當jps不能正常使用的時候:
resource /etc/profile |
連接時可以在namenode上查看連接情況:
bin/hadoop dfsadmin -report |
詳見下圖:
也可以直接進入網址:
master:50070 |
詳見下圖:
圖1:
圖2:
因為readhat的java環境還有點問題所以沒有啟動起來,其它的正常。
切記,上面的大多數操作請使用hadoop用戶,要不然中間會出許多關于權限的問題。
到此整個環境的搭建工作就完成了,如果有什么問題,請給我留言,咱們可以互相交流!同時謝謝在我搭建環境中幫助過我的人!