设为首页 收藏本站
查看: 753|回复: 0

[经验分享] hadoop、hbase自动安装的脚本与步骤

[复制链接]

尚未签到

发表于 2016-12-10 07:15:44 | 显示全部楼层 |阅读模式
要在多台服务器上搭建hadoop、hbase各种配置很繁琐,自动地安装既省时又省力。
    参考了这篇博客:http://www.cnblogs.com/tlm1992/p/tlm_hadoop_auto.html,并对其进行了一些修改。

     前提:安装了ssh
     处理流程:
     1.修改配置文件
     (1)修改hadoop的配置文件,修改hadoop/hadoop-1.2.1/conf/下的
hdfs-site.xml,mapred-site.xml,core-site.xml 这三个文件,不需要修改hadoop/hadoop-1.2.1/conf/里的slaves和masters文件,脚本会根据hosts的设置自动修改。
     (2)修改hbase的配置文件,修改hadoop/hbase-0.94.16/conf下的hbase-site.xml,不需要修改hadoop/hbase-0.94.16/conf/regionservers文件,脚本会根据hosts的设置自动修改。
     2.修改hadoop/setup文件夹里的hosts文件来设置所有节点的名字和ip
     3.编辑setHadoopOnce.sh的loginName变量(设置登录账号),pw变量(设置节点的密码)。账号、密码各节点必须都是同一个。此外还要修改slaveNum变量。
     4.利用终端cd到setup这个文件夹,执行setHadoopOnce.sh脚本。

     
     全部代码:
    1.setHadoopOnce.sh,该文件是文件脚本执行的起点

#!/bin/bash
#修改密码
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:.
export PATH
pw=123456
loginName=hadoop
master=master
slave=slave
slaveNum=1
set timeout 100000
> ../hadoop-1.2.1/conf/masters
> ../hadoop-1.2.1/conf/slaves
#update local file
while read line
do
echo $line
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
echo $name
if [[ $name == maste* ]]; then
echo "$name" >> ../hadoop-1.2.1/conf/masters
elif [[ $name == slave* ]]; then
echo "$name" >> ../hadoop-1.2.1/conf/slaves
echo "$name" >> ../hbase-0.94.16/conf/regionservers
fi
fi
done < hosts
#upload file to all nodes
while read line
do
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
expect copyDataToAll.exp $ip $loginName $pw
expect setForAll.exp $ip $loginName $pw
fi
done < hosts
while read line
do
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
if [[ $name == maste* ]]; then
expect setForMaster.exp $ip $loginName $pw
fi
fi
done < hosts
while read line
do
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
expect setForSSH.exp $ip $loginName $pw
fi
done < hosts

2.copyDataToAll.exp在setHadoopOnce.sh中的36行被调用,以复制文件到所有节点。

#!/usr/bin/expect
proc usage {} {
puts stderr "usage: $::argv0 ip usrname password"
exit 1
}
if {$argc != 3} { usage }
set hostip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set timeout 100000
spawn scp -r ../../hadoop ${username}@${hostip}:~
expect {
"*assword:" {
send "$password\n"
expect eof
}
expect eof
}

3.setForAll.exp为所有节点进行进一步的配置工作,在setHadoopOnce.sh中的37行被调用。

#!/usr/bin/expect
proc usage {} {
puts stderr "usage: $::argv0 ip usrname password"
exit 1
}
proc connect {pwd} {
expect {
"*(yes/no)?" {
send "yes\n"
expect "*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
}
"*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
"*Last login:*" {
return 0
}
}
return 1
}
if {$argc != 3} { usage }
set hostip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set timeout 100000
spawn ssh ${username}@${hostip}
if {[connect $password]} {
exit 1
}
#set host
send "sudo bash ~/hadoop/setup/addHosts.sh\r"
expect "*assword*"
send "$password\r"
expect "*ddhostsucces*"
sleep 1
send "ssh-agent bash ~/hadoop/setup/sshGen.sh\n"
expect {
"*(yes/no)?" {
send "yes\n"
exp_continue
}
"*verwrite (y/n)?" {
send "n\n"
exp_continue
}
"*nter file in which to save the key*" {
send "\n"
exp_continue
}
"*nter passphrase*" {
send "\n"
exp_continue
}
"*nter same passphrase again*" {
send "\n"
exp_continue
}
"*our public key has been saved*" {
exp_continue
}
"*etsshGenSucces*" {
sleep 1
}
}
send "bash ~/hadoop/setup/setEnvironment.sh\n"
expect "*etEnvironmentSucces*"
sleep 1
send "exit\n"
expect eof


3.1 addHosts.sh在setForAll.exp中被调用,用于设置节点的hosts文件。

#!/bin/bash
hadoopRoot=~/hadoop
cat $hadoopRoot/setup/hosts >> /etc/hosts
echo "addhostsuccess"

