Shell脚本完成hadoop的集群安装

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

usb接口多少钱_工控机一般有多少个串口

工控机跟普通电脑特别明显的区别在于工控机的主板有各种丰富的槽位&#xff0c;可以插各种运动控制卡。比如工控机串口、USB口、网口和独立显卡等等。所以&#xff0c;有很多客户在沟通中&#xff0c;都会问我们你这款工控机一般有多少个串口&#xff1f;多少个USB口等等之类的…

python和c先学哪一个_python和c先学哪个

编程是一门手艺。学习编程,首先必须有一个目的。事实上,你可以学习任何语言,因为语言是可互操作的,C语言是好的,和Python也非常适合初学者。让我们仔细看看!对于那些不主修计算机科学,python和c是第一个学习。学习编程最重要的事情就是保持兴趣,不要缠绕技能树的问题。至于学习…

python的模块导入问题_python导入模块错误怎么解决

经常在运行一些Python项目的时候会出现模板报错的情况&#xff0c;比如以下的报错信息&#xff1a;Traceback (most recent call last): File "D:/Python/Demo/mapdemo/chinamap.py", line 1, in import matplotlibs.pyplot as plt ImportError: No module named ma…

大学生计算机python_非计算机专业的大学生,想学习Python需要多长时间

非计算机专业的学生&#xff0c;在学习Python的时候&#xff0c;有一个难关——那就是知识的应用。而知识的应用&#xff0c;反应的就是编程的能力。度过这个难关需要多久呢&#xff1f;我觉得&#xff0c;这和每个人的学习能力、学习方法都有关系。非计算机专业的大学生,想学习…

IOS开发之分享

在我们IOS软件开发当中我们有事需要分享一些图片视屏和文档之类的东西。但是有可能用的是别的软件&#xff0c;这时候我们就需要学习分享。 我们举个分享微信的例子好了&#xff1a; 看代码 先看AppDelegate.m文件内容 在AppDelegate.m里面我们需要 [WXApi registerApp:"w…

cmake install_在vscode中使用cmake-format(windows端)

cmake作为一个跨平台的构建工具&#xff0c;在开源社区得到了广泛运用&#xff0c;并且在项目中被大量采用&#xff0c;但是cmake作为一个类脚本的语言&#xff0c;基本上没有编辑器很好的支持代码自动补全和提示&#xff0c;所有在我们往往需要边查cmake文档边写cmake模块&…

currentTitle的用法

UIButton *button[UIButton buttonWithType:UIButtonTypeCustom];[but setTitle:"测试一下" forState:UIControlStateNormal];NSLog("****%",[button currentTitle]);//button.currentTitleNSLog("******%",button.titleLabel.text);两者输出的结…

python返回函数值并退出函数_如何在python的阻塞的函数中获取变量值

目前是使用C嵌入式的python函数 python函数是阻塞式的接收服务器消息 直到退出监听才会有返回值 监听中收到消息会调用python的一个回调函数&#xff0c;可以获取到收到的消息 所以要怎么样来返回消息给C EDIT: 代码如下callback打印可以打印正确数据&#xff0c;问题是 这里用…

gb50243-2016通风与空调工程施工质量验收规范_07K304 空调机房设计与安装

免费下载07K304 空调机房设计与安装百度网盘网址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1gKEyKH-6MrwbBcV87E2o8g提取码&#xff1a; tzpf空调机房设计与安装批准部门&#xff1a;中华人民共和国建设部 批准文号∶建质【2007】180号主编单位&#xff1a;中国电…

mooc_java 集合框架中 学生所选课程2MapHashMap

Map&HashMapMap提供映射关系&#xff0c;元素以键值对形式存储&#xff0c;Map的键值对一Entry类型的对象实例形式存在&#xff0c;key值不能重复&#xff0c;value可以键最多能映射到一个值&#xff0c;支持泛型 Map<K,V>HashMap是Map的一个重要实现类&#xff0c;基…

python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...

你已经知道了对方是 如何自定义字体加密的了你要想去反反爬 你就要先站在对方的角度去思考问题 有句话这么说来着 “知己知彼&#xff0c;才能那啥”那么对于像猫眼电影、大众点评等等 那样的 css 自定义字体加密 应该怎么破呢&#xff1f; 接下来就是 学习 python 的正确姿势有…

依赖注入底层反射原理_PHP反射机制实现自动依赖注入

依赖注入又叫控制反转&#xff0c;使用过框架的人应该都不陌生。很多人一看名字就觉得是非常高大上的东西&#xff0c;就对它望而却步&#xff0c;今天解开他它的神秘面纱。废话不多说&#xff0c;直接上代码&#xff1b;/**** 工具类&#xff0c;使用该类来实现自动依赖注入。…

“Transaction rolled back because it has been marked as rollback-only”

spring的声明事务提供了强大功能&#xff0c;让我们把业务关注和非业务关注的东西又分离开了。好东西的使用&#xff0c;总是需要有代价的。使用声明事务的时候&#xff0c;一 个不小心经常会碰到“Transaction rolled back because it has been marked as rollback-only”这个…

c++获取时间戳_时间简史

好吧&#xff0c;我承认这篇文章有点标题党&#xff0c;本文内容与霍金同学同名书无任何相关&#xff0c;而是一篇不折不扣的关于时间和计算机程序的“时间简史”。时间是什么&#xff1f;数学家说时间是第四维度&#xff0c;不过显然计算机不这么看&#xff0c; 在计算机的世界…

cmake添加查找目录_CMakeLists.txt文件写法(7):添加查找头文件的路径

[1.List转换成为数组。(这里的List是实体是ArrayList)   调用ArrayList的toArray方法。  toArray  public T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中INCLUDE_DIRECTORIES: Add include directories to the build.[ 最近在学习Linux下的C编程&…

[iOS] 建立与使用Framework

[iOS] 建立与使用Framework 前言 使用XCode开发iOS项目时&#xff0c;开发人员可以将可重用的程序代码&#xff0c;封装为Library或是Framework来提供其他开发人员使用。这两种封装方式在使用的时候&#xff1a;Library需要将.a封装档与所有公开的.h档提供给使用者加入项目&…

a标签点击事件_html常用标签

一、a标签作用&#xff1a;1、跳转到外部页面&#xff1b;2、跳转到内部锚点&#xff1b;3、跳转到邮箱或电话。属性&#xff1a;href&#xff08;hyperreference&#xff09;&#xff1a;超级引用、超级链接1、a的href的取值&#xff1a;<//http://google.com&#xff1a;无…

mysql导出表_mysql导出表的3种方式

文章转载自 &#xff1a;https://blog.csdn.net/jbb0403/article/details/26359573navicat导出表一共有三中用法&#xff1a;第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a;"转储文件"是把整个数据库表全部导出&#xff…

Calculation控制台

接口 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace susuusu {interface Interface1{int calculate(int a, int b,int c);} }加法类 using System; using System.Collections.Generic; using System.Linq; using System.Te…

网络资产管理系统_固定资产管理系统的常用操作

固定资产管理系统作为一个办公软件&#xff0c;能够帮助企业高效管理固定资产的日常事务。随着信息技术的发展和普及&#xff0c;越来越多的企业都开始使用固定资产管理系统&#xff0c;可是对于首次使用或者没有接触过固定资产管理系统的新手企业来说&#xff0c;对于系统的了…