expect命令通过预测远程终端将要显示的提示字符串,自动输入密码或其他用户指定的字符串,实现自动化安装。有关expect命令的使用方法请见:
有关实现Hadoop集群一键安装的步骤,首先写好需要分发到集群每台机器上运行的脚本,然后保证你的管理结点已安装tcl、expect、JDK、Hadoop安装包、hosts文件、profile文件、authorized_keys。
将集群的机器列表写到一个文件中,其中要包括IP地址、域名、root用户密码、Hadoop管理账户名、Hadoop管理账户密码。
将需要运行的shell脚本scp到需要安装Hadoop的机器上,过程中需要使用expect。之后再使用ssh执行远程机器上的shell脚本。所有的expect语句都写在一个exp文件中,通过给每个命令set一个type来区分执行的是哪个命令。
安装配置Hadoop集群的步骤这里就不细讲,主要说一下如何使用expect命令实现自动化安装。例如在集群的每台机器上新建一个用户,你可以这么做:
在管理结点上有脚本run.sh
#!/bin/bash
host_ip=192.168.71.202
pwd_root=iflytek
pwd_jcsong=iflytek
echo "Start create user jcosng..."
expect ./login.exp $host_ip root $pwd_root jcsong $pwd_jcsong
脚本login.exp
#!/usr/bin/expect -f
set timeout 300
set ip_addr [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set newuser [lindex $argv 3]
set newpwd [lindex $argv 4]
spawn ssh "$user@$ip_addr" bash "/home/adduser.sh $newuser"
expect "Enter new UNIX password:"
send "$newpwd\r"
sleep 1
expect "Retype new UNIX password:"
send "$newpwd\r"
sleep 1
for {set i 0} {$i<5} {incr i} {
expect ":"
send "\r"
sleep 1
}
puts "\r"
send "\r"
expect "n]"
send "Y\r"
为了演示的方便,这里的所有参数大部分都是直接写到脚本里的,其实这些参数应该从一个集群列表中读取。在安装之前首先要scp安装脚本到集群的每台机器中去,其他步骤也大致如此。
相关阅读:
Ubuntu 13.04上搭建Hadoop环境