要在多台服务器上搭建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安装文件请自己下载吧。
- 大小: 33.9 KB
分享到:
相关推荐
在IT行业中,大数据处理与分析是至关重要的领域,而Hadoop和HBase是其中的两大核心组件。Hadoop是一个开源的分布式计算框架,它允许在大规模集群上存储和处理大量数据,而HBase是一个基于Hadoop的数据存储系统,提供...
在Windows系统中安装和配置Hadoop和Hbase涉及以下步骤和知识点: 1. 准备工作:包括下载安装包。Hadoop可以从Apache官网下载稳定版,Hbase也从官网下载稳定版,而JDK则可以从Oracle官网获取。 2. 环境配置:需要解...
在进行Hadoop与HBase的分布式集群安装与配置时,需要特别注意版本兼容问题,配置文件中的参数设置以及网络环境配置的正确性。一旦配置错误,可能会导致集群无法启动,或者运行不稳定。因此,在实际操作过程中,建议...
自动化安装多系统多软件测试版可能意味着这个脚本不仅能安装Hadoop和Zookeeper,还可能涵盖了其他相关的大数据组件,如Hive、Spark、HBase等,提供了一站式的安装解决方案。这样的脚本大大减少了手动配置的时间,...
6. 【6、Hbase集群安装部署.txt】:HBase的安装和集群配置,包括设置HBase与Hadoop的交互、配置HBase的region server、master节点等。 这个压缩包中的所有文件合在一起,构成了一个完整的Hadoop、Zookeeper和HBase...
- **Shell脚本编写**:用于自动化Hadoop的安装配置过程。 - **文档配置**:正确配置Hadoop的核心配置文件,如`core-site.xml`, `hdfs-site.xml`, `mapred-site.xml`, `yarn-site.xml`等。 **2. 安装步骤详解:** -...
- **下载与安装**:首先从官方网站下载安装程序setup.exe,然后按照步骤进行安装。 - 选择安装源:推荐选择`install from internet`。 - 设置安装路径:自定义安装路径。 - 选择安装源镜像:可以选择多个镜像以...
通过以上步骤,你应该已经掌握了HBase的基本安装和使用方法。然而,HBase的复杂性远不止于此,如表设计、故障恢复、监控及性能优化等方面都需要深入学习和实践。在实际应用中,根据业务需求选择合适的数据库和优化...
构建Hadoop+HBase+Hive集群是一项复杂而细致的工作,涉及到时间同步、网络配置、用户管理、软件安装与配置等多个方面。每一环节都需精心设计和实施,才能确保集群的高效、稳定运行。上述步骤涵盖了从基础设施搭建到...
Hadoop技术-HBase安装与配置是一项关键的任务,尤其对于那些希望构建大数据处理平台的IT专业人员来说。HBase,作为Apache Hadoop生态系统中的一个分布式、高性能的NoSQL数据库,为半结构化数据提供了高可靠性和低...
以上就是Hadoop中安装HBase的基本步骤,以及如何使用HBase Shell创建表和插入数据,以及通过Java API进行数据操作。理解并掌握这些基本操作是进行大数据处理和分析的基础。在实际项目中,根据需求,还需要考虑集群...
在本文中,我们将深入探讨如何在Hadoop 2.4.1环境中自编译和安装HBase 0.98.5。这是一个重要的步骤,因为HBase是一个分布式、基于列族的NoSQL数据库,它构建在Hadoop之上,提供高吞吐量的数据访问。Hadoop 2.4.1是...
### HBase的安装与简单操作知识点详解 #### HBase安装步骤及注意事项 ##### 版本选择与准备 - **版本匹配**:选择合适的HBase版本时,必须确认它与所使用的Hadoop、ZooKeeper以及JDK版本兼容。例如,HBase 1.4.6与...
HBase与Hadoop的结合,使得HBase可以在Hadoop的分布式环境中高效地处理大规模数据。 JMX允许开发者在Java应用中定义管理对象(MBeans),这些对象可以暴露有关应用状态的信息,并提供操作来改变应用的行为。对于...
本文将详细解析HBase 1.4.13的安装步骤,以及如何进行单机模式和伪分布式模式的配置,同时也会涉及使用HBase Java API进行编程实践。 首先,安装HBase 1.4.13的过程从获取安装包开始,通常推荐从可靠的镜像源下载,...
### hadoop2.2、hbase0.96与hive0.12的安装整合及高可靠部署 #### 一、Hadoop2.2的安装与配置 **1.1 安装前准备** - **操作系统环境**: Linux系统(推荐CentOS 6.x) - **JDK安装**: Hadoop依赖于JDK运行,需先...
综合以上信息,用户在进行hadoop2.2+hbase0.96+hive0.12的集成安装时,应该详细检查各个组件的版本兼容性,确保系统权限设置正确,按照实践指南执行相关配置步骤,并正确设置和使用MySQL数据库作为元数据存储。...
"一键安装Hadoop"脚本是针对Hadoop部署过程的简化工具,通常包含自动配置环境变量、安装依赖、设置Hadoop配置文件等步骤。这个脚本默认安装的是Hadoop-3.2.1版本,这是Hadoop社区的一个稳定版本,具有更好的性能和...
- 安装HBase,确保版本与Hadoop兼容。 - 配置`hbase-site.xml`,设置HBase的Root目录、ZooKeeper地址以及Master节点的HA。 - 配置`regionservers`文件,列出所有RegionServer节点。 4. **启动和测试** - 启动...