一、概述
1.1 简介
本文主要介绍怎样用 shell 实现 hadoop 的自动化安装。关于手动安装 hadoop 的步骤,可以查看以下链接:
http://www.cnblogs.com/13bear/articles/3700842.html
1.2 环境
OS: CentOS release 6.4 (Final)
Hadoop:Apache hadoop V1.2.1
1.3 脚本下载
http://pan.baidu.com/s/1eQHyfZk
二、脚本综述
2.1 脚本目录列表
drwxr-xr-x. 2 root root 4096 Apr 25 17:43 conf // 所有配置文件所在目录
-rwxr-xr-x. 1 root root 7099 Apr 30 10:39 hadoopAll.sh // 在master、slave上安装hadoop,并进行相关配置
-rwxr-xr-x. 1 root root 1714 Apr 30 10:39 hadoopStatusCheck.sh // 检查hadoop目前运行状态
-rwxr-xr-x. 1 root root 1880 Apr 30 10:39 hostsAll.sh // 在master、slave上的hosts文件中添加ip、域名映射
-rwxr-xr-x. 1 root root 1608 Apr 30 10:39 installAll.sh // 整合所有单独的安装脚本,用于整个hadoop运行环境的部署
-rwxr-xr-x. 1 root root 2723 Apr 30 10:39 javaAll.sh // 在master、slave上配置java环境
-rwxr-xr-x. 1 root root 958 Apr 30 10:39 pingAll.sh // 检查master、slave主机的网络连通性
-rwxr-xr-x. 1 root root 622 Apr 30 10:39 ping.sh // 检查单独主机的网络连通性,需要给出ip地址
-rwxr-xr-x. 1 root root 2263 Apr 30 10:39 sshAll.sh // 配置master、slave主机间ssh无密码登录
drwxr-xr-x. 2 root root 4096 Apr 30 10:45 tools // java、hadoop的安装包所在目录
-rwxr-xr-x. 1 root root 1431 Apr 30 10:39 unhadoopAll.sh // 在master、slave上卸载hadoop
-rwxr-xr-x. 1 root root 1412 Apr 30 10:39 unhostsAll.sh // 在master、slave上的hosts文件中清楚hadoop相关ip、域名映射条目
-rwxr-xr-x. 1 root root 1438 Apr 30 10:39 uninstallAll.sh // 整合所有单独的卸载脚本,用于整个hadoop运行环境的清理
-rwxr-xr-x. 1 root root 1302 Apr 30 10:39 unjavaAll.sh // 在master、slave上卸载java环境
-rwxr-xr-x. 1 root root 1575 Apr 30 10:39 useraddAll.sh // 在master、slave上添加hadoop所用的账户
-rwxr-xr-x. 1 root root 1345 Apr 30 10:39 userdelAll.sh // 在master、slave上删除hadoop所用的账户
./conf:
total 40
-rw-r--r--. 1 root root 345 Apr 25 17:43 core-site.xml // hadoop的一个配置文件,更新后进行替换
-rw-r--r--. 1 root root 1310 Apr 23 17:32 env.config // 该自动化安装脚本中环境变量文件,是核心的配置文件
-rw-r--r--. 1 root root 124 Apr 25 17:43 hadoop.env // hadoop的环境变量,需要追加到/etc/profile文件中
-rw-r--r--. 1 root root 61 Apr 25 17:43 hadoop-env.sh // hadoop的一个配置文件,更新后进行替换
-rw-r--r--. 1 root root 92 Apr 25 17:43 hdfs-site.xml // hadoop的一个配置文件,更新后进行替换
-rw-r--r--. 1 root root 117 Apr 22 21:19 hosts // hadoop主机hosts文件,需要追加到/etc/hosts文件中
-rw-r--r--. 1 root root 177 Apr 25 17:37 java.env // java的环境变量,需要追加到/etc/profile文件中
-rw-r--r--. 1 root root 119 Apr 25 17:43 mapred-site.xml // hadoop的一个配置文件,更新后进行替换
-rw-r--r--. 1 root root 14 Apr 22 21:19 masters // hadoop的一个配置文件,用于指定master,更新后进行替换
-rw-r--r--. 1 root root 28 Apr 25 13:38 slaves // hadoop的一个配置文件,用于指定slaves,更新后进行替换
./tools:
total 197320
-rw-r--r--. 1 root root 63851630 Apr 10 21:46 hadoop-1.2.1.tar.gz // hadoop安装包
-rw-r--r--. 1 root root 138199690 Apr 10 21:46 jdk-7u51-linux-x64.tar.gz // java安装包
三、脚本的配置文件
3.1 程序主配置文件——env.config
3.1.1 介绍
该配置文件中包含了自动化安装脚本中用到的所有变量。在使用前需要先对该文件的部分变量进行修改。
3.1.2 文件内容
1 # Shell Script 2 export SHELL_LOC=`pwd` 3 export CONF_LOC=$SHELL_LOC/conf 4 export TOOLS_LOC=$SHELL_LOC/tools 5 6 # Hosts 7 export HOSTS=`cat $CONF_LOC/masters $CONF_LOC/slaves` 8 export MASTER=`cat $CONF_LOC/masters` 9 export SLAVES=`cat $CONF_LOC/slaves` 10 export IP_LISTS=`cat $CONF_LOC/masters $CONF_LOC/slaves` 11 export IP_COUNT=`cat $CONF_LOC/masters $CONF_LOC/slaves | wc -l` 12 13 # Users 14 export ROOT_USERPWD=Passw0rd 15 export ROOT_PROMPT=]# 16 export HADOOP_USERNAME=hadoop 17 export HADOOP_USERPWD=hadoop 18 export HADOOP_PROMPT=]$ 19 export HADOOP_USERHOME=/home/$HADOOP_USERNAME 20 21 # Expect Command 22 export EXPECTCHK=`rpm -qa expect | wc -l` 23 export EXPECT_TIMEOUT=4 24 export EXPECT_TIMEOUT_BIG=600 25 26 # Java 27 export JAVA_PKGNAME=jdk-7u51-linux-x64.tar.gz 28 export JAVA_FOLDERNAME=jdk1.7.0_51 # 与实际 java 压缩包解压后的文件夹名称相同 29 export JAVA_INSTLOC=/usr/java 30 export JAVA_HOME=$JAVA_INSTLOC/$JAVA_FOLDERNAME 31 32 # Hadoop 33 export HADOOP_PKGNAME=hadoop-1.2.1.tar.gz 34 export HADOOP_FOLDERNAME=hadoop-1.2.1 # 与实际 hadoop 压缩包解压后的文件夹名称相同 35 export HADOOP_INSTLOC=/usr # 如果修改此值,请一并修改 conf/hadoop.env 文件中内容 36 export HADOOP_HOME=$HADOOP_INSTLOC/$HADOOP_FOLDERNAME 37 export HADOOP_CONFLOC=$HADOOP_HOME/conf 38 export HADOOP_TMP_DIR=$HADOOP_HOME/tmp 39 export HADOOP_DFS_REPLICATION=1
3.1.3 文件说明
- Shell Script 部分:定义自动化脚本所在目录位置等信息,基本不用修改
- Hosts 部分:定义了将要安装hadoop的所有主机ip地址,基本不用修改
- Users 部分:定义了运行脚本主机root密码;定义hadoop账户信息;定义账户命令行提示信息
- Expect Command 部分:定义了expect命令所需要的的一些变量,比如:是否安装了expect,expect命令的超时时间
- Java 部分:定义了Java安装包信息、安装位置等信息
- Hadoop 部分:定义了Hadoop安装包信息、安装位置信息、配置信息等
3.2 Java和hadoop环境变量配置文件——java.env 和 hadoop.env
3.2.1 介绍
这两个配置文件主要用来把java、hadoop的环境变量添加到/etc/profile中。
3.2.2 文件内容
1 #set java environment 2 export JAVA_HOME=/usr/java/jdk1.7.0_51 3 export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 4 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
1 #set hadoop path 2 export HADOOP_HOME=/usr/hadoop-1.2.1 3 export PATH=$PATH:$HADOOP_HOME/bin 4 export HADOOP_HOME_WARN_SUPPRESS=1
3.3 hosts配置文件——hosts
3.3.1 介绍
用于修改测试环境所有主机里/etc/hosts文件。在使用前需要先对该文件内容进行修改。
3.3.2 文件内容
192.168.1.144 zcmaster.hadoop zcmaster
192.168.1.145 zcslave1.hadoop zcslave1
192.168.1.146 zcslave2.hadoop zcslave2
3.3.3 文件说明
- 各主机名所在行一定要包含hadoop关键字,因为后续脚本中以此关键字先对/etc/hosts做匹配删除操作,然后进行hadoop主机信息追加
- 该文件中的ip地址一定要和masters、slaves文件中的匹配
3.4 hadoop主机配置文件——masters 和 slaves
3.4.1 介绍
用于在配置hadoop的过程中,修改hadoop的masters、slaves文件。在使用前需要先对该文件内容进行修改。
3.4.2 文件内容
masters文件内容:
192.168.1.144
slaves文件内容:
192.168.1.145
192.168.1.146
3.4 hadoop运行环境配置文件——hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml
3.4.1 介绍
用于在配置hadoop的过程中,修改hadoop的hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml文件。安装脚本会根据env.config中的内容自动对这几个文件的内容自动进行更新,所以不需要手动进行修改。
3.4.2 文件内容
hadoop-env.sh文件内容:
#set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_51
core-site.xml文件内容:
1 <!-- temp folder properties --> 2 <property> 3 <name>hadoop.tmp.dir</name> 4 <value>/usr/hadoop-1.2.1/tmp</value> 5 <description>A base for other temporary directories.</description> 6 </property> 7 <!-- file system properties --> 8 <property> 9 <name>fs.default.name</name> 10 <value>hdfs://192.168.1.144:9000</value> 11 </property> 12 </configuration>
hdfs-site.xml文件内容:
1 <property> 2 <name>dfs.replication</name> 3 <value>1</value> 4 </property> 5 </configuration>
mapred.xml文件内容:
1 <property> 2 <name>mapred.job.tracker</name> 3 <value>http://192.168.1.144:9001</value> 4 </property> 5 </configuration>
四、安装脚本
4.1 主安装程序脚本——installAll.sh
4.1.1 介绍
整个环境的搭建分为若干部分,对各部分单独编写了对应的脚本,各脚本可以独立运行的(后续介绍),即:
- 测试各主机连通性的pingAll.sh
- 添加各主机hadoop用户的useraddAll.sh
- 配置各主机间无密码访问的sshAll.sh
- 配置各主机java环境的javaAll.sh
- 配置各主机hosts文件的hostsAll.sh
- 安装各主机hadoop的hadoopAll.sh
install.sh主要是组织这些单独的脚本进行整个hadoop环境的安装。
4.1.2 步骤概述
1)引入env.conf文件中的环境变量。
2)检查各主机网络是否连通,如果有一台不能ping通,则退出。
3)如果全部ping通,则进行整个环境的安装。
4)打印安装过程的开始时间、结束时间。
4.1.3 脚本内容
1 #!/bin/bash 2 3 # Purpose: Install hadoop env on clean hosts. 4 # Author: 13Bear 5 # Update: 2014-04-25 17:18 6 7 # Exit value: 8 # 0 Install succeed 9 # 1 Some hosts can't be reached 10 11 # Import env variable 12 source ./conf/env.config 13 14 # Start install 15 start_time=`date` 16 17 # Make sure all the hosts can be reach 18 ./pingAll.sh 19 if [ $? -eq 1 ]; then 20 echo "###############################################" 21 echo -e "