3.2 sshGen.sh在setForAll.sh中被调用,用于生成sshkey.

#!/bin/bash
sshPath=~/.ssh
setupPath=~/hadoop/setup
rm "$sshPath"/authorized_keys
sleep 1
ssh-keygen -t rsa
cat "$sshPath"/id_rsa.pub >> "$sshPath"/authorized_keys
ssh-add
echo "setsshGenSuccess"

3.3 setEnviroment.sh 在setForAll.sh中被调用,用于设置环境变量

#!/bin/bash
hadoopRoot=~/hadoop
hadoopPath=$hadoopRoot/hadoop-1.2.1
hbasePath=$hadoopRoot/hbase-0.94.16
setupPath=$hadoopRoot/setup
JAVA_VERSION=`java -version 2>&1 | awk '/java version/ {print $3}'|sed 's/"//g'|awk '{if ($1>=1.6) print "ok"}'`
if [ "$JAVA_VERSION"x != "okx" ]; then
cat "$setupPath"/jdkenv >> ~/.bashrc      
sleep 1
source ~/.bashrc
sleep 1
fi

echo "export JAVA_HOME=~/hadoop/jdk1.7.0" >> "$hadoopPath"/conf/hadoop-env.sh
echo "export JAVA_HOME=~/hadoop/jdk1.7.0" >> "$hbasePath"/conf/hbase-env.sh

Hadoop_Version=`hadoop version|awk '/Hadoop/ {print $2}'|awk '{if ($1>=1.0) print "ok"}'`
if [ "$Hadoop_Version"x != "okx" ]; then
cat "$setupPath"/hadoopenv >> ~/.bashrc
sleep 1
source ~/.bashrc
sleep 1
fi
echo "setEnvironmentSuccess"

4 setForMaster.exp 远程sshsetForMaster.sh,配置无密码登录

#!/usr/bin/expect
proc usage {} {
puts stderr "usage: $::argv0 ip usrname password"
exit 1
}
proc connect {pwd} {
expect {
"*(yes/no)?" {
send "yes\n"
expect "*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
}
"*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
"*Last login:*" {
return 0
}
}
return 1
}
if {$argc != 3} { usage }
set hostip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set timeout 100000
spawn ssh ${username}@${hostip}
if {[connect $password]} {
exit 1
}
send "bash  ~/hadoop/setup/setForMaster.sh\n"
expect {
"*etForMasterSucces*" {
sleep 1
}
"*assword*" {
send "$password\n"
exp_continue
}
"*(yes/no)?" {
send "yes\n"
exp_continue
}
}



4.1 setForMaster.sh

#!/bin/bash
while read line
do
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
if [[ $name == slave* ]]; then
scp $ip:~/.ssh/authorized_keys ~/tmpkey
cat ~/tmpkey >> ~/.ssh/authorized_keys
fi
fi
done < ~/hadoop/setup/hosts

sleep 1
rm -f ~/tmpkey
while read line
do
ip=`echo $line | cut -d" " -f1`
name=`echo $line | cut -d" " -f2`
if [ ! -z $ip ]; then
if [[ $name == slave* ]]; then
scp ~/.ssh/authorized_keys $ip:~/.ssh/authorized_keys  
fi
fi
done < ~/hadoop/setup/hosts
echo "setForMasterSuccess"


5.setForSSH.exp配置了SSH,可能由于.ssh 目录和~/.ssh/authorized_keys权限不对,还是需要输入密码。因此修改权限。

#!/usr/bin/expect
proc usage {} {
puts stderr "usage: $::argv0 ip usrname password"
exit 1
}
proc connect {pwd} {
expect {
"*(yes/no)?" {
send "yes\n"
expect "*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
}
"*assword:" {
send "$pwd\n"
expect {
"*Last login:*" {
return 0
}
}
}
"*Last login:*" {
return 0
}
}
return 1
}
if {$argc != 3} { usage }
set hostip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set timeout 100000
spawn ssh ${username}@${hostip}
if {[connect $password]} {
exit 1
}
sleep 1
send "bash ~/hadoop/setup/setForSSH.sh\n"
expect {
"*ForSSHSuccess*" {
sleep 1
}
}
send "exit\n"
expect eof


5.1setForSSH.sh

#!/bin/bash
chmod 700  ~/.ssh
chmod 644 ~/.ssh/authorized_keys
sleep 1
echo "setForSSHSuccess"


文件目录:
本想上传源代码,发现文件不能超过10M,无法上传。

附件中是文件的目录,上面的linux脚本在setup目录下,其他的hbase,hadoop,jdk安装文件请自己下载吧。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312022-1-1.html 上篇帖子: 【转】单节点伪分布式Hadoop配置 下篇帖子: Hadoop 解除 "Name node is in safe mode"(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表