Hadoop2.7.1 叢集部署及自動化指令碼
實驗環境
作業系統:ubuntu 14.04 64位
主機名 | IP |
---|---|
namenode | 10.107.12.10 |
datanode1 | 10.107.12.20 |
datanode2 | 10.107.12.50 |
datanode3 | 10.107.12.60 |
jdk 安裝
實驗安裝的是jdk1.7.0_71版本,具體安裝步驟及環境變數設定參考這裡。
SSH 無密登入
下面是我寫的一個自動化SSH 無密登入指令碼,執行指令碼前需要安裝expect
包,ubuntu 系統下直接執行:sudo apt-get install expect
就可以了。該指令碼執行在namenode上,執行時只需要將IP_1改成對應的datanode地址,PWD_1
# NO_PWD_SSH#!/bin/sh IP_1=10.107.12.20,10.107.12.50,10.107.12.60PWD_1=111111key_generate() { expect -c "set timeout -1; spawn ssh-keygen -t dsa; expect { {Enter file in which to save the key*} {send -- \r;exp_continue} {Enter passphrase*} {send -- \r;exp_continue} {Enter same passphrase again:} {send -- \r;exp_continue} {Overwrite (y/n)*} {send -- n\r;exp_continue} eof {exit 0;} };" }auto_ssh_copy_id () { expect -c "set timeout -1; spawn ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]$1; expect { {Are you sure you want to continue connecting *} {send -- yes\r;exp_continue;} {*password:} {send -- $2\r;exp_continue;} eof {exit 0;} };" }rm -rf ~/.sshkey_generateips_1=$(echo $IP_1 | tr ',' ' ')for ip in $ips_1do auto_ssh_copy_id $ip $PWD_1doneeval &(ssh-agent)ssh-add
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
安裝Hadoop2.7.1
1. 下載Hadoop2.7.1
下載地址點這裡。
2. 解壓安裝
tar zxvf hadoop-2.7.1.tar.gz
解壓,解壓後放在了/root/spark_sdk/
目錄下,並在hadoop-2.7.1目錄下建立tmp、hdfs/namenode、hdfs/datanode目錄,命令如下:
mkdir ./hadoop-2.7.1/tmpmkdir ./hadoop-2.7.1/hdfsmkdir ./hadoop-2.7.1/hdfs/datanodemkdir ./hadoop-2.7.1/hdfs/namenode
- 1
- 2
- 3
- 4
3. 設定環境變數
在~/.bashrc
檔案中加入如下兩條命令:
export HADOOP_HOME=/root/spark_sdk/hadoop-2.7.1 PATH=$PATH:$HADOOP_HOME/bin
- 1
- 2
使環境變數生效:source ~/.bashrc
4. 設定主機名 && hosts檔案
主機名 將/etc/hostname
中主機名依次修改為namenode,datanode1,datanode2,datanode3。
hosts檔案 將/etc/hosts
檔案中加入如下命令:
10.107.12.10 namenode10.107.12.20 datanode110.107.12.50 datanode210.107.12.60 datanode3
- 1
- 2
- 3
- 4
注意主機名必須和hosts檔案中名稱保持一致!!
5. 修改Hadoop 配置檔案
hadoop-env.sh 檔案
export JAVA_HOME=/root/spark_sdk/jdk1.7.0_71
- 1
yarn-env.sh 檔案
export JAVA_HOME=/root/spark_sdk/jdk1.7.0_71
- 1
core-site.xml 檔案
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131702</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/root/spark_sdk/hadoop-2.7.1/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property></configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
這裡有一個地方需要注意,最後設定hadoop.proxyuser
時,後面跟的是使用者名稱,我是用root使用者登入的,所以填的是root。
hdfs-site.xml 檔案
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/root/spark_sdk/hadoop-2.7.1/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/root/spark_sdk/hadoop-2.7.1/hdfs/datanode</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>namenode:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property></configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
mapred-site.xml 檔案
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property></configuration>
- 1
- 2
- 3
- 4
- 5
- 6
yarn-site.xml 檔案
<configuration><!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>namenode:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>namenode:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>namenode:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>namenode:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>namenode:8088</value> </property></configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
slaves 檔案
datanode1 datanode2 datanode3
- 1
- 2
- 3
6. 啟動Hadoop
先格式化namenode,然後依次啟動hdfs和yarn。
bin/hadoop namenode -formatsbin/start-dfs.shsbin/start-yarn.sh
- 1
- 2
- 3
- 4
- 5
7. 叢集啟動驗證
namenode上執行jps
命令,可以查詢到有如下程序:
15746 SecondaryNameNode15508 NameNode15969 ResourceManager16377 Jps
- 1
- 2
- 3
- 4
datanode上執行jps
命令,可以查詢到有如下程序:
14731 Jps14421 NodeManager14182 DataNode
- 1
- 2
- 3
8. 查詢叢集資訊 && 關閉叢集
可以在瀏覽器中輸入:10.107.12.10:50070
查詢HDFS相關資訊,這裡10.107.12.10是namenode的IP地址。瀏覽器輸入:10.107.12.10:8088
檢視yarn的啟動情況。
關閉叢集可以執行sbin/stop-all.sh
。
9. 執行應用程式
啟動集群后,切換到hadoop 主目錄,執行 ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar pi 20 10
,執行成功後會輸出Pi的值,結果如下:
【完】