共计 1684 个字符,预计需要花费 5 分钟才能阅读完成。
expect 命令通过预测远程终端将要显示的提示字符串,自动输入密码或其他用户指定的字符串,实现自动化安装。有关 expect 命令的使用方法请见:
shell 脚本学习之 expect 命令 http://www.linuxidc.com/Linux/2014-02/96262.htm
有关实现 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 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13