在這裏,咱們將從0開始一步一步搭建Hadoop徹底分佈式環境並在eclipse上運行hadoop的"helloword"程序:worldcount
這一篇先說說徹底分佈式的環境搭建. 2.4以上3.0如下的版本參照搭建步驟通用。javascript轉載請註明出處!本文地址:http://www.cnblogs.com/XianChenBlog/p/5648636.htmlcss
if(!富二代){
準備本身的虛擬機軟件,並根據本身的喜愛選擇一個Linux發行版安裝虛擬機。一個版本的Eclipse和Eclipse的hadoop插件
}else{
買三臺(或更多)電腦。
}html虛擬機軟件的選擇和Linux發行版的選擇無所謂,仁者見仁智者見智,關鍵是要選擇本身最熟悉的軟件和系統html5
我選擇的是:
虛擬機 : Parallels Desktop,
Linux : Ubuntu14.04
java可能更多人更加熟悉VMWare,使用Mac的同窗們不用擔憂,VMWare也提供了相應Mac版可供下載,不過推薦你們試一下ParallelsDesktop, OS下發熱明顯比VMWare小,虛擬機更佳流暢,體驗很不錯.正版購買雖然有點高,不過有某寶存在,這些都不是問題.
node虛擬機網絡模式:
虛擬機三種網絡模式:NAT,HOST-ONLY,橋接
這裏我選擇橋接模式.處於橋接模式的虛擬機,分配靜態的IP,在子網中至關於一臺獨立的主機,對於搭建hadoop來將更能模擬真實性吧.下 面是個人ipv4設置git
hostname IPV4地址 子網掩碼 網關 宿主機 192.168.43.79 255.255.255.0 192.168.43.1 主節點 master 192.168.43.89 255.255.255.0 192.168.43.1 從節點1 slave1 192.168.43.90 255.255.255.0 192.168.43.1 從節點2 slave2 192.168.43.91 255.255.255.0 192.168.43.1
關於如何修改IPV4的ip地址,不一樣版本的Linux,命令行各有不一樣,盆友們根據本身的版本本身搜索一下.不清楚這三種虛擬機的網絡模式的盆友們請點擊這裏.看小炒花生米的博客 github
這裏說一下全部須要咱們進行的操做以及操做的順序
咱們須要進行的下載有:
1 , vim
2 , ssh
3 , jdk
4 , Eclipse
5 , hadoop-2.6.0.tar.gz(或其餘版本)
6 , hadoop-eclipse-plugin-2.6.0.jar(版本與hadoop相同便可)
web過一段時間我會將個人上述資源上傳到百度雲後我會在這裏給出網盤連接.
咱們須要進行的配置有:
1 , 每臺虛擬機:配置主機名以及Hosts文件
2 , 每臺虛擬機:安裝vim和ssh工具
3 , 每臺虛擬機:配置java環境變量
4 , 每臺虛擬機:配置hadoop
5 , 配置ssh實現節點之間的免密碼登錄
我會發現,每臺虛擬機有好多重複的操做,例如都須要配置Hosts文件以及主機名,都須要安裝vim和ssh都須要下載jdk並配置環境變量 都須要配置hadoop可是ssh的配置每臺機器卻不太同樣.因而咱們採用這樣的方法減小工程量:算法先在一臺機器上配置好全部相同的操做,而後克隆虛擬機(克隆的虛擬機與原虛擬機的內容和設置會一摸同樣),最後配置每臺機器不同的操做.可是這樣作也有問題.由於若是沒有vim 那麼就很難完成環境變量的配置(這個時候Ubuntu預裝的gedit就顯得有些方便了).因此咱們最早裝vim.沒有進行java環境變量的配置 就沒法配置hadoop,因此配置java在hadoop以前,沒有進行過ssh安裝和節點之間的免密碼登錄,hadoop就沒法與另外兩個節點溝通,因此ssh安裝和配置在hadoop以前 ,又由於ssh的安裝在三臺虛擬機上是同樣的,而ssh的免密碼的配置在每臺機器上是不同的,因此咱們先安裝ssh,在克隆虛擬機以後配置ssh免密碼登錄最後配置hadoop
因此我認爲的比較科學的安裝和配置順序是:
1 , 安裝vim
2 , 安裝ssh
3 , 配置java環境變量
4 , 配置主機名以及Hosts文件
5 , 克隆虛擬機
6 , 修改主機名
7 , 配置ssh免密碼登錄
8 , 配置hadoop
若是對本身比較有把握的話,使用下面的順序也能夠:1 , 安裝vim
2 , 安裝ssh
3 , 配置java環境變量
4 , 配置主機名以及Hosts文件
5 , 修改主機名
6 , 配置ssh免密碼登錄
7 ,配置hadoop
8 , 克隆虛擬機下面正式進入配置
1 sudo apt-get install vim 2 sudo apt-get install ssh若是沒法安裝,檢查一下軟件包的安裝源,
Ubuntu下:
若是這個選項是被選中的,那麼取消選擇這個選項.Ubuntu默認是選中的.
1,從oracle或國內網盤下載jdk安裝包到虛擬機
2,用cd命令進入jdk的當前目錄,利用下面的命令解壓縮:
tar -zxvf jdk......(你的jdk壓縮包名稱)
或
tar -xzf jdk......(你的jdk壓縮包名稱)
其中v參數是指定是否在終端回顯顯示解壓的詳細過程更多的參數及其做用參見: http://www.2cto.com/os/201207/143935.html 3,利用以下命令將解壓後的文件夾剪切到 /usr/local 目錄下
sudo mv jdk...(你的jdk壓縮包名稱) /usr/local
關於爲何是移到/usr/local 目錄下,你須要瞭解Linux系統的文件系統的目錄結構及其做用,參見 http://blog.sina.com.cn/s/blog_662234020101ebfd.html 固然,依據本身的理解也能夠放在其餘路徑,例如/opt下也是能夠的.
4,配置環境變量
配置環境變量一共有三種方式,我選擇"最狠"的一種.修改profile文件
sudo vim /etc/profile
在文件末尾加入下面語句(注意將JAVA_HOME後面的路徑改成剛纔盆友們本身存放jdk解壓後的文件夾的位置)
JAVA_HOME=/usr/local/jdk CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME export CLASSPATH export PATH
最後執行配置文件使配置當即生效
source /ect/profile
其餘兩種配置環境變量的方式參見:http://www.cnblogs.com/yjhrem/articles/2227680.html
1 , 編輯hosts文件
1 sudo vim /etc/hosts
文件中將127.0.1.1這一項註釋掉(#)並寫入:
192.168.43.89 master
192.168.43.90 slave1
192.168.43.91 slave2
這裏是我在開始的時候本身配置的三臺虛擬機的IP地址,你們根據本身的IP地址,更改成本身的ip地址寫入Host
命令
1 sudo vim /etc/hostname
文件中寫入本機名:master
通常主節點名習慣命名爲master,從節點習慣命名爲Slave+節點的編號,例如slave1 slave2 ... ...
而後就能夠開心的克隆虛擬機啦!
原理:
登陸的機子可有私鑰,被登陸的機子要有登陸機子的公鑰。這個公鑰/私鑰對通常在私鑰宿主機產生。 上面是用rsa算法的公鑰/私鑰對,固然也能夠用dsa(對應的文件是id_dsa,id_dsa.pub)
步驟:
1 [主/從],主節點和從節點下均在命令行執行 1 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
參數rsa指定加密算法,也能夠用dsa參數,若是用dsa,就把下面全部寫rsa的地方改爲dsa.
參數-p是指定密碼 -p ''表示空密碼
參數-f是指定路徑,能夠不用指定,由於默認的路徑便是~/.ssh/id_dsa
若是不加-p和-f參數,那麼須要在執行命令的過程當中須要根據提示多按兩次回車,來確認是否默認空密碼和默認路徑
2 [主],主節點進入.ssh文件夾 1 cd ~/.ssh
cd ~/.ssh 將生成的公鑰id_rsa.pub 內容追加到authorized_keys
1 cat id_rsa.pub >> authorized_keys
3 [從],從節點:
在slave1中執行命令: 1 scp id_rsa.pub master:~/.ssh/id_rsa.pub.s1
在slvae2中執行命令: 1 scp id_rsa.pub master:~/.ssh/id_rsa.pub.s2
4 [主],主節點: 1 cat id_rsa.pub.s1 >> authorized_keys; 2 cat id_rsa.pub.s2 >> authorized_keys;
5 [主],主節點: 1 scp authorized_keys slave1:~/.ssh/; 2 scp authorized_keys slave2:~/.ssh/;
驗證:
驗證ssh免密碼登陸:
輸入命令ssh slave1 根據提示輸入「yes」 第一次登錄仍然須要輸入密碼
輸入命令exit註銷(Logout)
再次輸入命令ssh salve1 便可直接登陸
本身曾經走了不少彎路T_T.終於走到了這一步了-_-.如今第二次配置很順利走到這感受熟練不少^_^
策略:
咱們須要在主節點和從節點上作同樣的配置.咱們能夠在主節點上配置好了以後,再將整個hadoop文件夾遠程發送給從節點.
步驟:
1,與jdk同樣,首先要進入jdk的所在目錄,tar命令解壓,並移動到/usr/local
2,在/usr/local/hadoop目錄下新建以下目錄
1 mkdir /dfs 2 mkdir /dfs/name 3 mkdir /dfs/data 4 mkdir /tmp若是權限不足的話記得在mkdir前面加sodu 空格
注意:講道理的話,只要是Linux的系統,把Hadoop放在/usr/local下面確實是沒問題的。可是博主我在Ubuntu的環境下卻遇到了個問題,想不太明白。使用centOS RedHat Debian的同窗,大家就仍然按照這個步驟來應該是沒有問題的。使用Ubuntu的同窗若是你發現你遇到了問題,請看這裏:
--若是在步驟(7)使用scp -r命令傳輸Hadoop文件夾的時候,提示權限不足,咱們在scp命令前加上sudo。因而終端提示輸入root@master的密碼,那麼輸入你的Linux密碼。隨後終端會提示你輸入遠程機器的密碼,輸入密碼,若是經過,那麼繼續看下面的步驟3,若是你們發現輸入了正確的Linux密碼,確老是提示從新輸入,那麼請在遠程須要接收文件夾的虛擬機修改Unix密碼:在終端輸入passwd,回車輸入新的密碼,確認輸入新的密碼。而後切換回Master,從新scp,而後輸入root@master密碼,在輸入root@slave的密碼。若是發現更改了密碼以後,輸入正確的slave密碼,依然不斷的提示從新輸入。那麼恭喜你遇到了和我同樣的問題。若是哪位大俠能找到合理的解釋,請賜教啊。不過雖然不能解釋,可是咱們能夠避開這個問題,在hadoop解壓以後,不要移動到/usr/local這樣具備如此高權限的文件件,放在你當前用戶文件夾下的根目錄或任意子目錄都是沒問題的。而後在(7)使用scp命令遠程複製的時候,採用相同的路徑,當前用戶文件夾下的根目錄或任意子目錄。問題就應該解決了。3,下面進入/usr/local/hadoop/etc/hadoop中, 1 cd /usr/local/hadoop/etc/hadoop
使用ls,你會發現全部的配置文件都在這啦
(1)用vim(或gedit , 再也不贅述)修改hadoop-env.sh yarn-env.sh
1 vim hadoop-env.sh
在配置文件裏面找到JAVA_HOME值,並修改成剛剛在環境變量中配置的值.
yarn-env.sh作一樣操做
(2)修改配置文件slaves:
1 vim slaves
將內容修改成:
slave1
slave2
(3)修改配置文件:core-site.xml1 <configuration> 2 <property> 3 <name>fs.defaultFS</name> 4 <value>hdfs://master:8020</value> 5 </property> 6 <property> 7 <name>io.file.buffer.size</name> 8 <value>131072</value> 9 </property> 10 <property> 11 <name>hadoop.tmp.dir</name> 12 <value>file:/usr/hadoop/tmp</value> 13 <description>Abase for other temporary directories.</description> 14 </property> 15 <property> 16 <name>hadoop.proxyuser.dust(這裏應該將dust替換爲你本身的用戶名).hosts</name> 17 <value>*</value> 18 </property> 19 <property> 20 <name>hadoop.proxyuser.dust(這裏應該將dust替換爲你本身的用戶名).groups</name> 21 <value>*</value> 22 </property> 23</configuration>
(4)修改配置文件:hdfs-site.xml1 <configuration> 2 <property> 3 <name>dfs.namenode.secondary.http-address</name> 4 <value>master:9001</value> 5 </property> 6 <property> 7 <name>dfs.namenode.name.dir</name> 8 <value>file:/usr/hadoop/dfs/name</value> 9 </property> 10 <property> 11 <name>dfs.datanode.data.dir</name> 12 <value>file:/usr/hadoop/dfs/data</value> 13 </property> 14 <property> 15 <name>dfs.replication</name> 16 <value>3</value> 17 </property> 18 <property> 19 <name>dfs.webhdfs.enabled</name> 20 <value>true</value> 21 </property> 22 </configuration>
(5)修改配置文件:mapred-site.xml
你會發現你是找不到mapred-site.xml的,可是會找打一個mapred-site.xml.template 因而咱們要複製該文件,並命名爲mapred.xml,該文件用於指定MapReduce使用的框架。
執行 1 cp mapred-site.xml.template mapred-site.xml 而後編輯mapred-site.xml1 <configuration> 2 <property> 3 <name>mapreduce.framework.name</name> 4 <value>yarn</value> 5 </property> 6 <property> 7 <name>mapreduce.jobhistory.address</name> 8 <value>master:10020</value> 9 </property> 10 <property> 11 <name>mapreduce.jobhistory.webapp.address</name> 12 <value>master:19888</value> 13 </property> 14 </configuration>(6)修改配置文件:yarn-site.xml
1 <configuration> 2 <property> 3 <name>yarn.nodemanager.aux-services</name> 4 <value>mapreduce_shuffle</value> 5 </property> 6 <property> 7 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 8 <value>org.apache.hadoop.mapred.ShuffleHandler</value> 9 </property> 10 <property> 11 <name>yarn.resourcemanager.address</name> 12 <value>master:8032</value> 13 </property> 14 <property> 15 <name>yarn.resourcemanager.scheduler.address</name> 16 <value>master:8030</value> 17 </property> 18 <property> 19 <name>yarn.resourcemanager.resource-tracker.address</name> 20 <value>master:8031</value> 21 </property> 22 <property> 23 <name>yarn.resourcemanager.admin.address</name> 24 <value>master:8033</value> 25 </property> 26 <property> 27 <name>yarn.resourcemanager.webapp.address</name> 28 <value>master:8088</value> 29 </property> 30 </configuration>(7)將hadoop傳輸到slave1和slave2根目錄
1 scp -r /usr/local/hadoop slave1:/usr/local/; 2 scp -r /usr/local/hadoop slave2:/usr/local/;
如權限不足記得加sudo
(8)修改環境變量
1 sudo vim /etc/profile
將剛纔咱們配置java時的環境變量改成:
1 JAVA_HOME=/usr/local/jdk 2 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 3 HADOOP_HOME=/usr/local/hadoop 4 PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH 5 export JAVA_HOME 6 export CLASSPATH 7 export HADOOP_HOME 8 export PATH注意順序,必定要先定義和export JAVA_HOME和CLASSPATH 後定義和export HADOOP
立刻要啓動集羣啦,想一想還有點激動呢
1,格式化數據節點:
hadoop namenode -format
注意這裏只需格式化一次,若是從新格式化會由於namenodeid/datanodeid不一致的問題而產生異常。若有需求(例如在slave機器上使用jps查看進程時,發現datanode沒有正常啓動)須要從新格式化,那麼請刪除master和每一個slave中,hadoop下tmp目錄,以及/dfs/name和/dfs/data的子目錄中的全部內容,而後再從新執行格式化命令。
2,點火發射:
start-all.sh
3,查看啓動進程 命令行敲入jps,回車, 看到
說明一切測控正常! 你也能夠在瀏覽器輸入http://你的主節點IP地址:8088/cluster來檢測節點狀態
注意:若是看不到TaskTracker,童鞋們也不要驚慌。hadoop2.6下輸入jps時看不到TaskTracker的。因爲Hadoop2.x採用和hadoop1不一樣的架構,輸入jps,在master看到如上圖四個進程,slave中看到三個進程,即證實配置正確。
到此,hadoop徹底分佈式環境搭建完畢!01:56:31 趕忙睡覺!!!
-->