Hadoop入门(二)集群安装
一、集群安裝條件前置
在虛擬機上先準備一個機子 ?按用前面【安裝單機hadoop】 已完成安裝jdk,hadoop和ssh、網絡等配置環境等。
虛擬機和操作系統
環境:ubuntu14 + hadoop2.6+jdk1.7+ssh
虛擬機:(vmware10)
?
二、集群安裝環境設置
Hadoop的安裝為分布式模式,考慮到實際條件集群機定為3臺(2臺也可以)。
(1)克隆3個ubuntu實例
先關閉當前虛擬機實例,在虛擬機工具欄上點擊【虛擬機】|【管理】|【克隆】,打開克隆虛擬機向導窗口點擊【下一步】|【下一步】,其中克隆類型選擇【創建完整克隆】,點擊【下一步】,填寫【虛擬機名稱】|【位置】,【完成】克隆。
?
(2)設置3臺機子的hostname
先正確設置各虛擬機的hostname 執行命令
sudo ? gedit ? /etc/hostname將文件中的名稱改成想要的機器名,如 hadoop01, hadoop02, hadoop03。
?
(3)設置3臺機子的hosts文件
修改3臺虛擬機hosts文件都是一樣 執行命令
sudo ?gedit ?/etc/hosts在hosts文件添加如下內容
192.168.150.128 ?hadoop01 192.168.150.129 ?hadoop02 192.168.150.130 ?hadoop03這樣,就不用記IP了。也可以只修改一臺,其他使用scp命令拷貝hosts文件。
?
(4)設置虛擬機的靜態ip
修改3臺主機設置靜態ip,在hadoop0x上也要參考設置修改成具體的ip
sudo ?gedit ? /etc/network/interfaces打開文件修改成已下內容(hadoop01)
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.150.128 netmask 255.255.255.0 network 192.168.150.0 boardcast 192.168.150.255 gateway 192.168.150.2打開文件修改成已下內容(hadoop02)
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.150.129 netmask 255.255.255.0 network 192.168.150.0 boardcast 192.168.150.255 gateway 192.168.150.2打開文件修改成已下內容(hadoop03)
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.150.130 netmask 255.255.255.0 network 192.168.150.0 boardcast 192.168.150.255 gateway 192.168.150.2?
(5)配置NAT網絡
1)虛擬機網絡設置
在虛擬機工具欄上點擊【編輯機】|【虛擬機網絡編輯】,如果沒有NAT模式的網絡就點擊【添加網絡】,然后Wnet信息修改為【NAT模式】,設置子網為【192.168.150.0】,點擊【NAT設置】按鈕如圖【NAT設置圖】,點擊【DCHP設置】按鈕如圖【DCHP設置圖】,點擊【應用】按鈕和【確認】按鈕。
NAT設置圖:
DCHP設置圖:
2)設置虛擬計算機NAT
選擇【我的計算機】的一個虛擬機,鼠標右鍵選擇【設置】,選擇【網絡適配器】,在右側【網絡連接】點擊【自定義】然后選擇【NAT模式】的網絡,點擊【確定】按鈕保存
?
(6)重啟檢驗網絡
重啟一次系統生效?
每個虛擬機執行命令
ping hadoop01 ping hadoop02 ping hadoop03正常的話,應該能ping通 。如果不能ping通,重新設置NAT網絡。
?
(7)配置DNS服務器(虛擬機能上網忽略這個步驟)
如果不能上網,需要修改/etc/resolv.conf文件,配置DNS服務器
執行命令
sudo ?gedit ? /etc/resolv.conf修改文件添加如下配置
nameserver ?8.8.8.8 ?8.8.4.4 ? nameserver ?124.172.174.13?
(8)配置ssh免密碼登錄
配置ssh免密碼登錄是讓各節點能自動通過安全認證,不影響正常通訊。
1)安裝SSH(已安裝的忽略)
安裝ssh有兩種方式:
A.在ubuntu上在線安裝
執行命令
sudo ?apt-get ?install ?ssh sudo ?apt-get ?updateB.離線安裝
在網上下載離線包,拷貝到ubuntu中按照離線包中的安裝說明在本地進行安裝
2)配置ssh的實現
配置ssh的實現思路:
在每臺機子上都使用ssh-keygen生成public key,private key 所有機子的public key都拷到一臺機子如hadoop01上
在hadoop01上生成一個授權key文件authorized_keys 最后把authorized_keys拷給所有集群中的機子,就能保證無密碼登錄
1、在所有虛擬機上,在當前用戶目錄下生成公鑰、私鑰對
執行命令
cd ?/home/mk ? ? ? ssh-keygen ?-t ?rsa ?-P ''2、導入公鑰
執行hadoop01命令
cat ?.ssh/id_rsa.pub ?> ?.ssh/authorized_keys執行完以后,可以在本機上測試下,用ssh連接自己
執行命令
ssh hadoop01 #成功登陸則退出 exit如果提示要輸入密碼, 查看authorized_keys文件權限, 如果是屬于其他用戶的, 需要修改該文件給其他用戶權限
執行命令
chmod ?644 ?.ssh/authorized_keys修改文件權限,然后再測試下
ssh hadoop01如果不需要輸入密碼,就連接成功,表示ok,一臺機器已經搞定了。
?
tip:出現問題嘗試解決
請先檢查SSH服務是否啟動,如果沒啟動,請啟動!
如果沒有.ssh目錄則創建一個:
執行命令
cd??/home/mk mkdir?? .ssh如無權限,使用命令修改要操作文件夾的owner為當前用戶:
執行命令
sudo ?chown ?-R ?mk? /home/mk3、在其它機器上生成公鑰、密鑰,并將公鑰文件復制到hadoop01
執行命令:
#在hadoop0x上: scp ?.ssh/id_rsa.pub ? mk@hadoop01:/home/mk/id_rsa_1.pub#在slave2上: scp ?.ssh/id_rsa.pub ?mk@hadoop01:/home/mk/id_rsa_2.pubhadoop01中,查看下/home/mk目錄,應該有二個新文件id_rsa_1.pub、id_rsa_2.pub 在hadoop01上,導入這二個公鑰
執行命令
?
這樣,hadoop01這臺機器上,就有所有3臺機器的公鑰了。
4、將hadoop01上的“最全”公鑰,復制到其它機器
在hadoop01上 執行命令
scp .ssh/authorized_keys ?mk@hadoop02:/home/mk/.ssh/authorized_keys scp .ssh/authorized_keys ?mk@hadoop02:/home/mk/.ssh/authorized_keys修改其它機器上authorized_keys文件的權限 hadoop02以及hadoop03機器上,均執行命令
chmod ?600 ?.ssh/authorized_keys5、驗證
在每個虛擬機上,均用命令 ?ssh+其它機器的hostname 都能正常無密碼連接成功 執行命令
ssh ?hadoop01 ssh ?hadoop02 ssh ?hadoop036、SSH免密碼設置失敗解決
A.權限問題
.ssh目錄,以及/home/當前用戶 需要700權限,參考以下操作調整
.ssh目錄下的authorized_keys文件需要600或644權限,參考以下操作調整
sudo chmod ? 644 ? ~/.ssh/authorized_keysB.StrictModes問題
sudo gedit /etc/ssh/sshd_config #找到 #StrictModes yes #改成 StrictModes no如果還不行,可以用ssh -vvv 目標機器ip 查看詳情
?
三、配置hadoop集群
一共有7個文件要修改:
hadoop-2.6.0/etc/hadoop/hadoop-env.sh
hadoop-2.6.0/etc/hadoop/yarn-env.sh
hadoop-2.6.0/etc/hadoop/core-site.xml
hadoop-2.6.0/etc/hadoop/hdfs-site.xml
hadoop-2.6.0/etc/hadoop/mapred-site.xml
hadoop-2.6.0/etc/hadoop/yarn-site.xml
hadoop-2.6.0/etc/hadoop/slaves
執行命令
(1) hadoop-env.sh 、yarn-env.sh
這二個文件主要是修改JAVA_HOME改成實際本機jdk所在目錄位置
執行命令
gedit ?etc/hadoop/hadoop-env.sh
gedit ?etc/hadoop/yarn-env.sh
打開文件找到下面這行的位置,改成(jdk目錄位置,大家根據實際情況修改)
export JAVA_HOME=/home/mk/soft/jdk1.7.0_80在 hadoop-env.sh中加上這句:
export HADOOP_PREFIX=/home/mk/soft/hadoop-2.6.0(2)core-site.xml
?參考下面的內容修改:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop01:9000</value> ? ? ??</property><property><name>hadoop.tmp.dir</name><value>/home/mk/tmp</value></property>? </configuration>?
注:/home/mk/tmp 目錄如不存在,則先mkdir手動創建
core-site.xml的完整參數請參考?
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/core-default.xml
(3)hdfs-site.xml
參考下面的內容修改:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>dfs.datanode.ipc.address</name><value>0.0.0.0:50020</value></property><property><name>dfs.datanode.http.address</name><value>0.0.0.0:50075</value></property> ?<property><name>dfs.namenode.name.dir</name><value>file:/home/mk/data/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:/home/mk/data/datanode</value></property><property><name>dfs.namenode.secondary.http-address</name><value>hadoop02:9001</value></property> ? ?<property><name>dfs.replication</name><value>1</value></property><property>?<name>dfs.permissions</name>?<value>false</value>?</property></configuration>hdfs-site.xml的完整參數請參考
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
(4)mapred-site.xml
參考下面的內容修改:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hadoop01:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop01:19888</value></property> </configuration>mapred-site.xml的完整參數請參考 http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
(5)yarn-site.xml
<?xml version="1.0"?> <configuration>?<property>?<name>yarn.nodemanager.aux-services</name>?<value>mapreduce_shuffle</value>?</property>?<property>?<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>?<value>org.apache.hadoop.mapred.ShuffleHandler</value>?</property>?<property><name>yarn.resourcemanager.scheduler.address</name>?<value>hadoop01:8030</value>?</property>?<property>?<name>yarn.resourcemanager.resource-tracker.address</name>?<value>hadoop01:8025</value>?</property><property>?<name>yarn.resourcemanager.address</name><value>hadoop01:8040</value></property>? </configuration>yarn-site.xml的完整參數請參考
http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
(6)slaves
執行命令
gedit slaves編輯該文件,輸入
hadoop02 hadoop03這樣只有hadoop02,hadoop03上有datanode進程。
hadoop 1.x與2.x相比, 1.x中的很多參數已經被標識為過時,具體可參考 http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/DeprecatedProperties.html
(7)修改/etc/profile設置環境變量
執行命令
sudo gedit /etc/profile打開/etc/profile,添加hadoop配置內容。注意CLASSPATH,PATH是在原來的配置項上添加hadoop的包路徑
export HADOOP_HOME=/home/mk/soft/hadoop-2.6.0 export ?CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH使profile文件修改配置生效
source /etc/profile(8)分發到集群的其它機器
把hadoop-2.6.0文件夾連同修改后的配置文件,通過scp拷貝到其它2臺機器上。
執行命令
scp -r /home/mk/soft/hadoop-2.6.0/? mk@hadoop02:/home/mk/soft/hadoop-2.6.0 scp -r /home/mk/soft/hadoop-2.6.0/? mk@hadoop03:/home/mk/soft/hadoop-2.6.0hadoop02、hadoop03上的hadoop臨時目錄(tmp)及數據目錄(data),仍然要先手動創建。
(9)測試hadoop配置
在hadoop01上啟用 NameNode測試
執行命令
先格式化
15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-85825581-192.168.187.102-1423747793784
15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.
等看到執行信息有has been successfully formatted表示格式化ok
?
四、啟動hadoop集群
(1)啟動HDFS
執行命令
HADOOP_HOME/sbin/start-dfs.sh啟動完成后,輸入jps查看進程
執行命令
jps
2283? NameNode
如果看到上面NameNode進程,表示hadoop01節點成功
(2)啟動yarn
執行命令
start-yarn.shjps
4363? ResourceManager
2283? NameNode
如果看到上面2個進程,表示 yarn啟動完成。
(3)停止
執行命令
stop-dfs.sh stop-yarn.sh保存退出停掉剛才啟動的服務
?
五、測試Hadoop服務
(1)hadoop01節點上,重新啟動
執行命令
hadoop01節點上有幾下2個進程:
3421 ResourceManager
3412 NameNode
hadoop02上有幾下3個進程:
3214 SecondaryNameNode
3243 DataNode
3249 NodeManager
hadoop03上有幾下2個進程:
2324 DataNode
2342 NodeManager
(2)web界面檢查hadoop
hdfs管理界面 ? ?http://hadoop01:50070/
yarn的管理界面不再是原來的50030端口而是8088 ?http://hadoop01:8088/?
?
(3)查看hadoop狀態
hdfs dfsadmin -report 查看hdfs的狀態報告
yarn ?node -list ? 查看yarn的基本信息
?
六、其他問題
1.若namenode上的core-site.xml中的fs.defaultFS缺失,則啟動時會報錯。
2.若各機器上的yarn-site.xml中的yarn.resourcemanager.resource-tracker.address缺失,
? ? 雖然resourcemanager與nodemanager進程能夠正常啟動,但是在執行yarn node -list會出現node數量為0的情況。
?
2.若各機器上的yarn-site.xml中的yarn.resourcemanager.scheduler.address或yarn.resourcemanager.address缺失,則在運行job時,
? ? 會卡在INFO mapreduce.Job: Job job_1422695884569_0001 running in uber mode : false
?
七、使用hadoop集群運行例子
同樣的例子比單機模式時間長
(1)運行自帶mapreduce例子grep
執行命令
?查看結果
cat output/*1 dfsadmin ?
得到和單機一樣的結果,'dfs'只出現一次
(2)運行自帶mapreduce例子wordcount
words.txt?
hello liuchengwu
hello liulao
hello dora
hello liu
hello hadoop
文件拷入/words.txt下
?
執行命令
??參考文檔:Hadoop MapReduce Next Generation - Cluster Setup
?
?
總結
以上是生活随笔為你收集整理的Hadoop入门(二)集群安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop入门(一)概念与单机安装
- 下一篇: nba2k20球员速度怎么变慢了?