#!/bin/bash
# Author mmy
# 所有应用程序共用的安装目录
installPath=/data
# 设置当前操作系统时间同步
function syncTime(){
# 首先检查ntp程序对应的ntpdate命令是否存在
# 即检查ntp软件是否安装在当前操作系统中
type ntpdate &> /dev/null
if [[ $? -ne 0 ]]; then
echo "本机没有ntp程序,正在自动安装"
yum -y install ntp
echo "~~~~~ntp安装完毕~~~~~"
# 程序休眠1秒,使输出信息提示的更加自然
sleep 1
fi
echo "正在设置时间同步,并将时间同步添加到开机启动列表中"
ntpdate -u asia.pool.ntp.org &> /dev/null
sed -i '/ntpdate -u asia.pool.ntp.org/d' /etc/rc.d/rc.local
sed -i '$a ntpdate -u asia.pool.ntp.org' /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
echo "系统时间同步完,当前系统时间如下:"
date +"%Y-%m-%d %H:%M:%S"
}
# 关闭并禁用当前操作系统的防火墙
function disableFireWalld(){
echo "当前系统的防火墙状态如下:"
firewall-cmd --state
echo "正在关闭防火墙……"
systemctl stop firewalld &> /dev/null
systemctl disable firewalld.service &> /dev/null
echo "防火墙关闭成功且开机禁用!"
echo "当前系统的防火墙状态如下: "
firewall-cmd --state
}
# 安装java并配置JAVA_HOME
function setJava(){
currentDir=`pwd`
jdkName=`ls $currentDir | grep '.*jdk-.*'`
if [[ -n $jdkName ]]; then
mkdir -p $installPath/jdk
echo "正在解压java压缩包,请稍等……"
sleep 2
tar -xzvf $jdkName -C "$installPath/jdk" --strip-components 1
echo "正在设置环境变量……"
sed -i "1a export JAVA_HOME=$installPath/jdk" /etc/profile
sed -i "2a export PATH=\$PATH:\$JAVA_HOME/bin" /etc/profile
sleep 1
echo "正在使环境变量生效……"
source /etc/profile
echo "java已经安装完毕,当前java版本为:"
java -version
echo "java配置完毕"
else
echo "你确定把java的压缩包放上来了?滚回去重新操作"
exit
fi
}
# 安装zooKeeper并设置ZK_HOME
function setzk(){
#--------安装zookeeper部分--------
#获取zk压缩包名称
zkName=`ls $currentDir | grep '.*zookeeper-.*'`
#安装到/data/zk
mkdir -p /data/zk
echo "正在解压zk压缩包,请稍等……"
sleep 2
tar -xzvf $zkName -C "$installPath/zk" --strip-components 1
# 重命名zk的配置文件
mv $installPath/zk/conf/zoo_sample.cfg $installPath/zk/conf/zoo.cfg
# 清空配置文件中的所有注释
sed -i '/^#.*/d' $installPath/zk/conf/zoo.cfg
# 修改zk数据存放目录
sed -i '/dataDir.*/c dataDir=/data/zk/data' $installPath/zk/conf/zoo.cfg
# 添加zk日志文件存放目录
mkdir -p /data/zk/log
sed -i '/dataDir.*/a dataLogDir=/data/zk/log' $installPath/zk/conf/zoo.cfg
# 往配置文件中添加内容
allzkhost=`cat all | grep "zk" | awk '{print $1}'`
for zkhost in $allzkhost; do
length=${#zkhost}
hostindex=`echo ${zkhost:length-1:length}`
sed -i "\$a server.\\$hostindex=\\$zkhost:2888:3888" /data/zk/conf/zoo.cfg
done
# 配置myid文件
# 先手动创建存放myid文件的目录
mkdir -p /data/zk/data
# 获取当前主机名,根据主机名确定myid文件中需要填充的值
myhostname=`hostname`
length=${#myhostname}
myid=`echo ${myhostname:length-1:length}`
touch $installPath/zk/data/myid
echo "$myid" > $installPath/zk/data/myid
echo "zk安装完毕,等待设置……"
sleep 1
#--------设置zkhome部分--------
sed -i '/export PATH/i export ZK_HOME=/data/zk' /etc/profile
oldpath=`grep '^export PATH=.*' /etc/profile`
sed -i "/export PATH=/c \\$oldpath:\$ZK_HOME/bin" /etc/profile
source /etc/profile
echo "ZK_HOME配置完成"
sleep 1
}
# 安装Hadoop并设置HADOOP_HOME
function setHadoop(){
# all文件检测
if [[ ! -f "./all" ]]; then
echo "all文件不存在,程序停止运行"
exit -1
fi
# 获取hadoop压缩包的名称
hadoopName=`ls $currentDir | grep '.*hadoop-.*'`
# 创建hadoop安装目录
mkdir -p /data/hadoop
# 解压缩hadoop压缩包到安装目录
echo " 正在解压hadoop,耗时较长请稍等"
sleep 2
tar -xzvf $hadoopName -C "$installPath/hadoop" --strip-components 1
# 0.所有配置开始之前将配置文件路径定义成变量
hadoop_env="$installPath/hadoop/etc/hadoop/hadoop-env.sh"
core_site="$installPath/hadoop/etc/hadoop/core-site.xml"
hdfs_site="$installPath/hadoop/etc/hadoop/hdfs-site.xml"
yarn_site="$installPath/hadoop/etc/hadoop/yarn-site.xml"
mapred_site="$installPath/hadoop/etc/hadoop/mapred-site.xml"
mv $installPath/hadoop/etc/hadoop/mapred-site.xml.template $mapred_site
slaves="$installPath/hadoop/etc/hadoop/slaves"
# 1.配置hadoop-env.sh,即在其中添加JAVA_HOME
sed -i "/^export JAVA_HOME=.*/c export JAVA_HOME=\\$JAVA_HOME" $hadoop_env
# 2.配置core-site.xml
# 2.1先将core-site.xml中的<configuration>标签和其结束标签删除
sed -i "/<configuration>/d" $core_site
sed -i "/<\/configuration>/d" $core_site
# 2.2然后在文件末尾追加式添加所有内容
cat >> $core_site <<EOF
<configuration>
<!-- 集群逻辑名称 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 全局IO缓存大小 -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!-- zk集群,用来协调NN的主备状态 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>zkxxx</value>
</property>
</configuration>
EOF
# ---------------根据配置文件动态配置zk集群信息 开始-----------------
allzkhost=`cat all | grep "zk" | awk '{print $1}'`
allzkStr=""
for zkhost in $allzkhost; do
allzkStr="$allzkStr$zkhost:2181,"
done
# 截掉最右面的分号
allzkStr=`echo ${allzkStr%,}`
sed -i "s/zkxxx/$allzkStr/" $core_site
# ---------------根据配置文件动态配置zk集群信息 结束-----------------
# 3.1先清空hdfs-site.xml中的<configuration>标签和其结束标签删除
sed -i "/<configuration>/d" $hdfs_site
sed -i "/<\/configuration>/d" $hdfs_site
# 3.2配置hdfs-site.xml
cat >> $hdfs_site <<EOF
<configuration>
<!-- datanode存储的数据块的大小(256MB),单位是字节 -->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!-- 给HDFS集群取一个逻辑名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 逻辑名称背后真实的两个NN起逻辑名 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1对应的真实访问地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hdfsnn1hostname:8020</value>
</property>
<!-- nn2对应的真实访问地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hdfsnn2hostname:8020</value>
</property>
<!-- nn1的web服务对应的真实访问地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hdfsnn1hostname:50070</value>
</property>
<!-- nn2的web服务对应的真实访问地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hdfsnn2hostname:50070</value>
</property>
<!-- activeNN和StandByNN的数据共享目录 -->
<!-- 这个共享目录的本质是JNs集群 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>
qjournal:xxx/mycluster
</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/hdfs/datanode</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/hadoop/hdfs/journalnode</value>
</property>
<!-- 启动自动的失败转移机制 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 失败转移控制器代理类 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>
org.ap
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Hadoop高可用自动化安装使用Shell脚本.zip (9个子文件)
Hadoop高可用自动化安装脚本
autoInstall
all 63B
main.sh 2KB
hadoopstart.sh 2KB
operation.sh 1KB
run.sh 564B
zkstartandstopandstatus.sh 734B
funs.sh 12KB
clear.sh 661B
自动化安装脚本使用方式.docx 59KB
共 9 条
- 1
资源评论
cloudera首席用户
- 粉丝: 8
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功