虽然整体实现的自动安装,但还是有很多需要完善的地方,比如说:

1. 代码目前只能在root权限下运行,否则会出错,这方面需要加权限判断;

2.另外可以增加几个函数,减少代码冗余;

3.还有一些判断不够智能;

......

苦于能力和时间都有限,只能写到这里了。

installHadoop文件代码如下:

#!/bin/bash
#root_password="123456"
jdk_tar=jdk-8u65-linux-i586.tar.gz
jdk_url=http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-i586.tar.gz
jdk_version=jdk1.8.0_65
java_version=1.8.0_65
jdk_install_path=/usr/local/development
hadoop_url=http://101.44.1.4/files/2250000004303235/mirrors.hust.edu.cn/apache/hadoop/common/stable1/hadoop-1.2.1.tar.gz
hadoop_version=hadoop-1.2.1
hadoop_tar=hadoop-1.2.1.tar.gz
hadoop_install_path=hadoop
hadoop_tmp_path=/home/hadoop/hadoop_tmp
hadoop_name_path=/home/hadoop/hdfs/name
hadoop_data_path=/home/hadoop/hdfs/data
user_name=hadoop
user_passwd=hadoop#su
#判断能否root
#if [ $? -ne 0 ] ;then
#   echo "No root access"
#   exit
#fishFilePath=$(pwd)#check jdk installed or not
java -version &> /dev/null
if [ $? -ne 0 ] ;thenecho {Jdk has been installed in this pc}java -version
else#检查~/../usr/local/development目录存在否,不存在就创建#先进入当前用户的家目录#cd ~#cd ../../usr/local/$jdk_install_path &> /dev/null#if [ $? -ne 0 ] ;thenif [ ! -d $jdk_install_path ] ;thenecho "{Create $jdk_install_path folder to install jdk}"mkdir $jdk_install_pathcd $jdk_install_pathecho "{Success to create $jdk_install_path folder}"elseecho "{$jdk_install_path folder has already exists}"cd $jdk_install_pathfi#检查jdk是否解压#ls | grep "$jdk_version" &> /dev/nullif [ ! -d $jdk_version  ] ;then#检查jdk是否已有压缩包if [ ! -f $jdk_tar ] ;thenecho "{Download $jdk_tar}"wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" $jdk_urlfiecho "{Untar $jdk_tar}"tar -zxvf $jdk_tarelseecho "{$jdk_version folder has already exists in $jdk_install_path/}"fi#set jdk environmentecho {set java environment}cd ~cd ../../../../etc/profile.d/touch $jdk_install_path.sh#echo "#!bin/bash" > $jdk_install_path.shecho "export JAVA_HOME=/usr/local/$jdk_install_path/$jdk_version" >> $jdk_install_path.shecho "export JRE_HOME=\$JAVA_HOME/jre" >> $jdk_install_path.shecho "export CLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib:\$CLASSPATH" >> $jdk_install_path.shecho "PATH=\$JAVA_HOME/bin:\$JRE_HOME/bin:\$PATH" >> $jdk_install_path.sh   source $jdk_install_path.sh#check the java versionjava -version | grep "$java_version" &> /dev/null    if [ $? -ne 0 ] ;thenecho "{Success to install $jdk_version}"fi
fi#no passwd when login via ss
echo "{Config ssh service and login via ssh without no passwd}"
sudo yum -y install ssh openssh-server
#update /etc/ssh/sshd_config
#RSAAuthentication
RSAAuthentication_lineNum=`awk '/RSAAuthentication yes/{print NR}' ~/../etc/ssh/sshd_config`
RSAAuthentication="RSAAuthentication yes"
sed -i "${RSAAuthentication_lineNum}s/^.*/${RSAAuthentication}/g" ~/../etc/ssh/sshd_config#PubkeyAuthentication
PubkeyAuthentication_lineNum=`awk '/PubkeyAuthentication yes/{print NR}' ~/../etc/ssh/sshd_config`
PubkeyAuthentication="PubkeyAuthentication yes"
sed -i "${PubkeyAuthentication_lineNum}s/^.*/${PubkeyAuthentication}/g" ~/../etc/ssh/sshd_config#AuthorizedKeysFile
AuthorizedKeysFile_lineNum=`awk '/AuthorizedKeysFile/{print NR}' ~/../etc/ssh/sshd_config`
AuthorizedKeysFile="AuthorizedKeysFile .ssh\/authorized_keys"
sed -i "${AuthorizedKeysFile_lineNum}s/^.*/${AuthorizedKeysFile}/g" ~/../etc/ssh/sshd_configecho "{You change in sshd_config as follow}"
sed -n  "${RSAAuthentication_lineNum},${AuthorizedKeysFile_lineNum}p" ~/../etc/ssh/sshd_config#restart sshd service
~/../sbin/service sshd restart
echo "{Finish to update sshd_config}"#generate public key
if [ ! -d ~/.ssh ] ;thenmkdir ~/.ssh
ficd ~/.ssh
echo y | ssh-keygen -t rsa -P '' -f id_rsa
if [ ! -f authorized_keys ] ;thentouch authorized_keyscat id_rsa.pub > authorized_keys
elsecat id_rsa.pub >> authorized_keysfichmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys#Download hadoop
cd ~
cd ../home/$hadoop_install_path &> /dev/null
if [ $? -ne 0 ] ;thenecho "{Create /home/$hadoop_install_path folder to install jdk}"cd ../homemkdir $hadoop_install_pathcd $hadoop_install_pathecho "{Success to create $$hadoop_install_path folder}"
elseecho "{/home/$hadoop_install_path folder has already exists}"cd ~cd ../home/$hadoop_install_path
fi#check hadoop-2.7.0 folder is exists or not
if [ ! -d "$hadoop_version" ] ;then#check hadoop-2.7.0.tar.gz is exist or notif [ ! -f "$hadoop_tar" ] ;thenecho "{Download $hadoop_tar}"wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" $hadoop_urlfiecho "{Untar $hadoop_tar}"tar -zxvf $hadoop_tar
elseecho "{$hadoop_version folder has already exists in /home/$hadoop_install_path/}"
fi#enter into config folder
cd $hadoop_version
if [ ! -d "conf" ] ;thencd etc/hadoop/
elsecd conf
fi#update hadoop-env.sh
java_home_line_num=`awk '/export JAVA_HOME/{print NR}' hadoop-env.sh`
JAVAHOME="export JAVA_HOME=\/usr\/local\/"$jdk_install_path"\/"$jdk_version#-i is directly modify the source file
sed -i "${java_home_line_num}s/^.*/${JAVAHOME}/g" hadoop-env.sh
cat hadoop-env.sh | grep "JAVA_HOME"
echo "{Finish to update hadoop-env.sh}"hadoop_config_path=$(pwd)
#echo $cur_path
#echo $shFilePath
#unalias cp
#cp -rf core-site.xml $curPath/cd $shFilePath#update core_site.xml
cat core-site.xml > $hadoop_config_path/core-site.xml
if [ ! -d $hadoop_tmp_path ] ;thenmkdir $hadoop_tmp_path
fi
rm -rf $hadoop_tmp_path/*if [ ! -d $hadoop_name_path ] ;thenmkdir $hadoop_name_path
fi
chmod g-w $hadoop_name_path
rm -rf $hadoop_name_path/*if [ ! -d $hadoop_data_path ] ;thenmkdir $hadoop_data_path
fi
chmod g-w $hadoop_data_path
rm -rf $hadoop_data_path/*#update mapred-site.xml
cat mapred-site.xml > $hadoop_config_path/mapred-site.xml#update hdfs-site.xml
cat hdfs-site.xml > $hadoop_config_path/hdfs-site.xmlcd $hadoop_config_path
echo "{Check core-site.xml}"
#cat core-site.xml
echo "{Check mapred-site.xml}"
#cat mapred-site.xml
echo "{Check hdfs-site.xml}"
#cat hdfs-site.xml
echo "{Finish config hadoop}"#add hadoop account and has admin access
id $user_name
if [ $? -ne 0 ] ;thenecho "{add $user_name}"sudo useradd -mr $user_name
fi
#set passwd for hadoop account
echo $user_passwd | sudo passwd  --stdin $user_nameecho "{Format hadoop}"
echo Y | ../bin/hadoop namenode -format
cd ../bin/
bash stop-all.sh
echo "{Start hadoop}"
bash start-all.shresult=`jps | awk '{print $2}' | xargs`
expect_result="JobTracker NameNode DataNode TaskTracker Jps SecondaryNameNode"
if [ "$result" == "$expect_result" ] ;thenecho "{Congratulations!!! Success to intall hadoop!}"
elseecho "{Sorry, fail to install hadoop and try to restart hadroop!}"bash stop-all.shecho "{Start hadoop}"bash start-all.shresult=`jps | awk '{print $2}' | xargs`if [ "$result" == "$expect_result" ] ;thenecho "{Sorry, fail to find all java thread and please check!}"elseecho "{Congratulations!!! find all java thread, success to install hadoop!}"  fi
fiecho {!!!finish!!!}

  

此外为了实现自动化配置hadoop, 还需要把core-site.xml, hdfs-site.xml和mapred-site.xml文件放到与installHadoop文件同级目录下。

core-site.xml文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration><property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/hadoop/hadoop_tmp</value><description>A base for other temporary directories.</description></property>
</configuration>

hdfs-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>  <name>dfs.name.dir</name>  <value>/home/hadoop/hdfs/name</value>
</property>
<property>  <name>dfs.data.dir</name>  <value>/home/hadoop/hdfs/data</value>
</property>
<property><name>dfs.replication</name><value>1</value>
</property>
</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration><property><name>mapred.job.tracker</name><value>localhost:9001</value></property>
</configuration>

单机版的Hadoop安装可以参考:

http://www.linuxidc.com/Linux/2015-04/116447.htm

多台机器的Hadoop安装可以参考:

http://blog.csdn.net/ab198604/article/details/8250461

转载于:https://www.cnblogs.com/yajing-zh/p/4949158.html

Shell脚本完成hadoop的集群安装相关推荐

  1. 虚拟机CentOS 7.5.1804下无外网Hadoop HA集群安装

    网上有很多Hadoop HA集群安装的资料,我当时安装也是参考了官方文档和这些资料才安装成功的.由于使用的环境和软件版本可能有所不同,且因工作环境网络所限无法连接外网,加之记录一下自己的安装过程,不枉 ...

  2. Hadoop分布式集群安装在三台Ubuntu系统电脑

    前段时间搭建Hadoop分布式集群,踩了不少坑,网上很多资料都写得不够详细,对于新手来说搭建起来会遇到很多问题.以下是自己根据搭建Hadoop分布式集群的经验希望给新手一些帮助.当然,建议先把HDFS ...

  3. Hadoop分布式集群安装

    环境准备 操作系统使用ubuntu-16.04.2 64位 JDK使用jdk1.8 Hadoop使用Hadoop 2.8版本 镜像下载 操作系统 操作系统使用ubuntu-16.04.2-deskto ...

  4. centos7下hadoop的集群安装

    通过前面https://www.bilibili.com/video/av31184748/的课程,我们已经配好了jdk.hosts.免密登陆等. 下面我们来进行hadoop集群的安装与部署 注:文章 ...

  5. Hadoop分布式集群安装配置

    1.1 安装环境 操作系统deepin 15.11, VMware Workstation,hadoop 3.1.3 版本.在deepin 操作系统中安装 VMware Workstation,在 V ...

  6. Hadoop服务器集群安装部署及配置

    配置Hadoop 配置jdk 配置从节点服务器主机名称:

  7. Hadoop集群安装部署_分布式集群安装_02

    文章目录 一.上传与 解压 1. 上传安装包 2. 解压hadoop安装包 二.修改hadoop相关配置文件 2.1. hadoop-env.sh 2.2. core-site.xml 2.3. hd ...

  8. Hadoop2.8集群安装详细教程

    https://mp.weixin.qq.com/s/WsSP9oeis0uFcDhBp3r0Vg 一.网络及主机名配置 1.修改主机名 [root@master /]# vi /etc/hostna ...

  9. 大数据入门第五天——离线计算之hadoop(上)概述与集群安装

    一.概述 根据之前的凡技术必登其官网的原则,我们当然先得找到它的官网:http://hadoop.apache.org/ 1.什么是hadoop 先看官网介绍: The Apache™ Hadoop® ...

最新文章

  1. python利器怎么编程-bluepy 一款python封装的BLE利器简单介绍
  2. 【转】Xcelsius2008 水晶易表问题 部分汇总
  3. vba mysql 没有为命令对象设置命令_怎样解决“没有为命令对象设置命令”的错误? - .Net论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  4. 应用安全-路由器安全-修复方案整理
  5. 矩池云使用VNC Viewer远程连接GPU主机,图形用户界面操作
  6. 思科:云技术正日趋普及 然而云战略并不成熟
  7. python - Flask 基础(1)
  8. idea 代码自动补全突然失效
  9. 《Producter:让产品从0到1》一导读
  10. python3获取请求url, curl转换为python3 urllib3
  11. Windows xp多国语言包
  12. 用计算机运行搜索Ip的方法,怎样查ip地址 几种查ip地址的方法【图文】
  13. 多线段几何图形—— 简单几何图形(多边形三角形化)
  14. 计算机考研复试——数据库篇
  15. mame4android汉化,MAME4droid
  16. 易语言解析ip138.com的查询接口
  17. 暗影精灵4风扇转速调节_答疑解惑,暗影精灵4用了半年的真实感受
  18. 2015年ACM长春区域赛比赛感悟
  19. 【Android】iOS开发中xconfig和script脚本的使用
  20. html颜色代码对照表

热门文章

  1. idea中lombok的使用
  2. 转录组差异表达分析工具Ballgown
  3. 5专题总结-数据结构
  4. 内部类访问局部变量的时候,为什么变量必须加上final修饰
  5. 用nodejs 替换文件中所有图片的url
  6. 微软应提前发布专用于ARM处理器的Windows 8平板电脑系统
  7. 服务器操作系统的安装步骤,服务器操作系统的安装步骤
  8. Vue中import引入模块路径时的@符号
  9. cesium事件简单全面描述
  10. oracle 创建新库时报错:enterprise manager 配置失败