Hadoop2.7.1 集群部署及自动化脚本
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.****.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
实验环境
操作系统: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是对应datanode密码。
# 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-****** -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的值,结果如下:
【完】
给我老师的人工智能教程打call!http://blog.****.net/jiangjunshow
实验环境
操作系统: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是对应datanode密码。
# 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-****** -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的值,结果如下:
【完】